Prev: signals-clear-signal-tty-when-the-last-thread-exits.fix
Next: first bad commit: 1f36f774 Switch !O_CREAT case to use of do_last()
From: Peter Zijlstra on 24 Mar 2010 11:50 On Mon, 2010-03-15 at 10:10 +0100, Oleg Nesterov wrote: > static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p) > { > + struct rq *rq = cpu_rq(dead_cpu); > + int needs_cpu, dest_cpu; > + unsigned long flags; > again: > + local_irq_save(flags); > + > + raw_spin_lock(&rq->lock); > + needs_cpu = (task_cpu(p) == dead_cpu) && (p->state != TASK_WAKING); ^ kernel/sched.c:5445: warning: 'dest_cpu' may be used uninitialized in this function > + if (needs_cpu) > + dest_cpu = select_fallback_rq(dead_cpu, p); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Peter Zijlstra on 24 Mar 2010 12:20 On Wed, 2010-03-24 at 17:07 +0100, Oleg Nesterov wrote: > On 03/24, Peter Zijlstra wrote: > > > > On Mon, 2010-03-15 at 10:10 +0100, Oleg Nesterov wrote: > > > static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p) > > > { > > > + struct rq *rq = cpu_rq(dead_cpu); > > > + int needs_cpu, dest_cpu; > > > + unsigned long flags; > > > again: > > > + local_irq_save(flags); > > > + > > > + raw_spin_lock(&rq->lock); > > > + needs_cpu = (task_cpu(p) == dead_cpu) && (p->state != TASK_WAKING); > > > > ^ > > kernel/sched.c:5445: warning: 'dest_cpu' may be used uninitialized in this function > > Hmm. looks like my gcc is more friendly... Hrm, that and I'm apparently unable to read, it said dest_cpu, not dead_cpu.. a well, I'll slam an __maybe_unused in. > OK. certainly I'll send the updated patch, if this series passes > your review otherwise. Yeah, you made a few good points in 0/6, am now staring at the code on how to close those holes, hope to post something sensible soon. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Peter Zijlstra on 26 Mar 2010 05:10
On Wed, 2010-03-24 at 17:33 +0100, Oleg Nesterov wrote: > On 03/24, Peter Zijlstra wrote: > > > > Yeah, you made a few good points in 0/6, am now staring at the code on > > how to close those holes, hope to post something sensible soon. > > Yes, great. > > Speaking of 0/6, I forgot to ask a couple more question... > > try_to_wake_up() does task_rq_lock() which checks TASK_WAKING. Perhaps > it shouldn't ? I mean, perhaps try_to_wake_up() can take rq->lock without > checking task->state. It can never race with the owner of TASK_WAKING, > before anything else we check "p->state & state". You're right, but creating a special task_rq_lock() for ttwu() went a little far, but now that we can remove all that again, this too should be good again. > And a stupid question. While doing these changes I was really, really > puzzled by task_rq_lock() which does > > local_irq_save(*flags); > rq = task_rq(p); > raw_spin_lock(&rq->lock); > > to the point, I even tried to read the comment which says: > > Note the ordering: we can safely lookup the task_rq without > explicitly disabling preemption. > > Could you please explain what does this mean? IOW, why can't we do > > rq = task_rq(p); > raw_spin_lock_irqsave(&rq->lock, flags); > > instead? I'm not sure why that is the case, v2.6.14:kernel/sched.c already has that. Ingo can you remember any reason for this or should we change the code like Oleg suggests? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |