diff options
author | Toshihiro HANAWA <hanawa@ccs.tsukuba.ac.jp> | 2009-10-02 04:52:54 -0400 |
---|---|---|
committer | Hirokazu Takata <takata@linux-m32r.org> | 2009-10-03 23:02:37 -0400 |
commit | 0a3d31b79e7fa600108e699805e2b2f9ea1f3194 (patch) | |
tree | 3c2f761d0a8f4cfbbff08ee3753f44f4ac7349ab | |
parent | 6b6fabce5ac47668a2c2d9a14f1cdcc23c4ed896 (diff) |
m32r: Fix IPI function calls for SMP
This patch fixes the m32r SMP kernel after 2.6.27.
A part of the following patch breaks m32r SMP operation.
> m32r: convert to generic helpers for IPI function calls
> commit 7b7426c8a615cf61df9a77b9df7d5b75d91e3fa0
In the above patch, a CALL_FUNC_SINGLE_IPI was newly introduced,
but the its IPI vector number was wrong in the patch code.
The m32r SMP kernel hanged-up during boot operation, because
the CPU_BOOT_IPI was called instead of CALL_FUNC_SINGLE_IPI
(CPU_BOOT_IPI had no side effect at that time because the 2nd
core had already been started up),
as a result, csd_unlock() was not called, then a dead lock
occurred in csd_lock_wait() after the detection of Compact Flash
memory as IDE generic disk.
Signed-off-by: Toshihiro HANAWA <hanawa@ccs.tsukuba.ac.jp>
Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
-rw-r--r-- | arch/m32r/kernel/traps.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/m32r/kernel/traps.c b/arch/m32r/kernel/traps.c index 03b14e55cd89..fbd109031df3 100644 --- a/arch/m32r/kernel/traps.c +++ b/arch/m32r/kernel/traps.c | |||
@@ -104,8 +104,8 @@ static void set_eit_vector_entries(void) | |||
104 | eit_vector[186] = (unsigned long)smp_call_function_interrupt; | 104 | eit_vector[186] = (unsigned long)smp_call_function_interrupt; |
105 | eit_vector[187] = (unsigned long)smp_ipi_timer_interrupt; | 105 | eit_vector[187] = (unsigned long)smp_ipi_timer_interrupt; |
106 | eit_vector[188] = (unsigned long)smp_flush_cache_all_interrupt; | 106 | eit_vector[188] = (unsigned long)smp_flush_cache_all_interrupt; |
107 | eit_vector[189] = (unsigned long)smp_call_function_single_interrupt; | 107 | eit_vector[189] = 0; /* CPU_BOOT_IPI */ |
108 | eit_vector[190] = 0; | 108 | eit_vector[190] = (unsigned long)smp_call_function_single_interrupt; |
109 | eit_vector[191] = 0; | 109 | eit_vector[191] = 0; |
110 | #endif | 110 | #endif |
111 | _flush_cache_copyback_all(); | 111 | _flush_cache_copyback_all(); |