Anton Blanchard
e9028b0ff2
[PATCH] fix scheduler deadlock
...
We have noticed lockups during boot when stress testing kexec on ppc64.
Two cpus would deadlock in scheduler code trying to grab already taken
spinlocks.
The double_rq_lock code uses the address of the runqueue to order the
taking of multiple locks. This address is a per cpu variable:
if (rq1 < rq2) {
spin_lock(&rq1->lock);
spin_lock(&rq2->lock);
} else {
spin_lock(&rq2->lock);
spin_lock(&rq1->lock);
}
On the other hand, the code in wake_sleeping_dependent uses the cpu id
order to grab locks:
for_each_cpu_mask(i, sibling_map)
spin_lock(&cpu_rq(i)->lock);
This means we rely on the address of per cpu data increasing as cpu ids
increase. While this will be true for the generic percpu implementation it
may not be true for arch specific implementations.
One way to solve this is to always take runqueues in cpu id order. To do
this we add a cpu variable to the runqueue and check it in the
double runqueue locking functions.
Signed-off-by: Anton Blanchard <anton@samba.org>
Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-23 07:38:02 -08:00
..
irq
[PATCH] kernel/: small cleanups
2006-01-08 20:13:48 -08:00
power
[PATCH] swsusp: fix breakage with swap on LVM
2006-02-17 13:59:27 -08:00
.gitignore
gitignore: ignore more generated files
2006-01-03 11:35:26 +01:00
acct.c
[PATCH] move capable() to capability.h
2006-01-11 18:42:13 -08:00
audit.c
[PATCH] EDAC: atomic scrub operations
2006-01-18 19:20:30 -08:00
auditsc.c
Merge ../powerpc-merge
2006-02-24 14:05:47 +11:00
capability.c
[PATCH] move capable() to capability.h
2006-01-11 18:42:13 -08:00
compat.c
[PATCH] remove bogus asm/bug.h includes.
2006-02-07 20:56:35 -05:00
configs.c
update the email address of Randy Dunlap
2006-01-03 13:37:51 +01:00
cpu.c
[PATCH] clean up lock_cpu_hotplug() in cpufreq
2005-11-28 14:42:23 -08:00
cpuset.c
[PATCH] cpuset: oops in exit on null cpuset fix
2006-02-15 15:32:21 -08:00
dma.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
exec_domain.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
exit.c
[PATCH] don't do exit_io_context() until we know we won't be doing any IO
2006-03-18 18:33:46 -05:00
extable.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
fork.c
[PATCH] unshare: Error if passed unsupported flags
2006-03-22 07:53:55 -08:00
futex.c
[PATCH] FRV: Make futex code compilable on nommu [try #2 ]
2006-01-06 08:33:33 -08:00
hrtimer.c
[PATCH] fix next_timer_interrupt() for hrtimer
2006-03-06 18:40:44 -08:00
intermodule.c
[PATCH] missing license tag in intermodule
2006-02-05 11:06:52 -08:00
itimer.c
[PATCH] hrtimers: fix oldvalue return in setitimer
2006-02-01 08:53:12 -08:00
kallsyms.c
[PATCH] fix missing includes
2005-10-30 17:37:32 -08:00
Kconfig.hz
[PATCH] i386: Selectable Frequency of the Timer Interrupt
2005-06-23 09:45:10 -07:00
Kconfig.preempt
[PATCH] sched: voluntary kernel preemption
2005-06-25 16:24:45 -07:00
kexec.c
[PATCH] move capable() to capability.h
2006-01-11 18:42:13 -08:00
kfifo.c
[PATCH] gfp flags annotations - part 1
2005-10-08 15:00:57 -07:00
kmod.c
[PATCH] Keys: Get rid of warning in kmod.c if keys disabled
2005-10-30 17:37:23 -08:00
kprobes.c
[PATCH] Kprobes: Fix deadlock in function-return probes
2006-02-03 08:32:00 -08:00
ksysfs.c
[PATCH] kobject: fix build error if CONFIG_SYSFS=n
2006-03-20 13:42:57 -08:00
kthread.c
[PATCH] Add kthread_stop_sem()
2005-10-30 17:37:17 -08:00
Makefile
[PATCH] build kernel/intermodule.c only when required
2006-01-16 23:15:26 -08:00
module.c
[PATCH] fix module sysfs files reference counting
2006-03-20 13:42:58 -08:00
mutex-debug.c
[PATCH] fix/simplify mutex debugging code
2006-01-11 08:14:16 -08:00
mutex-debug.h
[PATCH] mutex subsystem, debugging code
2006-01-09 15:59:20 -08:00
mutex.c
[PATCH] mutex: trivial whitespace cleanups
2006-01-10 14:27:59 -08:00
mutex.h
[PATCH] mutex subsystem, core
2006-01-09 15:59:19 -08:00
panic.c
[PATCH] prevent recursive panic from softlockup watchdog
2006-02-10 08:13:12 -08:00
params.c
[PATCH] fix module sysfs files reference counting
2006-03-20 13:42:58 -08:00
pid.c
[PATCH] RCU signal handling
2006-01-08 20:13:40 -08:00
posix-cpu-timers.c
[PATCH] hrtimer: switch clock_nanosleep to hrtimer nanosleep API
2006-01-10 08:01:38 -08:00
posix-timers.c
[PATCH] posix-timers: fix requeue accounting when signal is ignored
2006-03-17 07:51:25 -08:00
printk.c
correct email address of Manfred Spraul
2006-01-15 02:43:54 +01:00
profile.c
[PATCH] mostly_read data section
2005-07-07 18:23:46 -07:00
ptrace.c
[PATCH] fix zap_thread's ptrace related problems
2006-02-15 11:05:43 -08:00
rcupdate.c
[PATCH] add EXPORT_SYMBOL_GPL_FUTURE() to RCU subsystem
2006-03-20 13:42:58 -08:00
rcutorture.c
[PATCH] rcu_torture_lock deadlock fix
2006-01-31 11:30:18 -08:00
resource.c
[PATCH] kernel/resource.c: __check_region(): remove pointless __deprecated
2006-01-10 08:02:02 -08:00
sched.c
[PATCH] fix scheduler deadlock
2006-03-23 07:38:02 -08:00
seccomp.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
signal.c
[PATCH] do_sigaction: cleanup ->sa_mask manipulation
2006-02-09 16:17:36 -08:00
softirq.c
[PATCH] on_each_cpu(): disable local interrupts
2006-03-22 07:53:59 -08:00
softlockup.c
[PATCH] quieten softlockup at boot
2005-11-09 07:55:50 -08:00
spinlock.c
[PATCH] spinlock consolidation
2005-09-10 10:06:21 -07:00
stop_machine.c
[PATCH] Remove set_fs() in stop_machine()
2006-01-10 08:01:25 -08:00
sys.c
[PATCH] kernel/sys.c NULL noise removal
2006-02-07 20:57:47 -05:00
sys_ni.c
[PATCH] Fix compile for CONFIG_SYSVIPC=n or CONFIG_SYSCTL=n
2006-02-20 20:00:11 -08:00
sysctl.c
[PATCH] fix file counting
2006-03-08 14:14:01 -08:00
time.c
[PATCH] Normalize timespec for negative values in ns_to_timespec
2006-02-03 08:32:06 -08:00
timer.c
[PATCH] time_interpolator: add __read_mostly
2006-03-17 07:51:25 -08:00
uid16.c
[PATCH] move capable() to capability.h
2006-01-11 18:42:13 -08:00
user.c
[PATCH] "Fix uidhash_lock <-> RXU deadlock" fix
2006-01-31 16:49:43 -08:00
wait.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
workqueue.c
[SCSI] add execute_in_process_context() API
2006-02-27 23:34:40 -06:00