No functional change.
Signed-off-by: Wei Liu
---
xen/arch/x86/pv/mm.c | 68 ++
xen/arch/x86/x86_64/mm.c | 70
2 files changed, 68 insertions(+), 70 deletions(-)
diff --git a/xen/arch/x86/pv/mm.c b/xen/arch/x86/pv/mm.c
index b5277b5d28..48d3fe184b 100644
--- a/xen/arch/x86/pv/mm.c
+++ b/xen/arch/x86/pv/mm.c
@@ -4106,6 +4106,74 @@ int mmio_ro_do_page_fault(struct vcpu *v, unsigned long
addr,
return 0;
}
+long do_stack_switch(unsigned long ss, unsigned long esp)
+{
+fixup_guest_stack_selector(current->domain, ss);
+current->arch.pv_vcpu.kernel_ss = ss;
+current->arch.pv_vcpu.kernel_sp = esp;
+return 0;
+}
+
+long do_set_segment_base(unsigned int which, unsigned long base)
+{
+struct vcpu *v = current;
+long ret = 0;
+
+if ( is_pv_32bit_vcpu(v) )
+return -ENOSYS; /* x86/64 only. */
+
+switch ( which )
+{
+case SEGBASE_FS:
+if ( is_canonical_address(base) )
+{
+wrfsbase(base);
+v->arch.pv_vcpu.fs_base = base;
+}
+else
+ret = -EINVAL;
+break;
+
+case SEGBASE_GS_USER:
+if ( is_canonical_address(base) )
+{
+wrmsrl(MSR_SHADOW_GS_BASE, base);
+v->arch.pv_vcpu.gs_base_user = base;
+}
+else
+ret = -EINVAL;
+break;
+
+case SEGBASE_GS_KERNEL:
+if ( is_canonical_address(base) )
+{
+wrgsbase(base);
+v->arch.pv_vcpu.gs_base_kernel = base;
+}
+else
+ret = -EINVAL;
+break;
+
+case SEGBASE_GS_USER_SEL:
+__asm__ __volatile__ (
+" swapgs \n"
+"1: movl %k0,%%gs \n"
+""safe_swapgs"\n"
+".section .fixup,\"ax\" \n"
+"2: xorl %k0,%k0\n"
+" jmp 1b \n"
+".previous\n"
+_ASM_EXTABLE(1b, 2b)
+: : "r" (base&0x) );
+break;
+
+default:
+ret = -EINVAL;
+break;
+}
+
+return ret;
+}
/*
* Local variables:
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index 34f3250fd7..19a14e8829 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -1018,76 +1018,6 @@ long subarch_memory_op(unsigned long cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
return rc;
}
-long do_stack_switch(unsigned long ss, unsigned long esp)
-{
-fixup_guest_stack_selector(current->domain, ss);
-current->arch.pv_vcpu.kernel_ss = ss;
-current->arch.pv_vcpu.kernel_sp = esp;
-return 0;
-}
-
-long do_set_segment_base(unsigned int which, unsigned long base)
-{
-struct vcpu *v = current;
-long ret = 0;
-
-if ( is_pv_32bit_vcpu(v) )
-return -ENOSYS; /* x86/64 only. */
-
-switch ( which )
-{
-case SEGBASE_FS:
-if ( is_canonical_address(base) )
-{
-wrfsbase(base);
-v->arch.pv_vcpu.fs_base = base;
-}
-else
-ret = -EINVAL;
-break;
-
-case SEGBASE_GS_USER:
-if ( is_canonical_address(base) )
-{
-wrmsrl(MSR_SHADOW_GS_BASE, base);
-v->arch.pv_vcpu.gs_base_user = base;
-}
-else
-ret = -EINVAL;
-break;
-
-case SEGBASE_GS_KERNEL:
-if ( is_canonical_address(base) )
-{
-wrgsbase(base);
-v->arch.pv_vcpu.gs_base_kernel = base;
-}
-else
-ret = -EINVAL;
-break;
-
-case SEGBASE_GS_USER_SEL:
-__asm__ __volatile__ (
-" swapgs \n"
-"1: movl %k0,%%gs \n"
-""safe_swapgs"\n"
-".section .fixup,\"ax\" \n"
-"2: xorl %k0,%k0\n"
-" jmp 1b \n"
-".previous\n"
-_ASM_EXTABLE(1b, 2b)
-: : "r" (base&0x) );
-break;
-
-default:
-ret = -EINVAL;
-break;
-}
-
-return ret;
-}
-
-
/* Returns TRUE if given descriptor is valid for GDT or LDT. */
int check_descriptor(const struct domain *dom, struct desc_struct *d)
{
--
2.11.0
___
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel