Messages in this thread | | | Date | Thu, 10 May 2012 12:46:16 +0800 | From | Michael Wang <> | Subject | Re: [PATCH] sched: Make nr_uninterruptible count a signed value |
| |
On 05/10/2012 02:55 AM, Diwakar Tundlam wrote:
>>> - P(nr_uninterruptible); >>> + P((signed long)nr_uninterruptible); > > I thought of it too, but it won't compile because the P macro expands to dereferencing rq->nr_uninterruptible, so with your change, it will show up as rq->(signed long)nr_uninterruptible which is a syntax error. >
oh, I see, so looks like it's a little hard to avoid some ugly change...
--Michael Wang
> --Diwakar. > > -----Original Message----- > From: Michael Wang [mailto:wangyun@linux.vnet.ibm.com] > Sent: Wednesday, May 09, 2012 12:49 AM > To: Diwakar Tundlam > Cc: 'Peter Zijlstra'; 'Ingo Molnar'; 'David Rientjes'; 'linux-kernel@vger.kernel.org'; Peter De Schrijver > Subject: Re: [PATCH] sched: Make nr_uninterruptible count a signed value > > On 05/09/2012 06:46 AM, Diwakar Tundlam wrote: > >>> No that's right. nr_uninterruptible counts the number of tasks in >>> uninterruptible sleep, so deactivate_task puts a task to sleep, so we >>> need to increment the number of sleeping tasks, activate_task wakes a >>> task up so we need to decrement the number of sleeping tasks. >> >> Yep, I looked at the code for task_contributes_to_load() and I understand what it is all about. >> The ++ and -- are correct, I see it now. >> >> On the -ve values, strangely inspite of %Ld in the print statement, in my kernel, I see high unsigned values instead of -ve values for nr_uninterruptible. >> >> But the sum is always 0, though. >> >> Maybe it is an artifact of 32-bit machine displaying 64-bit print format. >> An (unsigned long)(-24) promoted to (signed long long) ends up as 4294967272. >> As seen in my output of sched_debug. > > > This may do some help. > > Regards, > Michael Wang > --- > kernel/sched/debug.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 09acaa1..ab9d53f 100644 > --- a/kernel/sched/debug.c > +++ b/kernel/sched/debug.c > @@ -270,7 +270,7 @@ static void print_cpu(struct seq_file *m, int cpu) > rq->load.weight); > P(nr_switches); > P(nr_load_updates); > - P(nr_uninterruptible); > + P((signed long)nr_uninterruptible); > PN(next_balance); > P(curr->pid); > PN(clock); > -- > 1.7.4.1 >
| |