WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] hvm: Clean up initialisation of hvm_funcs

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] hvm: Clean up initialisation of hvm_funcs.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 23 Feb 2007 09:50:37 -0800
Delivery-date: Fri, 23 Feb 2007 09:51:47 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1172230345 0
# Node ID cdc765772f692f2e8cf53cdada703adac24e5af0
# Parent  38fb6c392decc247b7c17cf1eb79749092e3cf7a
hvm: Clean up initialisation of hvm_funcs.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/hvm/hvm.c            |   11 +++---
 xen/arch/x86/hvm/svm/svm.c        |   63 +++++++++++++++--------------------
 xen/arch/x86/hvm/vmx/vmx.c        |   67 ++++++++++++++------------------------
 xen/include/asm-x86/hvm/hvm.h     |    7 +--
 xen/include/asm-x86/hvm/support.h |    2 -
 5 files changed, 62 insertions(+), 88 deletions(-)

diff -r 38fb6c392dec -r cdc765772f69 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c    Fri Feb 23 10:47:55 2007 +0000
+++ b/xen/arch/x86/hvm/hvm.c    Fri Feb 23 11:32:25 2007 +0000
@@ -49,18 +49,18 @@
 #include <public/version.h>
 #include <public/memory.h>
 
-int hvm_enabled;
-
-unsigned int opt_hvm_debug_level;
+int hvm_enabled __read_mostly;
+
+unsigned int opt_hvm_debug_level __read_mostly;
 integer_param("hvm_debug", opt_hvm_debug_level);
 
-struct hvm_function_table hvm_funcs;
+struct hvm_function_table hvm_funcs __read_mostly;
 
 /* I/O permission bitmap is globally shared by all HVM guests. */
 char __attribute__ ((__section__ (".bss.page_aligned")))
     hvm_io_bitmap[3*PAGE_SIZE];
 
-void hvm_enable(void)
+void hvm_enable(struct hvm_function_table *fns)
 {
     if ( hvm_enabled )
         return;
@@ -72,6 +72,7 @@ void hvm_enable(void)
     memset(hvm_io_bitmap, ~0, sizeof(hvm_io_bitmap));
     clear_bit(0x80, hvm_io_bitmap);
 
+    hvm_funcs   = *fns;
     hvm_enabled = 1;
 }
 
diff -r 38fb6c392dec -r cdc765772f69 xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Fri Feb 23 10:47:55 2007 +0000
+++ b/xen/arch/x86/hvm/svm/svm.c        Fri Feb 23 11:32:25 2007 +0000
@@ -988,6 +988,32 @@ static int svm_event_injection_faulted(s
     return vmcb->exitintinfo.fields.v;
 }
 
