From patchwork Thu Mar 2 17:53:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vitaly Kuznetsov X-Patchwork-Id: 9601267 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id F022060453 for ; Thu, 2 Mar 2017 17:56:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E625F285CB for ; Thu, 2 Mar 2017 17:56:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DAFAA285CD; Thu, 2 Mar 2017 17:56:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 599AA285CB for ; Thu, 2 Mar 2017 17:56:25 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cjUvm-0003bv-BF; Thu, 02 Mar 2017 17:54:22 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cjUvk-0003Zq-NH for xen-devel@lists.xenproject.org; Thu, 02 Mar 2017 17:54:20 +0000 Received: from [193.109.254.147] by server-2.bemta-6.messagelabs.com id 96/81-19731-C4C58B85; Thu, 02 Mar 2017 17:54:20 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrCLMWRWlGSWpSXmKPExsVysWW7jK53zI4 Ig55OTYvvWyYzOTB6HP5whSWAMYo1My8pvyKBNWPVq9NMBXuNKq78amZsYHyt3cXIxSEksIdJ YsmDSWwQzmFGiQVNq5i6GDk52AR0JL4/PcUMYosIKEncWzWZCaSIWWATo8SD1tPsIAlhATOJl k8NYA0sAqoSB3q/gDXwClhIbHt8GMzmBLJvTrrMCGILCZhLTLoygxXElhDQljjb8IsdZKiEQB +jxMITBxgnMPIsYGRYxahenFpUllqka6iXVJSZnlGSm5iZo2toYKaXm1pcnJiempOYVKyXnJ+ 7iRHoewYg2MG487nTIUZJDiYlUd7jpjsihPiS8lMqMxKLM+KLSnNSiw8xynBwKEnwMgYB5QSL UtNTK9Iyc4BBCJOW4OBREuE9GAiU5i0uSMwtzkyHSJ1iVJQS510NkhAASWSU5sG1wQL/EqOsl DAvI9AhQjwFqUW5mSWo8q8YxTkYlYR5r4JM4cnMK4Gb/gpoMRPQ4hcqW0EWlyQipKQaGBVfbo 27IGu8zjIz5vIri0Xepz9uTr272DX+47Y5We+Paaz8WjzdcL3fijqt4y5vU6Y8kJP8wxI099q Zze7MyvpVdhNDr60QeTBRysZh4VO1cK+9LWLTXrjYbfuWvmlamvTc//UyF/9OrF2ltizfIUKm 8upTpiVaAo1X114rrWvoe6x6Iv/tMjMlluKMREMt5qLiRAD00T9/dwIAAA== X-Env-Sender: vkuznets@redhat.com X-Msg-Ref: server-3.tower-27.messagelabs.com!1488477258!89458874!1 X-Originating-IP: [209.132.183.28] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMjA5LjEzMi4xODMuMjggPT4gNTQwNjQ=\n X-StarScan-Received: X-StarScan-Version: 9.4.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 18140 invoked from network); 2 Mar 2017 17:54:19 -0000 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by server-3.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 2 Mar 2017 17:54:19 -0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 05D073A7698; Thu, 2 Mar 2017 17:54:19 +0000 (UTC) Received: from vitty.brq.redhat.com (vitty.brq.redhat.com [10.34.26.3]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v22Hrwk6010760; Thu, 2 Mar 2017 12:54:17 -0500 From: Vitaly Kuznetsov To: xen-devel@lists.xenproject.org Date: Thu, 2 Mar 2017 18:53:46 +0100 Message-Id: <20170302175357.8222-11-vkuznets@redhat.com> In-Reply-To: <20170302175357.8222-1-vkuznets@redhat.com> References: <20170302175357.8222-1-vkuznets@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 02 Mar 2017 17:54:19 +0000 (UTC) Cc: Juergen Gross , Boris Ostrovsky , x86@kernel.org, Andrew Jones , linux-kernel@vger.kernel.org Subject: [Xen-devel] [PATCH v2 10/21] x86/xen: split off smp_hvm.c X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Move PVHVM related code to smp_hvm.c. Drop 'static' qualifier from xen_smp_send_reschedule(), xen_smp_send_call_function_ipi(), xen_smp_send_call_function_single_ipi(), these functions will be moved to common smp code when smp_pv.c is split. Signed-off-by: Vitaly Kuznetsov Reviewed-by: Juergen Gross --- arch/x86/xen/Kconfig | 4 ++++ arch/x86/xen/Makefile | 1 + arch/x86/xen/smp.c | 57 +++---------------------------------------------- arch/x86/xen/smp.h | 3 +++ arch/x86/xen/smp_hvm.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 54 deletions(-) create mode 100644 arch/x86/xen/smp_hvm.c diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig index c387560..dae8dc6 100644 --- a/arch/x86/xen/Kconfig +++ b/arch/x86/xen/Kconfig @@ -37,6 +37,10 @@ config XEN_PVHVM help Support running as a Xen PVHVM guest. +config XEN_PVHVM_SMP + def_bool y + depends on XEN_PVHVM && SMP + config XEN_512GB bool "Limit Xen pv-domain memory to 512GB" depends on XEN_PV && X86_64 diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index 5ca8d3eb..bc7df8c 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile @@ -21,6 +21,7 @@ obj-$(CONFIG_XEN_PVH) += enlighten_pvh.o obj-$(CONFIG_EVENT_TRACING) += trace.o obj-$(CONFIG_SMP) += smp.o +obj-$(CONFIG_XEN_PVHVM_SMP) += smp_hvm.o obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o obj-$(CONFIG_XEN_DOM0) += vga.o diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 6c4b415..c692336 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -327,25 +327,6 @@ static void __init xen_pv_smp_prepare_boot_cpu(void) xen_init_spinlocks(); } -static void __init xen_hvm_smp_prepare_boot_cpu(void) -{ - BUG_ON(smp_processor_id() != 0); - native_smp_prepare_boot_cpu(); - - /* - * Setup vcpu_info for boot CPU. - */ - xen_vcpu_setup(0); - - /* - * The alternative logic (which patches the unlock/lock) runs before - * the smp bootup up code is activated. Hence we need to set this up - * the core kernel is being patched. Otherwise we will have only - * modules patched but not core code. - */ - xen_init_spinlocks(); -} - static void __init xen_smp_prepare_cpus(unsigned int max_cpus) { unsigned cpu; @@ -529,15 +510,6 @@ static void xen_pv_cpu_die(unsigned int cpu) } } -static void xen_hvm_cpu_die(unsigned int cpu) -{ - if (common_cpu_die(cpu) == 0) { - xen_smp_intr_free(cpu); - xen_uninit_lock_cpu(cpu); - xen_teardown_timer(cpu); - } -} - static void xen_play_dead(void) /* used only with HOTPLUG_CPU */ { play_dead_common(); @@ -565,11 +537,6 @@ static void xen_pv_cpu_die(unsigned int cpu) BUG(); } -static void xen_hvm_cpu_die(unsigned int cpu) -{ - BUG(); -} - static void xen_play_dead(void) { BUG(); @@ -595,7 +562,7 @@ static void xen_stop_other_cpus(int wait) smp_call_function(stop_self, NULL, wait); } -static void xen_smp_send_reschedule(int cpu) +void xen_smp_send_reschedule(int cpu) { xen_send_IPI_one(cpu, XEN_RESCHEDULE_VECTOR); } @@ -609,7 +576,7 @@ static void __xen_send_IPI_mask(const struct cpumask *mask, xen_send_IPI_one(cpu, vector); } -static void xen_smp_send_call_function_ipi(const struct cpumask *mask) +void xen_smp_send_call_function_ipi(const struct cpumask *mask) { int cpu; @@ -624,7 +591,7 @@ static void xen_smp_send_call_function_ipi(const struct cpumask *mask) } } -static void xen_smp_send_call_function_single_ipi(int cpu) +void xen_smp_send_call_function_single_ipi(int cpu) { __xen_send_IPI_mask(cpumask_of(cpu), XEN_CALL_FUNCTION_SINGLE_VECTOR); @@ -762,21 +729,3 @@ void __init xen_smp_init(void) smp_ops = xen_smp_ops; xen_fill_possible_map(); } - -static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus) -{ - native_smp_prepare_cpus(max_cpus); - WARN_ON(xen_smp_intr_init(0)); - - xen_init_lock_cpu(0); -} - -void __init xen_hvm_smp_init(void) -{ - smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus; - smp_ops.smp_send_reschedule = xen_smp_send_reschedule; - smp_ops.cpu_die = xen_hvm_cpu_die; - smp_ops.send_call_func_ipi = xen_smp_send_call_function_ipi; - smp_ops.send_call_func_single_ipi = xen_smp_send_call_function_single_ipi; - smp_ops.smp_prepare_boot_cpu = xen_hvm_smp_prepare_boot_cpu; -} diff --git a/arch/x86/xen/smp.h b/arch/x86/xen/smp.h index a059adb..bf36e79 100644 --- a/arch/x86/xen/smp.h +++ b/arch/x86/xen/smp.h @@ -14,6 +14,9 @@ extern void xen_smp_intr_free(unsigned int cpu); extern int xen_smp_intr_init_pv(unsigned int cpu); extern void xen_smp_intr_free_pv(unsigned int cpu); +extern void xen_smp_send_reschedule(int cpu); +extern void xen_smp_send_call_function_ipi(const struct cpumask *mask); +extern void xen_smp_send_call_function_single_ipi(int cpu); #else /* CONFIG_SMP */ static inline int xen_smp_intr_init(unsigned int cpu) diff --git a/arch/x86/xen/smp_hvm.c b/arch/x86/xen/smp_hvm.c new file mode 100644 index 0000000..8bed434 --- /dev/null +++ b/arch/x86/xen/smp_hvm.c @@ -0,0 +1,58 @@ +#include + +#include "xen-ops.h" +#include "smp.h" + + +static void __init xen_hvm_smp_prepare_boot_cpu(void) +{ + BUG_ON(smp_processor_id() != 0); + native_smp_prepare_boot_cpu(); + + /* + * Setup vcpu_info for boot CPU. + */ + xen_vcpu_setup(0); + + /* + * The alternative logic (which patches the unlock/lock) runs before + * the smp bootup up code is activated. Hence we need to set this up + * the core kernel is being patched. Otherwise we will have only + * modules patched but not core code. + */ + xen_init_spinlocks(); +} + +static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus) +{ + native_smp_prepare_cpus(max_cpus); + WARN_ON(xen_smp_intr_init(0)); + + xen_init_lock_cpu(0); +} + +#ifdef CONFIG_HOTPLUG_CPU +static void xen_hvm_cpu_die(unsigned int cpu) +{ + if (common_cpu_die(cpu) == 0) { + xen_smp_intr_free(cpu); + xen_uninit_lock_cpu(cpu); + xen_teardown_timer(cpu); + } +} +#else +static void xen_hvm_cpu_die(unsigned int cpu) +{ + BUG(); +} +#endif + +void __init xen_hvm_smp_init(void) +{ + smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus; + smp_ops.smp_send_reschedule = xen_smp_send_reschedule; + smp_ops.cpu_die = xen_hvm_cpu_die; + smp_ops.send_call_func_ipi = xen_smp_send_call_function_ipi; + smp_ops.send_call_func_single_ipi = xen_smp_send_call_function_single_ipi; + smp_ops.smp_prepare_boot_cpu = xen_hvm_smp_prepare_boot_cpu; +}