From: Jiang Liu <liuj97@gmail.com> To: Andrew Morton <akpm@linux-foundation.org>, Thomas Gleixner <tglx@linutronix.de>, "H. Peter Anvin" <hpa@zytor.com>, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Jeremy Fitzhardinge <jeremy@goop.org>, Shaohua Li <shli@kernel.org> Cc: linux-arch@vger.kernel.org, xen-devel@lists.xensource.com, Jiri Kosina <trivial@kernel.org>, Peter Zijlstra <a.p.zijlstra@chello.nl>, linux-kernel@vger.kernel.org, x86@kernel.org, Wang YanQing <udknight@gmail.com>, Steven Rostedt <rostedt@goodmis.org>, virtualization@lists.linux-foundation.org, Ingo Molnar <mingo@elte.hu>, liuj97@gmail.com, Jiang Liu <jiang.liu@huawei.com> Subject: [RFC PATCH v2 21/25] smp, tile: kill SMP single function call interrupt Date: Thu, 12 Sep 2013 00:07:25 +0800 [thread overview] Message-ID: <1378915649-16395-22-git-send-email-liuj97@gmail.com> (raw) In-Reply-To: <1378915649-16395-1-git-send-email-liuj97@gmail.com> From: Jiang Liu <jiang.liu@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@huawei.com> Cc: 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 ca842f2..b1ba559 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, diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index ca92754..6a75302 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_DISABLED|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. @@ -551,8 +530,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) @@ -564,10 +542,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; @@ -639,16 +615,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: Jiang Liu <liuj97@gmail.com> To: Andrew Morton <akpm@linux-foundation.org>, Thomas Gleixner <tglx@linutronix.de>, "H. Peter Anvin" <hpa@zytor.com>, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>, Jeremy Fitzhardinge <jeremy@goop.org>, Shaohua Li <shli@kernel.org> Cc: liuj97@gmail.com, Jiang Liu <jiang.liu@huawei.com>, 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>, x86@kernel.org, xen-devel@lists.xensource.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org Subject: [RFC PATCH v2 21/25] smp, tile: kill SMP single function call interrupt Date: Thu, 12 Sep 2013 00:07:25 +0800 [thread overview] Message-ID: <1378915649-16395-22-git-send-email-liuj97@gmail.com> (raw) Message-ID: <20130911160725.0ULyw1Bdt9e5NCJyQZEU5HgSqHod3wqGdtGkThET2Sc@z> (raw) In-Reply-To: <1378915649-16395-1-git-send-email-liuj97@gmail.com> From: Jiang Liu <jiang.liu@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@huawei.com> Cc: 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 ca842f2..b1ba559 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, diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index ca92754..6a75302 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_DISABLED|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. @@ -551,8 +530,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) @@ -564,10 +542,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; @@ -639,16 +615,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-09-11 16:07 UTC|newest] Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-09-11 16:07 [RFC PATCH v2 00/25] simplify generic cross CPU function call implementation Jiang Liu 2013-09-11 16:07 ` [PATCH v2 01/25] Revert smp: Fix SMP function call empty cpu mask race Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-14 4:41 ` Wang YanQing 2013-09-14 4:41 ` Wang YanQing 2013-09-14 4:43 ` Wang YanQing 2013-09-16 2:22 ` Chen Gang 2013-09-11 16:07 ` [RFC PATCH v2 02/25] smp, alpha: kill SMP single function call interrupt Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-10-22 10:07 ` Vineet Gupta 2013-10-22 10:18 ` Vineet Gupta 2013-10-22 10:18 ` Vineet Gupta 2013-09-11 16:07 ` [RFC PATCH v2 03/25] smp, ARC: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-25 11:31 ` Vineet Gupta 2013-09-11 16:07 ` [RFC PATCH v2 04/25] smp, ARM: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-12 9:14 ` Will Deacon 2013-09-11 16:07 ` [RFC PATCH v2 05/25] smp, ARM64: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-12 9:14 ` Will Deacon 2013-09-11 16:07 ` [RFC PATCH v2 06/25] smp, blackfin: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 07/25] smp, hexagon: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 08/25] smp, IA64: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 09/25] smp, m32r: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 10/25] smp, metag: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-12 11:14 ` James Hogan 2013-09-11 16:07 ` [RFC PATCH v2 11/25] smp, mips: kill redundant call of generic_smp_call_function_single_interrupt() Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 12/25] smp, mn10300: kill SMP single function call interrupt Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 13/25] smp, mn10300: enable arch_send_call_function_ipi_mask() Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 14/25] smp, parisc: kill SMP single function call interrupt Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 15/25] smp, ppc: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 20:03 ` Srivatsa S. Bhat 2013-09-11 20:03 ` Srivatsa S. Bhat 2013-09-12 14:04 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 16/25] smp, s390: prepare for killing generic_smp_call_function_single_interrupt() Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 17/25] smp, sh: kill SMP single function call interrupt Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-12 8:35 ` Paul Mundt 2013-09-11 16:07 ` [RFC PATCH v2 18/25] smp, sparc64: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 19/25] smp, sparc: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 20/25] smp, tile: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:51 ` Chris Metcalf 2013-09-11 16:07 ` Jiang Liu [this message] 2013-09-11 16:07 ` [RFC PATCH v2 21/25] " Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 22/25] smp, x86: " Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 23/25] smp: cleanup unsued generic_smp_call_function_single_interrupt() Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 24/25] smp: rename call_single_queue as call_function_queue Jiang Liu 2013-09-11 16:07 ` Jiang Liu 2013-09-11 16:07 ` [RFC PATCH v2 25/25] SMP, trivial: remove unused code from smp_boot.h Jiang Liu 2013-09-11 16:07 ` 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=1378915649-16395-22-git-send-email-liuj97@gmail.com \ --to=liuj97@gmail.com \ --cc=a.p.zijlstra@chello.nl \ --cc=akpm@linux-foundation.org \ --cc=hpa@zytor.com \ --cc=jeremy@goop.org \ --cc=jiang.liu@huawei.com \ --cc=konrad.wilk@oracle.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@elte.hu \ --cc=rostedt@goodmis.org \ --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.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).