+static struct hvm_function_table svm_function_table = {
+    .disable              = stop_svm,
+    .vcpu_initialise      = svm_vcpu_initialise,
+    .vcpu_destroy         = svm_vcpu_destroy,
+    .store_cpu_guest_regs = svm_store_cpu_guest_regs,
+    .load_cpu_guest_regs  = svm_load_cpu_guest_regs,
+    .save_cpu_ctxt        = svm_save_vmcb_ctxt,
+    .load_cpu_ctxt        = svm_load_vmcb_ctxt,
+    .paging_enabled       = svm_paging_enabled,
+    .long_mode_enabled    = svm_long_mode_enabled,
+    .pae_enabled          = svm_pae_enabled,
+    .guest_x86_mode       = svm_guest_x86_mode,
+    .get_guest_ctrl_reg   = svm_get_ctrl_reg,
+    .get_segment_base     = svm_get_segment_base,
+    .get_segment_register = svm_get_segment_register,
+    .update_host_cr3      = svm_update_host_cr3,
+    .update_guest_cr3     = svm_update_guest_cr3,
+    .update_vtpr          = svm_update_vtpr,
+    .stts                 = svm_stts,
+    .set_tsc_offset       = svm_set_tsc_offset,
+    .inject_exception     = svm_hvm_inject_exception,
+    .init_ap_context      = svm_init_ap_context,
+    .init_hypercall_page  = svm_init_hypercall_page,
+    .event_injection_faulted = svm_event_injection_faulted
+};
+
 int start_svm(void)
 {
     u32 eax, ecx, edx;
@@ -1031,42 +1057,7 @@ int start_svm(void)
     if (cpu == 0)
         setup_vmcb_dump();
 
-    /* Setup HVM interfaces */
-    hvm_funcs.disable = stop_svm;
-
-    hvm_funcs.vcpu_initialise = svm_vcpu_initialise;
-    hvm_funcs.vcpu_destroy    = svm_vcpu_destroy;
-
-    hvm_funcs.store_cpu_guest_regs = svm_store_cpu_guest_regs;
-    hvm_funcs.load_cpu_guest_regs = svm_load_cpu_guest_regs;
-
-    hvm_funcs.save_cpu_ctxt = svm_save_vmcb_ctxt;
-    hvm_funcs.load_cpu_ctxt = svm_load_vmcb_ctxt;
-
-    hvm_funcs.paging_enabled = svm_paging_enabled;
-    hvm_funcs.long_mode_enabled = svm_long_mode_enabled;
-    hvm_funcs.pae_enabled = svm_pae_enabled;
-    hvm_funcs.guest_x86_mode = svm_guest_x86_mode;
-    hvm_funcs.get_guest_ctrl_reg = svm_get_ctrl_reg;
-    hvm_funcs.get_segment_base = svm_get_segment_base;
-    hvm_funcs.get_segment_register = svm_get_segment_register;
-
-    hvm_funcs.update_host_cr3 = svm_update_host_cr3;
-    hvm_funcs.update_guest_cr3 = svm_update_guest_cr3;
-    
-    hvm_funcs.update_vtpr = svm_update_vtpr;
-
-    hvm_funcs.stts = svm_stts;
-    hvm_funcs.set_tsc_offset = svm_set_tsc_offset;
-
-    hvm_funcs.inject_exception = svm_hvm_inject_exception;
-
-    hvm_funcs.init_ap_context = svm_init_ap_context;
-    hvm_funcs.init_hypercall_page = svm_init_hypercall_page;
-
-    hvm_funcs.event_injection_faulted = svm_event_injection_faulted;
-
-    hvm_enable();
+    hvm_enable(&svm_function_table);
 
     return 1;
 }
diff -r 38fb6c392dec -r cdc765772f69 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Fri Feb 23 10:47:55 2007 +0000
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Fri Feb 23 11:32:25 2007 +0000
@@ -1000,44 +1000,31 @@ static int vmx_event_injection_faulted(s
     return (idtv_info_field & INTR_INFO_VALID_MASK);
 }
 
