Peter Zijlstra wrote:
On Thu, 2011-05-19 at 15:37 +0200, Daniel Hellstrom wrote:
diff --git a/arch/sparc/kernel/smp_32.c b/arch/sparc/kernel/smp_32.c
index 41102c5..d5b3958 100644
--- a/arch/sparc/kernel/smp_32.c
+++ b/arch/sparc/kernel/smp_32.c
@@ -156,11 +156,11 @@ void arch_send_call_function_ipi_mask(const struct
cpumask *mask)
void smp_resched_interrupt(void)
{
+ irq_enter();
+ scheduler_ipi();
local_cpu_data().irq_resched_count++;
- /*
- * do nothing, since it all was about calling re-schedule
- * routine called by interrupt return code.
- */
+ irq_exit();
+ /* re-schedule routine called by interrupt return code. */
}
That doesn't look like an IPI, that looks like its calls the function on
the local cpu, which is completely pointless.
The above function is one of the IPI interrupt handlers.
The smp_send_reschedule() is called by the generic code, it is
responsible for sending an IRQ to the target CPU, that CPU comes into
smp_resched_interrupt above from the IRQ trap handler. So yes, the
scheduler_ipi() is called on the local CPU, but on the CPU taking the
IPI not the CPU sending the IPI.
Daniel
--
To unsubscribe from this list: send the line "unsubscribe linux-next" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html