From: Oleg Nesterov <oleg@redhat.com>
To: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Gautham R Shenoy <ego@in.ibm.com>,
Rusty Russell <rusty@rustcorp.com.au>,
linux-kernel@vger.kernel.org, travis@sgi.com,
Ingo Molnar <mingo@elte.hu>
Subject: Re: do_boot_cpu can deadlock?
Date: Fri, 24 Oct 2008 11:33:42 +0200 [thread overview]
Message-ID: <20081024093342.GA4583@redhat.com> (raw)
In-Reply-To: <20081023184906.GA2612@localhost>
On 10/23, Cyrill Gorcunov wrote:
>
> [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)?
There are no problems during boot time, afaics.
kernel_init() calls smp_init() before do_basic_setup()->init_workqueues().
This means that do_boot_cpu() won't use workqueues due to !keventd_up().
But let's suppose we boot with maxcpus=1, and then bring up another CPU.
Or we really add the new physical CPU (I don't really know if this is
possible on x86).
Oleg.
next prev parent reply other threads:[~2008-10-24 9:33 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-23 16:55 [PATCH 1/7] work_on_cpu: helper for doing task on a CPU Rusty Russell
2008-10-23 7:22 ` Gautham R Shenoy
2008-10-23 9:40 ` Oleg Nesterov
2008-10-23 14:36 ` Gautham R Shenoy
2008-10-23 16:35 ` Oleg Nesterov
2008-10-23 17:02 ` do_boot_cpu can deadlock? Oleg Nesterov
2008-10-23 18:21 ` Gautham R Shenoy
2008-10-23 18:49 ` Cyrill Gorcunov
2008-10-24 9:33 ` Oleg Nesterov [this message]
2008-10-24 9:53 ` Gautham R Shenoy
2008-10-24 10:51 ` Oleg Nesterov
2008-10-24 3:04 ` [PATCH 1/7] work_on_cpu: helper for doing task on a CPU Rusty Russell
2008-10-24 7:21 ` Gautham R Shenoy
2008-10-24 10:29 ` Oleg Nesterov
2008-10-24 11:18 ` Rusty Russell
2008-10-24 11:40 ` Gautham R Shenoy
2008-10-24 13:25 ` Oleg Nesterov
2008-10-24 13:41 ` Gautham R Shenoy
2008-10-24 14:23 ` Oleg Nesterov
2008-10-23 15:10 ` Rusty Russell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081024093342.GA4583@redhat.com \
--to=oleg@redhat.com \
--cc=ego@in.ibm.com \
--cc=gorcunov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rusty@rustcorp.com.au \
--cc=travis@sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox