• C
    Fix cpu hotplug problem in softirq code · e5e41723
    Christian Borntraeger 提交于
    currently cpu hotplug (unplug) seems broken on s390 and likely others. On cpu
    unplug the system starts to behave very strange and hangs.
    
    I bisected the problem to the following commit:
    
    commit 48f20a9a
    Author: Olof Johansson <olof@lixom.net>
    Date: Tue Mar 4 15:23:25 2008 -0800
    	tasklets: execute tasklets in the same order they were queued
    
    Reverting this patch seems to fix the problem.  I looked into takeover_tasklet
    and it seems that there is a way to corrupt the tail pointer of the current
    cpu.  If the tasklet list of the frozen cpu is empty, the tail pointer of the
    current cpu points to the address of the head pointer of the stopped cpu and
    not to the next pointer of a tasklet_struct.
    
    This patch avoids the list splice of the list is empty and cpu hotplug seems
    to work as the tail pointer is not corrupted.  Olof, can you look into that
    patch and ACK/NACK it so Andrew can push this to Linus, if appropriate?
    Please note that some lines are longer than 80 chars, but line-wrapping looked
    worse that this version.
    Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
    Acked-by: NOlof Johansson <olof@lixom.net>
    Acked-by: NIngo Molnar <mingo@elte.hu>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    e5e41723
softirq.c 15.5 KB