From ac8545b9f9a2f4da0df595ccceb204152d68c604 Mon Sep 17 00:00:00 2001 From: Dmitry Adamushko Date: Sun, 17 Feb 2008 22:34:07 +0100 Subject: [PATCH] --- yaml --- r: 91055 b: refs/heads/master c: 19fb518c2a0c5d88ed22bba7083b7e7bc2a9c231 h: refs/heads/master i: 91053: 023118284b584dce19d43651e228f371537a5af3 91051: 1fb612c76c56bdbbd73a5a9621f833383f8e2eff 91047: 05eeed8e49c3e69c8468fc1a82f80a19d6276129 91039: 20c1496f682c8a4196aaaa2c50dda72e59b116bb v: v3 --- [refs] | 2 +- trunk/kernel/latencytop.c | 27 +++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index 995a4bf12d58..e39e322eebfc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 50df5d6aea6694ca481b8005900401e8c95c2603 +refs/heads/master: 19fb518c2a0c5d88ed22bba7083b7e7bc2a9c231 diff --git a/trunk/kernel/latencytop.c b/trunk/kernel/latencytop.c index b4e3c85abe74..7c74dab0d21b 100644 --- a/trunk/kernel/latencytop.c +++ b/trunk/kernel/latencytop.c @@ -64,8 +64,8 @@ account_global_scheduler_latency(struct task_struct *tsk, struct latency_record return; for (i = 0; i < MAXLR; i++) { - int q; - int same = 1; + int q, same = 1; + /* Nothing stored: */ if (!latency_record[i].backtrace[0]) { if (firstnonnull > i) @@ -73,12 +73,15 @@ account_global_scheduler_latency(struct task_struct *tsk, struct latency_record continue; } for (q = 0 ; q < LT_BACKTRACEDEPTH ; q++) { - if (latency_record[i].backtrace[q] != - lat->backtrace[q]) + unsigned long record = lat->backtrace[q]; + + if (latency_record[i].backtrace[q] != record) { same = 0; - if (same && lat->backtrace[q] == 0) break; - if (same && lat->backtrace[q] == ULONG_MAX) + } + + /* 0 and ULONG_MAX entries mean end of backtrace: */ + if (record == 0 || record == ULONG_MAX) break; } if (same) { @@ -143,14 +146,18 @@ account_scheduler_latency(struct task_struct *tsk, int usecs, int inter) for (i = 0; i < LT_SAVECOUNT ; i++) { struct latency_record *mylat; int same = 1; + mylat = &tsk->latency_record[i]; for (q = 0 ; q < LT_BACKTRACEDEPTH ; q++) { - if (mylat->backtrace[q] != - lat.backtrace[q]) + unsigned long record = lat.backtrace[q]; + + if (mylat->backtrace[q] != record) { same = 0; - if (same && lat.backtrace[q] == 0) break; - if (same && lat.backtrace[q] == ULONG_MAX) + } + + /* 0 and ULONG_MAX entries mean end of backtrace: */ + if (record == 0 || record == ULONG_MAX) break; } if (same) {