On Tue, 2008-06-10 at 15:51 +0100, Catalin Marinas wrote:I don't see how your proposal fixes the deadlocks. The problem is that on a lot of arch's IPIs are normal interrupts. If interrupts are disabled, you don't see them. The deadlock scenario is CPU1 enters smp_call_function() with IRQ's disabled as CPU2 does the same thing and spins on the call_lock. Now CPU1 is waiting for an ack for its IPI to CPU2, but CPU2 will never see the IPI until it enables interrupts. One way to mitigate the effects of this is to enable interrupts if the architecture code finds the call_lock (x86 implementation) held against it, then re-disable before trying to get the lock again. But really, in order to make smp_call_function work in interrupt disabled sections, the interrupt handler has to be modified to bar all non-IPI interrupts until the critical section is over (otherwise there's no point allowing it with disabled interrupts because an smp_call_function becomes a de facto interrupt enable again). If you really want to see how something like this works, the voyager code has it (because interrupt disabling in the VIC is expensive). But it's quite a lot of code ... James --
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Linus Torvalds | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| David Newall | Re: Slow DOWN, please!!! |
| Ian Campbell | Re: [PATCH] x86: Construct 32 bit boot time page tables in native format. |
| Matthias Scheler | Re: HEADS UP: timecounters (branch simonb-timecounters) merged into -current |
| Greg Troxel | Re: Interface to change NFS exports |
| Thor Lancelot Simon | metadata cache and memory fragmentation |
| YAMAMOTO Takashi | amap memory allocation |
git: | |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
| David Miller | [GIT]: Networking |
| Dushan Tcholich | Re: ksoftirqd high cpu load on kernels 2.6.24 to 2.6.27-rc1-mm1 |
