[RFC PATCH v2 15/25] smp, ppc: kill SMP single function call interrupt

Srivatsa S. Bhat srivatsa.bhat at linux.vnet.ibm.com
Thu Sep 12 06:03:16 EST 2013


On 09/11/2013 09:37 PM, Jiang Liu wrote:
> From: Jiang Liu <jiang.liu at huawei.com>
> 
> Commit 9a46ad6d6df3b54 "smp: make smp_call_function_many() use logic
> similar to smp_call_function_single()" has unified the way to handle
> single and multiple cross-CPU function calls. Now only one interrupt
> is needed for architecture specific code to support generic SMP function
> call interfaces, so kill the redundant single function call interrupt.
> 
> Signed-off-by: Jiang Liu <jiang.liu at huawei.com>
> Cc: Jiang Liu <liuj97 at gmail.com>
> ---

It turns out that freeing up the IPI slot in powerpc is very useful, since
we actually wanted a slot for some other use-case (and there are only 4 slots
available on powerpc).

Here are the patches which achieve that:
http://marc.info/?l=linuxppc-embedded&m=137886807502898&w=2
http://marc.info/?l=linuxppc-embedded&m=137886811502909&w=2

So, can you kindly consider dropping the powerpc patch from your series,
if that is OK with you? Thanks!

BTW, after doing the powerpc cleanup, even I had thought about killing one
of the smp-function variants in various architectures, but never got around
to do it. But now that you have posted the series which does that, I'll try
to review them.

Thank you!

Regards,
Srivatsa S. Bhat

>  arch/powerpc/include/asm/smp.h |  3 +--
>  arch/powerpc/kernel/smp.c      | 12 +-----------
>  2 files changed, 2 insertions(+), 13 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
> index 48cfc85..53faa03 100644
> --- a/arch/powerpc/include/asm/smp.h
> +++ b/arch/powerpc/include/asm/smp.h
> @@ -119,8 +119,7 @@ extern int cpu_to_core_id(int cpu);
>   * in /proc/interrupts will be wrong!!! --Troy */
>  #define PPC_MSG_CALL_FUNCTION   0
>  #define PPC_MSG_RESCHEDULE      1
> -#define PPC_MSG_CALL_FUNC_SINGLE	2
> -#define PPC_MSG_DEBUGGER_BREAK  3
> +#define PPC_MSG_DEBUGGER_BREAK  2
> 
>  /* for irq controllers that have dedicated ipis per message (4) */
>  extern int smp_request_message_ipi(int virq, int message);
> diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
> index 38b0ba6..0c53b10 100644
> --- a/arch/powerpc/kernel/smp.c
> +++ b/arch/powerpc/kernel/smp.c
> @@ -123,12 +123,6 @@ static irqreturn_t reschedule_action(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
> 
> -static irqreturn_t call_function_single_action(int irq, void *data)
> -{
> -	generic_smp_call_function_single_interrupt();
> -	return IRQ_HANDLED;
> -}
> -
>  static irqreturn_t debug_ipi_action(int irq, void *data)
>  {
>  	if (crash_ipi_function_ptr) {
> @@ -146,14 +140,12 @@ static irqreturn_t debug_ipi_action(int irq, void *data)
>  static irq_handler_t smp_ipi_action[] = {
>  	[PPC_MSG_CALL_FUNCTION] =  call_function_action,
>  	[PPC_MSG_RESCHEDULE] = reschedule_action,
> -	[PPC_MSG_CALL_FUNC_SINGLE] = call_function_single_action,
>  	[PPC_MSG_DEBUGGER_BREAK] = debug_ipi_action,
>  };
> 
>  const char *smp_ipi_name[] = {
>  	[PPC_MSG_CALL_FUNCTION] =  "ipi call function",
>  	[PPC_MSG_RESCHEDULE] = "ipi reschedule",
> -	[PPC_MSG_CALL_FUNC_SINGLE] = "ipi call function single",
>  	[PPC_MSG_DEBUGGER_BREAK] = "ipi debugger",
>  };
> 
> @@ -225,8 +217,6 @@ irqreturn_t smp_ipi_demux(void)
>  			generic_smp_call_function_interrupt();
>  		if (all & (1 << (24 - 8 * PPC_MSG_RESCHEDULE)))
>  			scheduler_ipi();
> -		if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNC_SINGLE)))
> -			generic_smp_call_function_single_interrupt();
>  		if (all & (1 << (24 - 8 * PPC_MSG_DEBUGGER_BREAK)))
>  			debug_ipi_action(0, NULL);
>  #else
> @@ -257,7 +247,7 @@ EXPORT_SYMBOL_GPL(smp_send_reschedule);
> 
>  void arch_send_call_function_single_ipi(int cpu)
>  {
> -	do_message_pass(cpu, PPC_MSG_CALL_FUNC_SINGLE);
> +	do_message_pass(cpu, PPC_MSG_CALL_FUNCTION);
>  }
> 
>  void arch_send_call_function_ipi_mask(const struct cpumask *mask)
> 



More information about the Linuxppc-dev mailing list