Messages in this thread | | | Date | Thu, 23 Oct 2008 22:49:06 +0400 | From | Cyrill Gorcunov <> | Subject | Re: do_boot_cpu can deadlock? |
| |
[Gautham R Shenoy - Thu, Oct 23, 2008 at 11:51:19PM +0530] | On Thu, Oct 23, 2008 at 07:02:12PM +0200, Oleg Nesterov wrote: | > Hmm. arch/x86/kernel/smpboot.c:do_boot_cpu() can deadlock ? | > | > It is called from _cpu_up() under cpu_hotplug_begin(), and it | > waits for c_idle.work. Again, if we have the pending work which | > needs get_online_cpus() we seem to have problems. | | Good point. Though this code gets triggered mostly during boot time when | the CPUs are being brought online for the first time. If we have some | work-item pending at that time, which needs get_online_cpus(), we could | possibly see this deadlock. | | > | > Oleg. | | -- | Thanks and Regards | gautham |
May I ask? If I understand right we do use this part of do_boot_cpu
if (!keventd_up() || current_is_keventd()) c_idle.work.func(&c_idle.work); else { schedule_work(&c_idle.work); wait_for_completion(&c_idle.done); }
if only we've been called the first time after power on. And all subsequent call of this do_boot_cpu would lead to
if (c_idle.idle) { c_idle.idle->thread.sp = (unsigned long) (((struct pt_regs *) (THREAD_SIZE + task_stack_page(c_idle.idle))) - 1); init_idle(c_idle.idle, cpu); goto do_rest; }
ie go to do_rest and no wait_for_completion/schedule_work at all. Did I miss something? *Sorry* in advance if the question is quite not related. This work-pending situation is in 'possible' scenario only (ie we don't have such a callers for now... yet)?
- Cyrill -
| |