Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Devel

[PATCH 1 of 2] xen/hvm: Add get_shadow_gs_base() wrapper function

 

 

Xen devel RSS feed   Index | Next | Previous | View Threaded


aravindh at virtuata

Apr 25, 2012, 11:38 AM

Post #1 of 1 (59 views)
Permalink
[PATCH 1 of 2] xen/hvm: Add get_shadow_gs_base() wrapper function

Add a wrapper function to the HVM function table that returns the shadow GS base.

Signed-off-by: Aravindh Puthiyaparambil <aravindh [at] virtuata>

diff -r 6ef297a3761f -r be41f3b599d9 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Mon Apr 23 15:16:34 2012 -0700
+++ b/xen/arch/x86/hvm/svm/svm.c Wed Apr 25 11:35:29 2012 -0700
@@ -645,6 +645,13 @@ static void svm_set_segment_register(str
svm_vmload(vmcb);
}

+static unsigned long svm_get_shadow_gs_base(struct vcpu *v)
+{
+ struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb;
+
+ return vmcb->kerngsbase;
+}
+
static int svm_set_guest_pat(struct vcpu *v, u64 gpat)
{
struct vmcb_struct *vmcb = v->arch.hvm_svm.vmcb;
@@ -1983,6 +1990,7 @@ static struct hvm_function_table __read_
.guest_x86_mode = svm_guest_x86_mode,
.get_segment_register = svm_get_segment_register,
.set_segment_register = svm_set_segment_register,
+ .get_shadow_gs_base = svm_get_shadow_gs_base,
.update_host_cr3 = svm_update_host_cr3,
.update_guest_cr = svm_update_guest_cr,
.update_guest_efer = svm_update_guest_efer,
diff -r 6ef297a3761f -r be41f3b599d9 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Mon Apr 23 15:16:34 2012 -0700
+++ b/xen/arch/x86/hvm/vmx/vmx.c Wed Apr 25 11:35:29 2012 -0700
@@ -942,6 +942,15 @@ static void vmx_set_segment_register(str
vmx_vmcs_exit(v);
}

+static unsigned long vmx_get_shadow_gs_base(struct vcpu *v)
+{
+#ifdef __x86_64__
+ return v->arch.hvm_vmx.shadow_gs;
+#else
+ return 0;
+#endif
+}
+
static int vmx_set_guest_pat(struct vcpu *v, u64 gpat)
{
if ( !cpu_has_vmx_pat || !paging_mode_hap(v->domain) )
@@ -1522,6 +1531,7 @@ static struct hvm_function_table __read_
.guest_x86_mode = vmx_guest_x86_mode,
.get_segment_register = vmx_get_segment_register,
.set_segment_register = vmx_set_segment_register,
+ .get_shadow_gs_base = vmx_get_shadow_gs_base,
.update_host_cr3 = vmx_update_host_cr3,
.update_guest_cr = vmx_update_guest_cr,
.update_guest_efer = vmx_update_guest_efer,
diff -r 6ef297a3761f -r be41f3b599d9 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h Mon Apr 23 15:16:34 2012 -0700
+++ b/xen/include/asm-x86/hvm/hvm.h Wed Apr 25 11:35:29 2012 -0700
@@ -106,6 +106,7 @@ struct hvm_function_table {
struct segment_register *reg);
void (*set_segment_register)(struct vcpu *v, enum x86_segment seg,
struct segment_register *reg);
+ unsigned long (*get_shadow_gs_base)(struct vcpu *v);

/*
* Re-set the value of CR3 that Xen runs on when handling VM exits.
@@ -305,6 +306,11 @@ hvm_set_segment_register(struct vcpu *v,
hvm_funcs.set_segment_register(v, seg, reg);
}

+static inline unsigned long hvm_get_shadow_gs_base(struct vcpu *v)
+{
+ return hvm_funcs.get_shadow_gs_base(v);
+}
+
#define is_viridian_domain(_d) \
(is_hvm_domain(_d) && ((_d)->arch.hvm_domain.params[HVM_PARAM_VIRIDIAN]))


_______________________________________________
Xen-devel mailing list
Xen-devel [at] lists
http://lists.xen.org/xen-devel

Xen devel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.