From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Jiang Liu <liuj97@gmail.com>
Cc: linux-arch@vger.kernel.org, Jeremy Fitzhardinge <jeremy@goop.org>,
xen-devel@lists.xensource.com, Jiri Kosina <trivial@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
x86@kernel.org, linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
Wang YanQing <udknight@gmail.com>,
Sebastian Andrzej Siewior <sebastian@breakpoint.cc>,
Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
David Vrabel <david.vrabel@citrix.com>,
Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@zytor.com>,
xen-devel@lists.xenproject.org,
Andrew Morton <akpm@linux-foundation.org>,
virtualization@lists.linux-foundation.org,
Shaohua Li <shli@kernel.org>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>
Subject: Re: [PATCH v3 [resend] 14/18] smp, x86, xen: kill SMP single function call interrupt
Date: Sun, 15 Dec 2013 22:00:41 -0500 [thread overview]
Message-ID: <20131216030040.GB7180@pegasus.dumpdata.com> (raw)
In-Reply-To: <1387125400-28849-15-git-send-email-liuj97@gmail.com>
On Mon, Dec 16, 2013 at 12:36:36AM +0800, Jiang Liu wrote:
> 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.
>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Shaohua Li <shli@kernel.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Cc: Jiri Kosina <trivial@kernel.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
I presume this has been tested?
> Cc: Jeremy Fitzhardinge <jeremy@goop.org>
> Cc: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
> Cc: x86@kernel.org
> Cc: xen-devel@lists.xensource.com
> Cc: virtualization@lists.linux-foundation.org
> Signed-off-by: Jiang Liu <liuj97@gmail.com>
> ---
> arch/x86/include/asm/xen/events.h | 1 -
> arch/x86/xen/smp.c | 38 ++------------------------------------
> 2 files changed, 2 insertions(+), 37 deletions(-)
>
> diff --git a/arch/x86/include/asm/xen/events.h b/arch/x86/include/asm/xen/events.h
> index 608a79d..a9e54dc 100644
> --- a/arch/x86/include/asm/xen/events.h
> +++ b/arch/x86/include/asm/xen/events.h
> @@ -4,7 +4,6 @@
> enum ipi_vector {
> XEN_RESCHEDULE_VECTOR,
> XEN_CALL_FUNCTION_VECTOR,
> - XEN_CALL_FUNCTION_SINGLE_VECTOR,
> XEN_SPIN_UNLOCK_VECTOR,
> XEN_IRQ_WORK_VECTOR,
> XEN_NMI_VECTOR,
> diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
> index c36b325..7cf1689 100644
> --- a/arch/x86/xen/smp.c
> +++ b/arch/x86/xen/smp.c
> @@ -46,12 +46,10 @@ struct xen_common_irq {
> };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_resched_irq) = { .irq = -1 };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_callfunc_irq) = { .irq = -1 };
> -static DEFINE_PER_CPU(struct xen_common_irq, xen_callfuncsingle_irq) = { .irq = -1 };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_irq_work) = { .irq = -1 };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_debug_irq) = { .irq = -1 };
>
> static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id);
> -static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id);
> static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id);
>
> /*
> @@ -123,13 +121,6 @@ static void xen_smp_intr_free(unsigned int cpu)
> kfree(per_cpu(xen_debug_irq, cpu).name);
> per_cpu(xen_debug_irq, cpu).name = NULL;
> }
> - if (per_cpu(xen_callfuncsingle_irq, cpu).irq >= 0) {
> - unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu).irq,
> - NULL);
> - per_cpu(xen_callfuncsingle_irq, cpu).irq = -1;
> - kfree(per_cpu(xen_callfuncsingle_irq, cpu).name);
> - per_cpu(xen_callfuncsingle_irq, cpu).name = NULL;
> - }
> if (xen_hvm_domain())
> return;
>
> @@ -178,18 +169,6 @@ static int xen_smp_intr_init(unsigned int cpu)
> per_cpu(xen_debug_irq, cpu).irq = rc;
> per_cpu(xen_debug_irq, cpu).name = debug_name;
>
> - callfunc_name = kasprintf(GFP_KERNEL, "callfuncsingle%d", cpu);
> - rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_SINGLE_VECTOR,
> - cpu,
> - xen_call_function_single_interrupt,
> - IRQF_PERCPU|IRQF_NOBALANCING,
> - callfunc_name,
> - NULL);
> - if (rc < 0)
> - goto fail;
> - per_cpu(xen_callfuncsingle_irq, cpu).irq = rc;
> - per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name;
> -
> /*
> * The IRQ worker on PVHVM goes through the native path and uses the
> * IPI mechanism.
> @@ -569,8 +548,7 @@ static void xen_smp_send_call_function_ipi(const struct cpumask *mask)
>
> static void xen_smp_send_call_function_single_ipi(int cpu)
> {
> - __xen_send_IPI_mask(cpumask_of(cpu),
> - XEN_CALL_FUNCTION_SINGLE_VECTOR);
> + __xen_send_IPI_mask(cpumask_of(cpu), XEN_CALL_FUNCTION_VECTOR);
> }
>
> static inline int xen_map_vector(int vector)
> @@ -582,10 +560,8 @@ static inline int xen_map_vector(int vector)
> xen_vector = XEN_RESCHEDULE_VECTOR;
> break;
> case CALL_FUNCTION_VECTOR:
> - xen_vector = XEN_CALL_FUNCTION_VECTOR;
> - break;
> case CALL_FUNCTION_SINGLE_VECTOR:
> - xen_vector = XEN_CALL_FUNCTION_SINGLE_VECTOR;
> + xen_vector = XEN_CALL_FUNCTION_VECTOR;
> break;
> case IRQ_WORK_VECTOR:
> xen_vector = XEN_IRQ_WORK_VECTOR;
> @@ -663,16 +639,6 @@ static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id)
> return IRQ_HANDLED;
> }
>
> -static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id)
> -{
> - irq_enter();
> - generic_smp_call_function_single_interrupt();
> - inc_irq_stat(irq_call_count);
> - irq_exit();
> -
> - return IRQ_HANDLED;
> -}
> -
> static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id)
> {
> irq_enter();
> --
> 1.8.1.2
>
WARNING: multiple messages have this Message-ID (diff)
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Jiang Liu <liuj97@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Shaohua Li <shli@kernel.org>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
David Vrabel <david.vrabel@citrix.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
x86@kernel.org, xen-devel@lists.xenproject.org,
linux-kernel@vger.kernel.org, Ingo Molnar <mingo@elte.hu>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Steven Rostedt <rostedt@goodmis.org>,
Jiri Kosina <trivial@kernel.org>,
Wang YanQing <udknight@gmail.com>,
linux-arch@vger.kernel.org, Jeremy Fitzhardinge <jeremy@goop.org>,
Sebastian Andrzej Siewior <sebastian@breakpoint.cc>,
xen-devel@lists.xensource.com,
virtualization@lists.linux-foundation.org
Subject: Re: [PATCH v3 [resend] 14/18] smp, x86, xen: kill SMP single function call interrupt
Date: Sun, 15 Dec 2013 22:00:41 -0500 [thread overview]
Message-ID: <20131216030040.GB7180@pegasus.dumpdata.com> (raw)
Message-ID: <20131216030041.0h7szVCvTvpsI8OWiFrzK8E3Bi72IQglm2nk2D7YXCo@z> (raw)
In-Reply-To: <1387125400-28849-15-git-send-email-liuj97@gmail.com>
On Mon, Dec 16, 2013 at 12:36:36AM +0800, Jiang Liu wrote:
> 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.
>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Shaohua Li <shli@kernel.org>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Ingo Molnar <mingo@elte.hu>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Cc: Jiri Kosina <trivial@kernel.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
I presume this has been tested?
> Cc: Jeremy Fitzhardinge <jeremy@goop.org>
> Cc: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
> Cc: x86@kernel.org
> Cc: xen-devel@lists.xensource.com
> Cc: virtualization@lists.linux-foundation.org
> Signed-off-by: Jiang Liu <liuj97@gmail.com>
> ---
> arch/x86/include/asm/xen/events.h | 1 -
> arch/x86/xen/smp.c | 38 ++------------------------------------
> 2 files changed, 2 insertions(+), 37 deletions(-)
>
> diff --git a/arch/x86/include/asm/xen/events.h b/arch/x86/include/asm/xen/events.h
> index 608a79d..a9e54dc 100644
> --- a/arch/x86/include/asm/xen/events.h
> +++ b/arch/x86/include/asm/xen/events.h
> @@ -4,7 +4,6 @@
> enum ipi_vector {
> XEN_RESCHEDULE_VECTOR,
> XEN_CALL_FUNCTION_VECTOR,
> - XEN_CALL_FUNCTION_SINGLE_VECTOR,
> XEN_SPIN_UNLOCK_VECTOR,
> XEN_IRQ_WORK_VECTOR,
> XEN_NMI_VECTOR,
> diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
> index c36b325..7cf1689 100644
> --- a/arch/x86/xen/smp.c
> +++ b/arch/x86/xen/smp.c
> @@ -46,12 +46,10 @@ struct xen_common_irq {
> };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_resched_irq) = { .irq = -1 };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_callfunc_irq) = { .irq = -1 };
> -static DEFINE_PER_CPU(struct xen_common_irq, xen_callfuncsingle_irq) = { .irq = -1 };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_irq_work) = { .irq = -1 };
> static DEFINE_PER_CPU(struct xen_common_irq, xen_debug_irq) = { .irq = -1 };
>
> static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id);
> -static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id);
> static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id);
>
> /*
> @@ -123,13 +121,6 @@ static void xen_smp_intr_free(unsigned int cpu)
> kfree(per_cpu(xen_debug_irq, cpu).name);
> per_cpu(xen_debug_irq, cpu).name = NULL;
> }
> - if (per_cpu(xen_callfuncsingle_irq, cpu).irq >= 0) {
> - unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu).irq,
> - NULL);
> - per_cpu(xen_callfuncsingle_irq, cpu).irq = -1;
> - kfree(per_cpu(xen_callfuncsingle_irq, cpu).name);
> - per_cpu(xen_callfuncsingle_irq, cpu).name = NULL;
> - }
> if (xen_hvm_domain())
> return;
>
> @@ -178,18 +169,6 @@ static int xen_smp_intr_init(unsigned int cpu)
> per_cpu(xen_debug_irq, cpu).irq = rc;
> per_cpu(xen_debug_irq, cpu).name = debug_name;
>
> - callfunc_name = kasprintf(GFP_KERNEL, "callfuncsingle%d", cpu);
> - rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_SINGLE_VECTOR,
> - cpu,
> - xen_call_function_single_interrupt,
> - IRQF_PERCPU|IRQF_NOBALANCING,
> - callfunc_name,
> - NULL);
> - if (rc < 0)
> - goto fail;
> - per_cpu(xen_callfuncsingle_irq, cpu).irq = rc;
> - per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name;
> -
> /*
> * The IRQ worker on PVHVM goes through the native path and uses the
> * IPI mechanism.
> @@ -569,8 +548,7 @@ static void xen_smp_send_call_function_ipi(const struct cpumask *mask)
>
> static void xen_smp_send_call_function_single_ipi(int cpu)
> {
> - __xen_send_IPI_mask(cpumask_of(cpu),
> - XEN_CALL_FUNCTION_SINGLE_VECTOR);
> + __xen_send_IPI_mask(cpumask_of(cpu), XEN_CALL_FUNCTION_VECTOR);
> }
>
> static inline int xen_map_vector(int vector)
> @@ -582,10 +560,8 @@ static inline int xen_map_vector(int vector)
> xen_vector = XEN_RESCHEDULE_VECTOR;
> break;
> case CALL_FUNCTION_VECTOR:
> - xen_vector = XEN_CALL_FUNCTION_VECTOR;
> - break;
> case CALL_FUNCTION_SINGLE_VECTOR:
> - xen_vector = XEN_CALL_FUNCTION_SINGLE_VECTOR;
> + xen_vector = XEN_CALL_FUNCTION_VECTOR;
> break;
> case IRQ_WORK_VECTOR:
> xen_vector = XEN_IRQ_WORK_VECTOR;
> @@ -663,16 +639,6 @@ static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id)
> return IRQ_HANDLED;
> }
>
> -static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id)
> -{
> - irq_enter();
> - generic_smp_call_function_single_interrupt();
> - inc_irq_stat(irq_call_count);
> - irq_exit();
> -
> - return IRQ_HANDLED;
> -}
> -
> static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id)
> {
> irq_enter();
> --
> 1.8.1.2
>
next prev parent reply other threads:[~2013-12-16 3:00 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-15 16:36 [PATCH v3 [resend] 00/18] simplify generic cross CPU function call implementation Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 01/18] Revert "kernel/smp.c: free related resources when failure occurs in hotplug_cfd()" Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 02/18] Revert "smp: Fix SMP function call empty cpu mask race" Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 03/18] smp, alpha: kill SMP single function call interrupt Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 04/18] smp, ARM: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 05/18] smp, ARM64: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-17 17:16 ` Will Deacon
2013-12-17 17:16 ` Will Deacon
2013-12-15 16:36 ` [PATCH v3 [resend] 06/18] smp, blackfin: " Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 07/18] smp, IA64: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 08/18] smp, m32r: " Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 09/18] smp, mn10300: " Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 10/18] smp, mn10300: enable arch_send_call_function_ipi_mask() Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 11/18] smp, sh: kill SMP single function call interrupt Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 12/18] smp, sparc64: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 13/18] smp, sparc: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 14/18] smp, x86, xen: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-16 3:00 ` Konrad Rzeszutek Wilk [this message]
2013-12-16 3:00 ` Konrad Rzeszutek Wilk
2013-12-16 4:24 ` Liu, Jinsong
2013-12-16 4:24 ` Liu, Jinsong
2013-12-16 16:33 ` Konrad Rzeszutek Wilk
2013-12-16 16:33 ` Konrad Rzeszutek Wilk
2013-12-16 4:24 ` Liu, Jinsong
2013-12-15 16:36 ` [PATCH v3 [resend] 15/18] smp, x86: " Jiang Liu
2013-12-15 16:36 ` Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 16/18] smp: cleanup unsued generic_smp_call_function_single_interrupt() Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 17/18] smp: rename call_single_queue as call_function_queue Jiang Liu
2013-12-15 16:36 ` [PATCH v3 [resend] 18/18] SMP, trivial: remove unused code from smp_boot.h Jiang Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131216030040.GB7180@pegasus.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=boris.ostrovsky@oracle.com \
--cc=david.vrabel@citrix.com \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liuj97@gmail.com \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=rostedt@goodmis.org \
--cc=sebastian@breakpoint.cc \
--cc=shli@kernel.org \
--cc=tglx@linutronix.de \
--cc=trivial@kernel.org \
--cc=udknight@gmail.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.