|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH xen-4.6] xen: Remove CONFIG_X86_SUPERVISOR_MODE_KERNEL as x86_32 builds are unsupported
supervisor_mode_kernel was an x86_32-only feature which permitted a PV dom0 to
run in ring 0, but at the expense of not being able to start any domUs.
As the x86_32 Xen build has been removed from tree, removing the remaining
supervisor_mode_kernel code.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: Keir Fraser <keir@xxxxxxx>
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Ian Campbell <ian.campbell@xxxxxxxxxx>
CC: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
CC: Tim Deegan <tim@xxxxxxx>
---
One complication is that PVH has reused XENFEAT_supervisor_mode_kernel with a
modified meaning, and the Linux PVH code actively uses the flag as to indicate
running as a PVH guest.
This causes an discontinuity between PVH and HVM guests, both of which run
their kernels with the PVH-taken meaning of XENFEAT_supervisor_mode_kernel.
It also means that a dom0 kernel is unable to express "PVH-only" by requiring
this feature, as a 64bit Xen will validly reject an attempt to require a
32bit-only Xen feature.
Someone with more tuits than I currently have will need to see about
untangling this as part of unifying the PVH and HVM guest types, preferably
before the ABI is declared stable.
---
xen/arch/x86/Rules.mk | 10 ----------
xen/arch/x86/domain.c | 3 ---
xen/arch/x86/domain_build.c | 24 ++++++------------------
xen/common/domctl.c | 3 +--
xen/common/kernel.c | 2 --
xen/include/asm-arm/config.h | 2 --
xen/include/asm-x86/config.h | 6 ------
xen/include/asm-x86/desc.h | 10 ----------
8 files changed, 7 insertions(+), 53 deletions(-)
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index 6775cb5..ef8c222 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -15,12 +15,6 @@ HAS_GDBSX := y
HAS_PDX := y
xenoprof := y
-#
-# If you change any of these configuration options then you must
-# 'make clean' before rebuilding.
-#
-supervisor_mode_kernel ?= n
-
CFLAGS += -I$(BASEDIR)/include
CFLAGS += -I$(BASEDIR)/include/asm-x86/mach-generic
CFLAGS += -I$(BASEDIR)/include/asm-x86/mach-default
@@ -34,10 +28,6 @@ $(call as-insn-check,CFLAGS,CC,"vmcall",-DHAVE_GAS_VMX)
$(call as-insn-check,CFLAGS,CC,"invept (%rax)$$(comma)%rax",-DHAVE_GAS_EPT)
$(call as-insn-check,CFLAGS,CC,"rdfsbase %rax",-DHAVE_GAS_FSGSBASE)
-ifeq ($(supervisor_mode_kernel),y)
-CFLAGS += -DCONFIG_X86_SUPERVISOR_MODE_KERNEL=1
-endif
-
x86 := y
x86_32 := n
x86_64 := y
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 11c7d9f..b699510 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -1726,9 +1726,6 @@ unsigned long hypercall_create_continuation(
}
else
{
- if ( supervisor_mode_kernel )
- regs->eip &= ~31; /* re-execute entire hypercall entry stub */
-
for ( i = 0; *p != '\0'; i++ )
{
arg = next_arg(p, args);
diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c
index 7993b17..7a912e9 100644
--- a/xen/arch/x86/domain_build.c
+++ b/xen/arch/x86/domain_build.c
@@ -1410,24 +1410,12 @@ int __init construct_dom0(
paging_update_paging_modes(v);
}
- if ( supervisor_mode_kernel )
- {
- v->arch.pv_vcpu.kernel_ss &= ~3;
- v->arch.user_regs.ss &= ~3;
- v->arch.user_regs.es &= ~3;
- v->arch.user_regs.ds &= ~3;
- v->arch.user_regs.fs &= ~3;
- v->arch.user_regs.gs &= ~3;
- printk("Dom0 runs in ring 0 (supervisor mode)\n");
- if ( !test_bit(XENFEAT_supervisor_mode_kernel,
- parms.f_supported) )
- panic("Dom0 does not support supervisor-mode execution");
- }
- else
- {
- if ( test_bit(XENFEAT_supervisor_mode_kernel, parms.f_required) )
- panic("Dom0 requires supervisor-mode execution");
- }
+ /*
+ * PVH Fixme: XENFEAT_supervisor_mode_kernel has been reused in PVH with a
+ * different meaning.
+ */
+ if ( test_bit(XENFEAT_supervisor_mode_kernel, parms.f_required) )
+ panic("Dom0 requires supervisor-mode execution");
rc = 0;
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index f15dcfe..edadf74 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -534,8 +534,7 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)
u_domctl)
unsigned int domcr_flags;
ret = -EINVAL;
- if ( supervisor_mode_kernel ||
- (op->u.createdomain.flags &
+ if ( (op->u.createdomain.flags &
~(XEN_DOMCTL_CDF_hvm_guest
| XEN_DOMCTL_CDF_pvh_guest
| XEN_DOMCTL_CDF_hap
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index d23c422..0d9e519 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -308,8 +308,6 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
fi.submap |=
(1U << XENFEAT_writable_page_tables) |
(1U << XENFEAT_auto_translated_physmap);
- if ( supervisor_mode_kernel )
- fi.submap |= 1U << XENFEAT_supervisor_mode_kernel;
if ( is_hardware_domain(current->domain) )
fi.submap |= 1U << XENFEAT_dom0;
#ifdef CONFIG_X86
diff --git a/xen/include/asm-arm/config.h b/xen/include/asm-arm/config.h
index 264e2c1..9e165db 100644
--- a/xen/include/asm-arm/config.h
+++ b/xen/include/asm-arm/config.h
@@ -196,8 +196,6 @@ extern unsigned long xenheap_phys_end;
extern unsigned long frametable_virt_end;
#endif
-#define supervisor_mode_kernel (0)
-
#define watchdog_disable() ((void)0)
#define watchdog_enable() ((void)0)
diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h
index 3802721..ad52d5b 100644
--- a/xen/include/asm-x86/config.h
+++ b/xen/include/asm-x86/config.h
@@ -70,12 +70,6 @@
/* Maximum we can support with current vLAPIC ID mapping. */
#define MAX_HVM_VCPUS 128
-#ifdef CONFIG_X86_SUPERVISOR_MODE_KERNEL
-# define supervisor_mode_kernel (1)
-#else
-# define supervisor_mode_kernel (0)
-#endif
-
/* Linkage for x86 */
#define __ALIGN .align 16,0x90
#define __ALIGN_STR ".align 16,0x90"
diff --git a/xen/include/asm-x86/desc.h b/xen/include/asm-x86/desc.h
index 225913a..20c47d2 100644
--- a/xen/include/asm-x86/desc.h
+++ b/xen/include/asm-x86/desc.h
@@ -47,17 +47,7 @@
(sel) = (((sel) & 3) >= _rpl) ? (sel) : (((sel) & ~3) | _rpl); \
})
-/* Stack selectors don't need fixing up if the kernel runs in ring 0. */
-#ifdef CONFIG_X86_SUPERVISOR_MODE_KERNEL
-#define fixup_guest_stack_selector(d, ss) ((void)0)
-#else
#define fixup_guest_stack_selector(d, ss) __fixup_guest_selector(d, ss)
-#endif
-
-/*
- * Code selectors are always fixed up. It allows the Xen exit stub to detect
- * return to guest context, even when the guest kernel runs in ring 0.
- */
#define fixup_guest_code_selector(d, cs) __fixup_guest_selector(d, cs)
/*
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |