From: Vitaly Kuznetsov <vkuznets@redhat.com> To: xen-devel@lists.xenproject.org Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, Andrew Jones <drjones@redhat.com> Subject: [PATCH v2 12/21] x86/xen: split off mmu_hvm.c Date: Thu, 2 Mar 2017 18:53:48 +0100 [thread overview] Message-ID: <20170302175357.8222-13-vkuznets@redhat.com> (raw) In-Reply-To: <20170302175357.8222-1-vkuznets@redhat.com> Move PVHVM related code to mmu_hvm.c. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> --- arch/x86/xen/Makefile | 2 +- arch/x86/xen/mmu.c | 74 ---------------------------------------------- arch/x86/xen/mmu_hvm.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 75 deletions(-) create mode 100644 arch/x86/xen/mmu_hvm.c diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index ebf3522..6a95a8b 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile @@ -15,7 +15,7 @@ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ grant-table.o suspend.o platform-pci-unplug.o \ p2m.o apic.o pmu.o enlighten_pv.o -obj-$(CONFIG_XEN_PVHVM) += enlighten_hvm.o +obj-$(CONFIG_XEN_PVHVM) += enlighten_hvm.o mmu_hvm.o obj-$(CONFIG_XEN_PVH) += enlighten_pvh.o obj-$(CONFIG_EVENT_TRACING) += trace.o diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index f6740b5..4dfcb06 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -2689,80 +2689,6 @@ void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order) } EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region); -#ifdef CONFIG_XEN_PVHVM -#ifdef CONFIG_PROC_VMCORE -/* - * This function is used in two contexts: - * - the kdump kernel has to check whether a pfn of the crashed kernel - * was a ballooned page. vmcore is using this function to decide - * whether to access a pfn of the crashed kernel. - * - the kexec kernel has to check whether a pfn was ballooned by the - * previous kernel. If the pfn is ballooned, handle it properly. - * Returns 0 if the pfn is not backed by a RAM page, the caller may - * handle the pfn special in this case. - */ -static int xen_oldmem_pfn_is_ram(unsigned long pfn) -{ - struct xen_hvm_get_mem_type a = { - .domid = DOMID_SELF, - .pfn = pfn, - }; - int ram; - - if (HYPERVISOR_hvm_op(HVMOP_get_mem_type, &a)) - return -ENXIO; - - switch (a.mem_type) { - case HVMMEM_mmio_dm: - ram = 0; - break; - case HVMMEM_ram_rw: - case HVMMEM_ram_ro: - default: - ram = 1; - break; - } - - return ram; -} -#endif - -static void xen_hvm_exit_mmap(struct mm_struct *mm) -{ - struct xen_hvm_pagetable_dying a; - int rc; - - a.domid = DOMID_SELF; - a.gpa = __pa(mm->pgd); - rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); - WARN_ON_ONCE(rc < 0); -} - -static int is_pagetable_dying_supported(void) -{ - struct xen_hvm_pagetable_dying a; - int rc = 0; - - a.domid = DOMID_SELF; - a.gpa = 0x00; - rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); - if (rc < 0) { - printk(KERN_DEBUG "HVMOP_pagetable_dying not supported\n"); - return 0; - } - return 1; -} - -void __init xen_hvm_init_mmu_ops(void) -{ - if (is_pagetable_dying_supported()) - pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap; -#ifdef CONFIG_PROC_VMCORE - register_oldmem_pfn_is_ram(&xen_oldmem_pfn_is_ram); -#endif -} -#endif - #define REMAP_BATCH_SIZE 16 struct remap_data { diff --git a/arch/x86/xen/mmu_hvm.c b/arch/x86/xen/mmu_hvm.c new file mode 100644 index 0000000..1c57f1c --- /dev/null +++ b/arch/x86/xen/mmu_hvm.c @@ -0,0 +1,79 @@ +#include <linux/types.h> +#include <linux/crash_dump.h> + +#include <xen/interface/xen.h> +#include <xen/hvm.h> + +#include "mmu.h" + +#ifdef CONFIG_PROC_VMCORE +/* + * This function is used in two contexts: + * - the kdump kernel has to check whether a pfn of the crashed kernel + * was a ballooned page. vmcore is using this function to decide + * whether to access a pfn of the crashed kernel. + * - the kexec kernel has to check whether a pfn was ballooned by the + * previous kernel. If the pfn is ballooned, handle it properly. + * Returns 0 if the pfn is not backed by a RAM page, the caller may + * handle the pfn special in this case. + */ +static int xen_oldmem_pfn_is_ram(unsigned long pfn) +{ + struct xen_hvm_get_mem_type a = { + .domid = DOMID_SELF, + .pfn = pfn, + }; + int ram; + + if (HYPERVISOR_hvm_op(HVMOP_get_mem_type, &a)) + return -ENXIO; + + switch (a.mem_type) { + case HVMMEM_mmio_dm: + ram = 0; + break; + case HVMMEM_ram_rw: + case HVMMEM_ram_ro: + default: + ram = 1; + break; + } + + return ram; +} +#endif + +static void xen_hvm_exit_mmap(struct mm_struct *mm) +{ + struct xen_hvm_pagetable_dying a; + int rc; + + a.domid = DOMID_SELF; + a.gpa = __pa(mm->pgd); + rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); + WARN_ON_ONCE(rc < 0); +} + +static int is_pagetable_dying_supported(void) +{ + struct xen_hvm_pagetable_dying a; + int rc = 0; + + a.domid = DOMID_SELF; + a.gpa = 0x00; + rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); + if (rc < 0) { + printk(KERN_DEBUG "HVMOP_pagetable_dying not supported\n"); + return 0; + } + return 1; +} + +void __init xen_hvm_init_mmu_ops(void) +{ + if (is_pagetable_dying_supported()) + pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap; +#ifdef CONFIG_PROC_VMCORE + register_oldmem_pfn_is_ram(&xen_oldmem_pfn_is_ram); +#endif +} -- 2.9.3
WARNING: multiple messages have this Message-ID (diff)
From: Vitaly Kuznetsov <vkuznets@redhat.com> To: xen-devel@lists.xenproject.org Cc: Juergen Gross <jgross@suse.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, x86@kernel.org, Andrew Jones <drjones@redhat.com>, linux-kernel@vger.kernel.org Subject: [PATCH v2 12/21] x86/xen: split off mmu_hvm.c Date: Thu, 2 Mar 2017 18:53:48 +0100 [thread overview] Message-ID: <20170302175357.8222-13-vkuznets@redhat.com> (raw) In-Reply-To: <20170302175357.8222-1-vkuznets@redhat.com> Move PVHVM related code to mmu_hvm.c. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> --- arch/x86/xen/Makefile | 2 +- arch/x86/xen/mmu.c | 74 ---------------------------------------------- arch/x86/xen/mmu_hvm.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 75 deletions(-) create mode 100644 arch/x86/xen/mmu_hvm.c diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index ebf3522..6a95a8b 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile @@ -15,7 +15,7 @@ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ grant-table.o suspend.o platform-pci-unplug.o \ p2m.o apic.o pmu.o enlighten_pv.o -obj-$(CONFIG_XEN_PVHVM) += enlighten_hvm.o +obj-$(CONFIG_XEN_PVHVM) += enlighten_hvm.o mmu_hvm.o obj-$(CONFIG_XEN_PVH) += enlighten_pvh.o obj-$(CONFIG_EVENT_TRACING) += trace.o diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index f6740b5..4dfcb06 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -2689,80 +2689,6 @@ void xen_destroy_contiguous_region(phys_addr_t pstart, unsigned int order) } EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region); -#ifdef CONFIG_XEN_PVHVM -#ifdef CONFIG_PROC_VMCORE -/* - * This function is used in two contexts: - * - the kdump kernel has to check whether a pfn of the crashed kernel - * was a ballooned page. vmcore is using this function to decide - * whether to access a pfn of the crashed kernel. - * - the kexec kernel has to check whether a pfn was ballooned by the - * previous kernel. If the pfn is ballooned, handle it properly. - * Returns 0 if the pfn is not backed by a RAM page, the caller may - * handle the pfn special in this case. - */ -static int xen_oldmem_pfn_is_ram(unsigned long pfn) -{ - struct xen_hvm_get_mem_type a = { - .domid = DOMID_SELF, - .pfn = pfn, - }; - int ram; - - if (HYPERVISOR_hvm_op(HVMOP_get_mem_type, &a)) - return -ENXIO; - - switch (a.mem_type) { - case HVMMEM_mmio_dm: - ram = 0; - break; - case HVMMEM_ram_rw: - case HVMMEM_ram_ro: - default: - ram = 1; - break; - } - - return ram; -} -#endif - -static void xen_hvm_exit_mmap(struct mm_struct *mm) -{ - struct xen_hvm_pagetable_dying a; - int rc; - - a.domid = DOMID_SELF; - a.gpa = __pa(mm->pgd); - rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); - WARN_ON_ONCE(rc < 0); -} - -static int is_pagetable_dying_supported(void) -{ - struct xen_hvm_pagetable_dying a; - int rc = 0; - - a.domid = DOMID_SELF; - a.gpa = 0x00; - rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); - if (rc < 0) { - printk(KERN_DEBUG "HVMOP_pagetable_dying not supported\n"); - return 0; - } - return 1; -} - -void __init xen_hvm_init_mmu_ops(void) -{ - if (is_pagetable_dying_supported()) - pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap; -#ifdef CONFIG_PROC_VMCORE - register_oldmem_pfn_is_ram(&xen_oldmem_pfn_is_ram); -#endif -} -#endif - #define REMAP_BATCH_SIZE 16 struct remap_data { diff --git a/arch/x86/xen/mmu_hvm.c b/arch/x86/xen/mmu_hvm.c new file mode 100644 index 0000000..1c57f1c --- /dev/null +++ b/arch/x86/xen/mmu_hvm.c @@ -0,0 +1,79 @@ +#include <linux/types.h> +#include <linux/crash_dump.h> + +#include <xen/interface/xen.h> +#include <xen/hvm.h> + +#include "mmu.h" + +#ifdef CONFIG_PROC_VMCORE +/* + * This function is used in two contexts: + * - the kdump kernel has to check whether a pfn of the crashed kernel + * was a ballooned page. vmcore is using this function to decide + * whether to access a pfn of the crashed kernel. + * - the kexec kernel has to check whether a pfn was ballooned by the + * previous kernel. If the pfn is ballooned, handle it properly. + * Returns 0 if the pfn is not backed by a RAM page, the caller may + * handle the pfn special in this case. + */ +static int xen_oldmem_pfn_is_ram(unsigned long pfn) +{ + struct xen_hvm_get_mem_type a = { + .domid = DOMID_SELF, + .pfn = pfn, + }; + int ram; + + if (HYPERVISOR_hvm_op(HVMOP_get_mem_type, &a)) + return -ENXIO; + + switch (a.mem_type) { + case HVMMEM_mmio_dm: + ram = 0; + break; + case HVMMEM_ram_rw: + case HVMMEM_ram_ro: + default: + ram = 1; + break; + } + + return ram; +} +#endif + +static void xen_hvm_exit_mmap(struct mm_struct *mm) +{ + struct xen_hvm_pagetable_dying a; + int rc; + + a.domid = DOMID_SELF; + a.gpa = __pa(mm->pgd); + rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); + WARN_ON_ONCE(rc < 0); +} + +static int is_pagetable_dying_supported(void) +{ + struct xen_hvm_pagetable_dying a; + int rc = 0; + + a.domid = DOMID_SELF; + a.gpa = 0x00; + rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); + if (rc < 0) { + printk(KERN_DEBUG "HVMOP_pagetable_dying not supported\n"); + return 0; + } + return 1; +} + +void __init xen_hvm_init_mmu_ops(void) +{ + if (is_pagetable_dying_supported()) + pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap; +#ifdef CONFIG_PROC_VMCORE + register_oldmem_pfn_is_ram(&xen_oldmem_pfn_is_ram); +#endif +} -- 2.9.3 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-03-02 18:50 UTC|newest] Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-03-02 17:53 [PATCH v2 00/21] x86/xen: untangle PV and PVHVM guest support code Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-02 17:53 ` [PATCH v2 01/21] x86/xen: separate PV and HVM hypervisors Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-08 15:06 ` Juergen Gross 2017-03-08 15:06 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 02/21] x86/xen: globalize have_vcpu_info_placement Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-08 15:07 ` Juergen Gross 2017-03-08 15:07 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 03/21] x86/xen: add CONFIG_XEN_PV to Kconfig Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-08 15:12 ` Juergen Gross 2017-03-08 15:12 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 04/21] x86/xen: split off enlighten_pvh.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-08 15:14 ` Juergen Gross 2017-03-08 15:14 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 05/21] x86/xen: split off enlighten_hvm.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-08 15:16 ` Juergen Gross 2017-03-08 15:16 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 06/21] x86/xen: split off enlighten_pv.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-08 15:18 ` Juergen Gross 2017-03-08 15:18 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 07/21] x86/xen: split xen_smp_intr_init()/xen_smp_intr_free() Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 7:30 ` Juergen Gross 2017-03-13 7:30 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 08/21] x86/xen: split xen_smp_prepare_boot_cpu() Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 7:33 ` Juergen Gross 2017-03-13 7:33 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 09/21] x86/xen: split xen_cpu_die() Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 7:34 ` Juergen Gross 2017-03-13 7:34 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 10/21] x86/xen: split off smp_hvm.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 7:37 ` Juergen Gross 2017-03-13 7:37 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 11/21] x86/xen: split off smp_pv.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:33 ` Juergen Gross 2017-03-13 9:33 ` Juergen Gross 2017-03-02 17:53 ` Vitaly Kuznetsov [this message] 2017-03-02 17:53 ` [PATCH v2 12/21] x86/xen: split off mmu_hvm.c Vitaly Kuznetsov 2017-03-13 9:34 ` Juergen Gross 2017-03-13 9:34 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 13/21] x86/xen: split off mmu_pv.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:35 ` Juergen Gross 2017-03-13 9:35 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 14/21] x86/xen: split suspend.c for PV and PVHVM guests Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-05 9:13 ` kbuild test robot 2017-03-05 9:13 ` [Xen-devel] " kbuild test robot 2017-03-02 17:53 ` [PATCH v2 15/21] x86/xen: put setup.c, pmu.c and apic.c under CONFIG_XEN_PV Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-02 17:53 ` [PATCH v2 16/21] x86/xen: define startup_xen for XEN PV only Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:36 ` Juergen Gross 2017-03-13 9:36 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 17/21] x86/xen: create stubs for HVM-only builds in page.h Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:43 ` Juergen Gross 2017-03-13 9:43 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 18/21] xen/balloon: decorate PV-only parts with #ifdef CONFIG_XEN_PV Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:47 ` Juergen Gross 2017-03-13 9:47 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 19/21] xen: create xen_create/destroy_contiguous_region() stubs for PVHVM only builds Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:47 ` Juergen Gross 2017-03-13 9:47 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 20/21] x86/xen: enable PVHVM-only builds Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:48 ` Juergen Gross 2017-03-13 9:48 ` Juergen Gross 2017-03-02 17:53 ` [PATCH v2 21/21] x86/xen: rename some PV-only functions in smp_pv.c Vitaly Kuznetsov 2017-03-02 17:53 ` Vitaly Kuznetsov 2017-03-13 9:49 ` Juergen Gross 2017-03-13 9:49 ` Juergen Gross 2017-03-05 17:59 ` [Xen-devel] [PATCH v2 00/21] x86/xen: untangle PV and PVHVM guest support code Boris Ostrovsky 2017-03-13 13:02 ` Vitaly Kuznetsov 2017-03-13 13:02 ` [Xen-devel] " Vitaly Kuznetsov 2017-03-05 17:59 ` Boris Ostrovsky
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=20170302175357.8222-13-vkuznets@redhat.com \ --to=vkuznets@redhat.com \ --cc=boris.ostrovsky@oracle.com \ --cc=drjones@redhat.com \ --cc=jgross@suse.com \ --cc=linux-kernel@vger.kernel.org \ --cc=x86@kernel.org \ --cc=xen-devel@lists.xenproject.org \ /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 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.