Messages in this thread Patch in this message | | | Date | Mon, 8 Apr 2013 11:24:14 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: kernel BUG at kernel/smpboot.c:134! |
| |
On Sun, 7 Apr 2013, Borislav Petkov wrote:
> On Sun, Apr 07, 2013 at 11:20:10AM +0200, Thomas Gleixner wrote: > > And it's even more bogus because the cpu to which we would bind in > > kthread_create_on_cpu() is not yet online. > > In case you guys are wondering about reproducibility, I saw the same > BUG_ON yesterday on a 32-bit atom smp qemu guest too (don't ask why? > :-))
I don't have to ask. It's caused by massive brain failure on my side.
Does the patch below fix the issue ?
Thanks,
tglx --- Index: linux-2.6/kernel/kthread.c =================================================================== --- linux-2.6.orig/kernel/kthread.c +++ linux-2.6/kernel/kthread.c @@ -131,8 +131,14 @@ static void __kthread_parkme(struct kthr schedule(); __set_current_state(TASK_INTERRUPTIBLE); } - clear_bit(KTHREAD_IS_PARKED, &self->flags); __set_current_state(TASK_RUNNING); + clear_bit(KTHREAD_IS_PARKED, &self->flags); + + /* Rebind ourself to the target cpu */ + if (test_bit(KTHREAD_IS_PER_CPU, &self->flags)) { + set_cpus_allowed_ptr(currrent, cpumask_of(self->cpu)); + current->flags |= PF_THREAD_BOUND; + } } void kthread_parkme(void) @@ -344,11 +350,8 @@ void kthread_unpark(struct task_struct * * park before that happens we'd see the IS_PARKED bit * which might be about to be cleared. */ - if (test_and_clear_bit(KTHREAD_IS_PARKED, &kthread->flags)) { - if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags)) - __kthread_bind(k, kthread->cpu); + if (test_and_clear_bit(KTHREAD_IS_PARKED, &kthread->flags)) wake_up_process(k); - } } put_task_struct(k); }
| |