Messages in this thread | | | Date | Tue, 15 Nov 2011 23:00:59 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: Re: [patch] ARM: smpboot: Enable interrupts after marking CPU online/active |
| |
On Tue, 15 Nov 2011, Stepan Moskovchenko wrote: > I am seeing a deadlock when executing hotplug operations with this patch > applied. When the secondary CPU gets brought up in _cpu_up, the cpu is turned > on > and then the online notifier gets called, which is what marks the secondary > CPU > as active. If _cpu_up on the primary CPU is preempted before the secondary CPU > is marked active, it is possible that the primary CPU will want to call > smp_call_function (or send an IPI) to the secondary CPU because it is marked > online. However, with this patch, the secondary CPU is still spinning on > !cpu_active(cpu) > with interrupts disabled. So, the primary CPU is now stuck in csd_lock_wait(), > waiting for the secondary CPU to respond, while the secondary CPU spins with > interrupts disabled, waiting for the primary CPU to mark it as active. So, > while > your approach to not call smp_function_single may work for you in your > specific > case, I believe there is still a problem in the general case. > > One suggestion for resolving this might be making smp_call_function look at > the > active CPUs rather than online CPUs, or to just let the secondary CPU mark > itself as active rather than having the primary CPU do this, though this might > defeat the original intended purpose of the active mask.
What a mess. I'll have a look tomorrow.
| |