Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1587761 > unrolled thread
| Started by | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| First post | 2017-02-24 17:20 +0100 |
| Last post | 2017-02-24 17:20 +0100 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH 0/5] x86/xen: untangle PV and PVHVM guest support code Vitaly Kuznetsov <vkuznets@redhat.com> - 2017-02-24 17:20 +0100
[PATCH 4/5] x86/xen: put setup.c, pmu.c and apic.c under CONFIG_XEN_PV Vitaly Kuznetsov <vkuznets@redhat.com> - 2017-02-24 17:20 +0100
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2017-02-24 17:20 +0100 |
| Subject | [PATCH 0/5] x86/xen: untangle PV and PVHVM guest support code |
| Message-ID | <teqL7-2Ds-9@gated-at.bofh.it> |
Hi, it's been a while since my 'RFC' submission in November: https://lists.xen.org/archives/html/xen-devel/2016-11/msg01044.html I was advised to wait till PVHv2 stuff lands upstream and as this has already happened I'm sending the first non-RFC version. Changes since RFC: - Rebase - Use enlighten.c, enlighten_pv.c, enlighten_hvm.c, enlighten_pvh.c (and similar for other files I split) [David Vrabel] - Split suspend.c too to get rid of #ifdefs in C code. - I left XEN_DOM0 intact (rename to XEN_PV_DOM0 was suggested by [Boris Ostrovsky]) as it occured to me that we may want to have all three when XEN_PVH_DOM0 comes into play. XEN_DOM0 will be used for common code than so no need to change #ifdefs twice. Patches are known to produce checkpatch.pl WARNINGS and a couple of ERRORs, I fixed a few (mostly in _hvm* code I split) and I refrained from fixing the rest to make it easier to review. I think that we may leave PV code as it is as sooner or later it will go away. Original description: I have a long-standing idea to separate PV and PVHVM code in kernel and introduce Kconfig options to make it possible to enable the required parts only breaking the current 'all or nothing' approach. Motivation: - Xen related x86 code in kernel is rather big and it is unclear which parts of it are required for PV, for HVM or for both. With PVH coming into picture is becomes even more tangled. It makes it hard to understand/audit the code. - In some case we may want to avoid bloating kernel by supporting Xen guests we don't need. In particular, 90% of the code in arch/x86/xen/ is required to support PV guests and one may require PVHVM support only. - PV guests are supposed to go away one day and such code separation would help us to get ready. This series adds XEN_PV Kconfig option and makes it possible to build PV-only and PVHVM-only kernels. It also makes it possible to disable Dom0 support. Patches are rather big but this is mostly just moving code around, no functional changes intended. I smoke tested it with PV-only and PVHVM-only builds, booted and did save/restore test. I also tried the newly introduced PVHv2 guest, it even worked! Vitaly Kuznetsov (5): x86/xen: start untangling PV and PVHVM guest support code x86/xen: split smp.c for PV and PVHVM guests x86/xen: put setup.c, mmu.c and p2m.c under CONFIG_XEN_PV x86/xen: put setup.c, pmu.c and apic.c under CONFIG_XEN_PV x86/xen: split suspend.c for PV and PVHVM guests arch/x86/include/asm/hypervisor.h | 3 +- arch/x86/include/asm/xen/page.h | 44 +- arch/x86/kernel/cpu/hypervisor.c | 7 +- arch/x86/kernel/process_64.c | 2 +- arch/x86/xen/Kconfig | 33 +- arch/x86/xen/Makefile | 18 +- arch/x86/xen/enlighten.c | 1904 +------------------------ arch/x86/xen/enlighten_hvm.c | 210 +++ arch/x86/xen/enlighten_pv.c | 1561 +++++++++++++++++++++ arch/x86/xen/enlighten_pvh.c | 114 ++ arch/x86/xen/mmu.c | 2776 +------------------------------------ arch/x86/xen/mmu_hvm.c | 77 + arch/x86/xen/mmu_pv.c | 2636 +++++++++++++++++++++++++++++++++++ arch/x86/xen/pmu.h | 5 + arch/x86/xen/smp.c | 523 +------ arch/x86/xen/smp.h | 23 + arch/x86/xen/smp_hvm.c | 58 + arch/x86/xen/smp_pv.c | 499 +++++++ arch/x86/xen/suspend.c | 54 - arch/x86/xen/suspend_hvm.c | 22 + arch/x86/xen/suspend_pv.c | 44 + arch/x86/xen/xen-head.S | 4 + arch/x86/xen/xen-ops.h | 16 + drivers/xen/balloon.c | 30 +- include/xen/xen-ops.h | 19 + 25 files changed, 5489 insertions(+), 5193 deletions(-) create mode 100644 arch/x86/xen/enlighten_hvm.c create mode 100644 arch/x86/xen/enlighten_pv.c create mode 100644 arch/x86/xen/enlighten_pvh.c create mode 100644 arch/x86/xen/mmu_hvm.c create mode 100644 arch/x86/xen/mmu_pv.c create mode 100644 arch/x86/xen/smp_hvm.c create mode 100644 arch/x86/xen/smp_pv.c create mode 100644 arch/x86/xen/suspend_hvm.c create mode 100644 arch/x86/xen/suspend_pv.c -- 2.9.3
[toc] | [next] | [standalone]
| From | Vitaly Kuznetsov <vkuznets@redhat.com> |
|---|---|
| Date | 2017-02-24 17:20 +0100 |
| Subject | [PATCH 4/5] x86/xen: put setup.c, pmu.c and apic.c under CONFIG_XEN_PV |
| Message-ID | <teqL8-2Ds-31@gated-at.bofh.it> |
| In reply to | #1587761 |
xen_pmu_init/finish() functions are used in suspend.c and
enlighten.c, add stubs for now.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
arch/x86/xen/Kconfig | 2 +-
arch/x86/xen/Makefile | 5 +++--
arch/x86/xen/pmu.h | 5 +++++
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig
index 9ebfd77..aa8256b 100644
--- a/arch/x86/xen/Kconfig
+++ b/arch/x86/xen/Kconfig
@@ -6,7 +6,6 @@ config XEN
bool "Xen guest support"
depends on PARAVIRT
select PARAVIRT_CLOCK
- select XEN_HAVE_VPMU
depends on X86_64 || (X86_32 && X86_PAE)
depends on X86_LOCAL_APIC && X86_TSC
help
@@ -18,6 +17,7 @@ config XEN_PV
bool "Xen PV guest support"
default y
depends on XEN
+ select XEN_HAVE_VPMU
help
Support running as a Xen PV guest.
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
index 3bf840e..10264ed 100644
--- a/arch/x86/xen/Makefile
+++ b/arch/x86/xen/Makefile
@@ -13,9 +13,10 @@ CFLAGS_mmu_pv.o := $(nostackp)
obj-y := enlighten.o multicalls.o \
irq.o time.o xen-asm.o xen-asm_$(BITS).o \
grant-table.o suspend.o platform-pci-unplug.o \
- apic.o pmu.o mmu.o
+ mmu.o
-obj-$(CONFIG_XEN_PV) += enlighten_pv.o setup.o mmu_pv.o p2m.o
+obj-$(CONFIG_XEN_PV) += enlighten_pv.o setup.o mmu_pv.o p2m.o \
+ apic.o pmu.o
obj-$(CONFIG_XEN_PVHVM) += enlighten_hvm.o mmu_hvm.o
obj-$(CONFIG_XEN_PVH) += enlighten_pvh.o
diff --git a/arch/x86/xen/pmu.h b/arch/x86/xen/pmu.h
index af5f0ad..4be5355 100644
--- a/arch/x86/xen/pmu.h
+++ b/arch/x86/xen/pmu.h
@@ -4,8 +4,13 @@
#include <xen/interface/xenpmu.h>
irqreturn_t xen_pmu_irq_handler(int irq, void *dev_id);
+#ifdef CONFIG_XEN_HAVE_VPMU
void xen_pmu_init(int cpu);
void xen_pmu_finish(int cpu);
+#else
+static inline void xen_pmu_init(int cpu) {}
+static inline void xen_pmu_finish(int cpu) {}
+#endif
bool is_xen_pmu(int cpu);
bool pmu_msr_read(unsigned int msr, uint64_t *val, int *err);
bool pmu_msr_write(unsigned int msr, uint32_t low, uint32_t high, int *err);
--
2.9.3
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web