-/* Setup HVM interfaces */
-static void vmx_setup_hvm_funcs(void)
-{
-    hvm_funcs.disable = stop_vmx;
-
-    hvm_funcs.vcpu_initialise = vmx_vcpu_initialise;
-    hvm_funcs.vcpu_destroy    = vmx_vcpu_destroy;
-
-    hvm_funcs.store_cpu_guest_regs = vmx_store_cpu_guest_regs;
-    hvm_funcs.load_cpu_guest_regs = vmx_load_cpu_guest_regs;
-
-    hvm_funcs.save_cpu_ctxt = vmx_save_vmcs_ctxt;
-    hvm_funcs.load_cpu_ctxt = vmx_load_vmcs_ctxt;
-
-    hvm_funcs.paging_enabled = vmx_paging_enabled;
-    hvm_funcs.long_mode_enabled = vmx_long_mode_enabled;
-    hvm_funcs.pae_enabled = vmx_pae_enabled;
-    hvm_funcs.guest_x86_mode = vmx_guest_x86_mode;
-    hvm_funcs.get_guest_ctrl_reg = vmx_get_ctrl_reg;
-    hvm_funcs.get_segment_base = vmx_get_segment_base;
-    hvm_funcs.get_segment_register = vmx_get_segment_register;
-
-    hvm_funcs.update_host_cr3 = vmx_update_host_cr3;
-    hvm_funcs.update_guest_cr3 = vmx_update_guest_cr3;
-
-    hvm_funcs.update_vtpr = vmx_update_vtpr;
-
-    hvm_funcs.stts = vmx_stts;
-    hvm_funcs.set_tsc_offset = vmx_set_tsc_offset;
-
-    hvm_funcs.inject_exception = vmx_inject_exception;
-
-    hvm_funcs.init_ap_context = vmx_init_ap_context;
-
-    hvm_funcs.init_hypercall_page = vmx_init_hypercall_page;
-
-    hvm_funcs.event_injection_faulted = vmx_event_injection_faulted;
-}
+static struct hvm_function_table vmx_function_table = {
+    .disable              = stop_vmx,
+    .vcpu_initialise      = vmx_vcpu_initialise,
+    .vcpu_destroy         = vmx_vcpu_destroy,
+    .store_cpu_guest_regs = vmx_store_cpu_guest_regs,
+    .load_cpu_guest_regs  = vmx_load_cpu_guest_regs,
+    .save_cpu_ctxt        = vmx_save_vmcs_ctxt,
+    .load_cpu_ctxt        = vmx_load_vmcs_ctxt,
+    .paging_enabled       = vmx_paging_enabled,
+    .long_mode_enabled    = vmx_long_mode_enabled,
+    .pae_enabled          = vmx_pae_enabled,
+    .guest_x86_mode       = vmx_guest_x86_mode,
+    .get_guest_ctrl_reg   = vmx_get_ctrl_reg,
+    .get_segment_base     = vmx_get_segment_base,
+    .get_segment_register = vmx_get_segment_register,
+    .update_host_cr3      = vmx_update_host_cr3,
+    .update_guest_cr3     = vmx_update_guest_cr3,
+    .update_vtpr          = vmx_update_vtpr,
+    .stts                 = vmx_stts,
+    .set_tsc_offset       = vmx_set_tsc_offset,
+    .inject_exception     = vmx_inject_exception,
+    .init_ap_context      = vmx_init_ap_context,
+    .init_hypercall_page  = vmx_init_hypercall_page,
+    .event_injection_faulted = vmx_event_injection_faulted
+};
 
 int start_vmx(void)
 {
@@ -1095,9 +1082,7 @@ int start_vmx(void)
 
     vmx_save_host_msrs();
 
-    vmx_setup_hvm_funcs();
-
-    hvm_enable();
+    hvm_enable(&vmx_function_table);
 
     return 1;
 }
diff -r 38fb6c392dec -r cdc765772f69 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h     Fri Feb 23 10:47:55 2007 +0000
+++ b/xen/include/asm-x86/hvm/hvm.h     Fri Feb 23 11:32:25 2007 +0000
@@ -146,8 +146,7 @@ static inline void
 static inline void
 hvm_disable(void)
 {
-    if ( hvm_funcs.disable )
-        hvm_funcs.disable();
+    hvm_funcs.disable();
 }
 
 int hvm_domain_initialise(struct domain *d);
@@ -225,9 +224,7 @@ static inline unsigned long
 static inline unsigned long
 hvm_get_guest_ctrl_reg(struct vcpu *v, unsigned int num)
 {
-    if ( hvm_funcs.get_guest_ctrl_reg )
-        return hvm_funcs.get_guest_ctrl_reg(v, num);
-    return 0;                   /* force to fail */
+    return hvm_funcs.get_guest_ctrl_reg(v, num);
 }
 
 static inline unsigned long
diff -r 38fb6c392dec -r cdc765772f69 xen/include/asm-x86/hvm/support.h
--- a/xen/include/asm-x86/hvm/support.h Fri Feb 23 10:47:55 2007 +0000
+++ b/xen/include/asm-x86/hvm/support.h Fri Feb 23 11:32:25 2007 +0000
@@ -260,7 +260,7 @@ extern char hvm_io_bitmap[];
 extern char hvm_io_bitmap[];
 extern int hvm_enabled;
 
-void hvm_enable(void);
+void hvm_enable(struct hvm_function_table *);
 
 int hvm_copy_to_guest_phys(paddr_t paddr, void *buf, int size);
 int hvm_copy_from_guest_phys(void *buf, paddr_t paddr, int size);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] hvm: Clean up initialisation of hvm_funcs., Xen patchbot-unstable <=