* [PATCH] preempt-rt: convert blackfin boot_lock to raw
@ 2011-09-19 21:51 Frank Rowand
0 siblings, 0 replies; only message in thread
From: Frank Rowand @ 2011-09-19 21:51 UTC (permalink / raw)
To: tglx, linux-rt-users, linux-kernel
The blackfin boot_lock is used by the secondary processor startup code.
The locking task is the idle thread, which has
idle->sched_class == &idle_sched_class.
idle_sched_class->enqueue_task == NULL, so if the idle task blocks on the
lock, the attempt to wake it when the lock becomes available will fail:
try_to_wake_up()
...
activate_task()
enqueue_task()
p->sched_class->enqueue_task(rq, p, flags)
Fix by converting boot_lock to a raw spin lock.
This has not been compile or boot tested. The fix was needed by arm, this
patch is for all other instances of "boot_lock" in other architectures.
Signed-off-by: Frank Rowand <frank.rowand@am.sony.com>
---
arch/blackfin/mach-bf561/smp.c | 10 5 + 5 - 0 !
1 file changed, 5 insertions(+), 5 deletions(-)
Index: b/arch/blackfin/mach-bf561/smp.c
===================================================================
--- a/arch/blackfin/mach-bf561/smp.c
+++ b/arch/blackfin/mach-bf561/smp.c
@@ -13,7 +13,7 @@
#include <asm/dma.h>
#include <asm/time.h>
-static DEFINE_SPINLOCK(boot_lock);
+static DEFINE_RAW_SPINLOCK(boot_lock);
/*
* platform_init_cpus() - Tell the world about how many cores we
@@ -70,8 +70,8 @@ void __cpuinit platform_secondary_init(u
/* We are done with local CPU inits, unblock the boot CPU. */
set_cpu_online(cpu, true);
- spin_lock(&boot_lock);
- spin_unlock(&boot_lock);
+ raw_spin_lock(&boot_lock);
+ raw_spin_unlock(&boot_lock);
}
int __cpuinit platform_boot_secondary(unsigned int cpu, struct task_struct *idle)
@@ -80,7 +80,7 @@ int __cpuinit platform_boot_secondary(un
printk(KERN_INFO "Booting Core B.\n");
- spin_lock(&boot_lock);
+ raw_spin_lock(&boot_lock);
if ((bfin_read_SYSCR() & COREB_SRAM_INIT) == 0) {
/* CoreB already running, sending ipi to wakeup it */
@@ -101,7 +101,7 @@ int __cpuinit platform_boot_secondary(un
if (cpu_online(cpu)) {
/* release the lock and let coreb run */
- spin_unlock(&boot_lock);
+ raw_spin_unlock(&boot_lock);
return 0;
} else
panic("CPU%u: processor failed to boot\n", cpu);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-09-19 21:51 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-19 21:51 [PATCH] preempt-rt: convert blackfin boot_lock to raw Frank Rowand
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.