Subject: Re: linux-next: manual merge of the tip tree with the sparc tree

From: Daniel Hellstrom <[email-masked]>
Date: Fri, 20 May 2011 08:07:44 +0200

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