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] (no subject)

# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 0afdf20b3efae5b7858f8378f8171159e891b068
# Parent  d61fc1f33954b70e61fc4b086aed50f499fcf8b9
# Parent  7fd7f276bb38f08984fda45ef20ea8a085b482cd
Merged.
---
 linux-2.6-xen-sparse/drivers/xen/netback/netback.c     |    1 
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c |    5 
 linux-2.6-xen-sparse/scripts/Makefile.xen              |    6 
 tools/ioemu/configure                                  |    2 
 tools/python/xen/xend/XendBootloader.py                |   10 +
 tools/python/xen/xend/XendDomainInfo.py                |    3 
 tools/python/xen/xend/server/pciif.py                  |    2 
 tools/python/xen/xm/create.py                          |   14 +
 xen/arch/x86/domain.c                                  |    3 
 xen/arch/x86/hvm/svm/svm.c                             |    6 
 xen/arch/x86/hvm/vmx/io.c                              |   23 ++-
 xen/arch/x86/hvm/vmx/vmx.c                             |  120 ++++++++---------
 xen/arch/x86/irq.c                                     |    1 
 xen/arch/x86/smp.c                                     |    8 -
 xen/arch/x86/traps.c                                   |    2 
 xen/include/asm-x86/hvm/vmx/vmcs.h                     |    1 
 xen/include/asm-x86/hvm/vmx/vmx.h                      |    1 
 17 files changed, 122 insertions(+), 86 deletions(-)

diff -r d61fc1f33954 -r 0afdf20b3efa 
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Fri May 05 
18:36:12 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Fri May 05 
18:36:26 2006 +0100
@@ -659,6 +659,7 @@ static void net_tx_action(unsigned long 
 
                skb->data_len  = txreq.size - data_len;
                skb->len      += skb->data_len;
+               skb->truesize += skb->data_len;
 
                skb->dev      = netif->dev;
                skb->protocol = eth_type_trans(skb, skb->dev);
diff -r d61fc1f33954 -r 0afdf20b3efa 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Fri May 05 
18:36:12 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c    Fri May 05 
18:36:26 2006 +0100
@@ -1069,6 +1069,11 @@ static int __init wait_for_devices(void)
 {
        unsigned long timeout = jiffies + 10*HZ;
 
+       if (xen_init() < 0) {
+               DPRINTK("failed");
+               return -ENODEV;
+       }
+
        while (time_before(jiffies, timeout)) {
                if (all_devices_ready())
                        return 0;
diff -r d61fc1f33954 -r 0afdf20b3efa linux-2.6-xen-sparse/scripts/Makefile.xen
--- a/linux-2.6-xen-sparse/scripts/Makefile.xen Fri May 05 18:36:12 2006 +0100
+++ b/linux-2.6-xen-sparse/scripts/Makefile.xen Fri May 05 18:36:26 2006 +0100
@@ -2,9 +2,9 @@
 # cherrypickxen($1 = allobj)
 cherrypickxen = $(foreach var, $(1), \
                $(shell o=$(var); \
-                       c=$${o/%.o/-xen.c}; \
-                       s=$${o/%.o/-xen.S}; \
-                       oxen=$${o/%.o/-xen.o}; \
+                       c=$${o%.o}-xen.c; \
+                       s=$${o%.o}-xen.S; \
+                       oxen=$${o%.o}-xen.o; \
                        [ -f $(srctree)/$(src)/$${c} ] || \
                           [ -f $(srctree)/$(src)/$${s} ] \
                                && echo $$oxen \
diff -r d61fc1f33954 -r 0afdf20b3efa tools/ioemu/configure
--- a/tools/ioemu/configure     Fri May 05 18:36:12 2006 +0100
+++ b/tools/ioemu/configure     Fri May 05 18:36:26 2006 +0100
@@ -230,7 +230,7 @@ fi
 
 if test -z "$vnc"; then
 
-if libvncserver-config --version >& /dev/null; then
+if libvncserver-config --version > /dev/null 2>&1; then
     vnc=yes
 else
     vnc=no
diff -r d61fc1f33954 -r 0afdf20b3efa tools/python/xen/xend/XendBootloader.py
--- a/tools/python/xen/xend/XendBootloader.py   Fri May 05 18:36:12 2006 +0100
+++ b/tools/python/xen/xend/XendBootloader.py   Fri May 05 18:36:26 2006 +0100
@@ -19,7 +19,7 @@ from XendLogging import log
 from XendLogging import log
 from XendError import VmError
 
-def bootloader(blexec, disk, quiet = 0, blargs = None):
+def bootloader(blexec, disk, quiet = 0, blargs = None, imgcfg = None):
     """Run the boot loader executable on the given disk and return a
     config image.
     @param blexec  Binary to use as the boot loader
@@ -86,4 +86,10 @@ def bootloader(blexec, disk, quiet = 0, 
     pin = sxp.Parser()
     pin.input(ret)
     pin.input_eof()
-    return pin.val
+    blcfg = pin.val
+
+    if imgcfg is None:
+        return blcfg
+    else:
+        c = sxp.merge(blcfg, imgcfg)
+        return c
diff -r d61fc1f33954 -r 0afdf20b3efa tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri May 05 18:36:12 2006 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri May 05 18:36:26 2006 +0100
@@ -1633,7 +1633,8 @@ class XendDomainInfo:
                 continue
             fn = blkdev_uname_to_file(disk)
             blcfg = bootloader(self.info['bootloader'], fn, 1,
-                               self.info['bootloader_args'])
+                               self.info['bootloader_args'],
+                               self.info['image'])
             break
         if blcfg is None:
             msg = "Had a bootloader specified, but can't find disk"
diff -r d61fc1f33954 -r 0afdf20b3efa tools/python/xen/xend/server/pciif.py
--- a/tools/python/xen/xend/server/pciif.py     Fri May 05 18:36:12 2006 +0100
+++ b/tools/python/xen/xend/server/pciif.py     Fri May 05 18:36:26 2006 +0100
@@ -94,7 +94,7 @@ class PciController(DevController):
 
         else:
             # Xen 2.0 configuration compatibility
-            domain = get_param(dev_config, 'domain', 0)
+            domain = get_param(config, 'domain', 0)
             bus  = get_param(config, 'bus')
             slot = get_param(config, 'dev')
             func = get_param(config, 'func')
diff -r d61fc1f33954 -r 0afdf20b3efa tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Fri May 05 18:36:12 2006 +0100
+++ b/tools/python/xen/xm/create.py     Fri May 05 18:36:26 2006 +0100
@@ -448,8 +448,11 @@ def configure_image(vals):
 def configure_image(vals):
     """Create the image config.
     """
+    if not vals.builder:
+        return None
     config_image = [ vals.builder ]
-    config_image.append([ 'kernel', os.path.abspath(vals.kernel) ])
+    if vals.kernel:
+        config_image.append([ 'kernel', os.path.abspath(vals.kernel) ])
     if vals.ramdisk:
         config_image.append([ 'ramdisk', os.path.abspath(vals.ramdisk) ])
     if vals.cmdline_ip:
@@ -616,7 +619,7 @@ def configure_hvm(config_image, vals):
         if (vals.__dict__[a]):
             config_image.append([a, vals.__dict__[a]])
 
-def run_bootloader(vals):
+def run_bootloader(vals, config_image):
     if not os.access(vals.bootloader, os.X_OK):
         err("Bootloader isn't executable")
     if len(vals.disk) < 1:
@@ -630,7 +633,7 @@ def run_bootloader(vals):
         vals.bootargs = "--entry=%s" %(vals.bootentry,)
 
     return bootloader(vals.bootloader, file, not vals.console_autoconnect,
-                      vals.bootargs)
+                      vals.bootargs, config_image)
 
 def make_config(vals):
     """Create the domain configuration.
@@ -662,13 +665,12 @@ def make_config(vals):
     if vals.tpmif:
         config.append(['backend', ['tpmif']])
 
+    config_image = configure_image(vals)
     if vals.bootloader:
-        config_image = run_bootloader(vals)
+        config_image = run_bootloader(vals, config_image)
         config.append(['bootloader', vals.bootloader])
         if vals.bootargs:
             config.append(['bootloader_args'], vals.bootargs)
-    else:
-        config_image = configure_image(vals)
     config.append(['image', config_image])
 
     config_devs = []
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/domain.c     Fri May 05 18:36:26 2006 +0100
@@ -753,7 +753,10 @@ int __sync_lazy_execstate(void)
     switch_required = (this_cpu(curr_vcpu) != current);
 
     if ( switch_required )
+    {
+        ASSERT(current == idle_vcpu[smp_processor_id()]);
         __context_switch();
+    }
 
     local_irq_restore(flags);
 
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c        Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/hvm/svm/svm.c        Fri May 05 18:36:26 2006 +0100
@@ -2821,11 +2821,7 @@ asmlinkage void svm_load_cr2(void)
     struct vcpu *v = current;
 
     local_irq_disable();
-#ifdef __i386__
-    asm volatile("movl %0,%%cr2": :"r" (v->arch.hvm_svm.cpu_cr2));
-#else
-    asm volatile("movq %0,%%cr2": :"r" (v->arch.hvm_svm.cpu_cr2));
-#endif
+    asm volatile("mov %0,%%cr2": :"r" (v->arch.hvm_svm.cpu_cr2));
 }
 
 asmlinkage void svm_asid(void)
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/hvm/vmx/io.c
--- a/xen/arch/x86/hvm/vmx/io.c Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/hvm/vmx/io.c Fri May 05 18:36:26 2006 +0100
@@ -166,20 +166,26 @@ asmlinkage void vmx_intr_assist(void)
     }
 
     has_ext_irq = cpu_has_pending_irq(v);
+
+    if (unlikely(v->arch.hvm_vmx.vector_injected)) {
+        v->arch.hvm_vmx.vector_injected=0;
+        if (unlikely(has_ext_irq)) enable_irq_window(v);
+        return;
+    }
+
     __vmread(IDT_VECTORING_INFO_FIELD, &idtv_info_field);
-    if (idtv_info_field & INTR_INFO_VALID_MASK) {
+    if (unlikely(idtv_info_field & INTR_INFO_VALID_MASK)) {
         __vmwrite(VM_ENTRY_INTR_INFO_FIELD, idtv_info_field);
 
         __vmread(VM_EXIT_INSTRUCTION_LEN, &inst_len);
-        if (inst_len >= 1 && inst_len <= 15)
-            __vmwrite(VM_ENTRY_INSTRUCTION_LEN, inst_len);
-
-        if (idtv_info_field & 0x800) { /* valid error code */
+        __vmwrite(VM_ENTRY_INSTRUCTION_LEN, inst_len);
+
+        if (unlikely(idtv_info_field & 0x800)) { /* valid error code */
             unsigned long error_code;
             __vmread(IDT_VECTORING_ERROR_CODE, &error_code);
             __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, error_code);
         }
-        if ( has_ext_irq )
+        if (unlikely(has_ext_irq))
             enable_irq_window(v);
 
         HVM_DBG_LOG(DBG_LEVEL_1, "idtv_info_field=%x", idtv_info_field);
@@ -187,8 +193,9 @@ asmlinkage void vmx_intr_assist(void)
         return;
     }
 
-    if ( !has_ext_irq ) return;
-    if ( is_interruptibility_state() ) {    /* pre-cleared for emulated 
instruction */
+    if (likely(!has_ext_irq)) return;
+
+    if (unlikely(is_interruptibility_state())) {    /* pre-cleared for 
emulated instruction */
         enable_irq_window(v);
         HVM_DBG_LOG(DBG_LEVEL_1, "interruptibility");
         return;
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Fri May 05 18:36:26 2006 +0100
@@ -893,6 +893,20 @@ static void vmx_vmexit_do_cpuid(struct c
 #define CASE_GET_REG_P(REG, reg)    \
     case REG_ ## REG: reg_p = (unsigned long *)&(regs->reg); break
 
+#ifdef __i386__
+#define CASE_EXTEND_GET_REG_P
+#else
+#define CASE_EXTEND_GET_REG_P       \
+    CASE_GET_REG_P(R8, r8);         \
+    CASE_GET_REG_P(R9, r9);         \
+    CASE_GET_REG_P(R10, r10);       \
+    CASE_GET_REG_P(R11, r11);       \
+    CASE_GET_REG_P(R12, r12);       \
+    CASE_GET_REG_P(R13, r13);       \
+    CASE_GET_REG_P(R14, r14);       \
+    CASE_GET_REG_P(R15, r15)
+#endif
+
 static void vmx_dr_access (unsigned long exit_qualification, struct 
cpu_user_regs *regs)
 {
     unsigned int reg;
@@ -908,14 +922,15 @@ static void vmx_dr_access (unsigned long
                 "vmx_dr_access : eip=%lx, reg=%d, exit_qualification = %lx",
                 eip, reg, exit_qualification);
 
-    switch(exit_qualification & DEBUG_REG_ACCESS_REG) {
-        CASE_GET_REG_P(EAX, eax);
-        CASE_GET_REG_P(ECX, ecx);
-        CASE_GET_REG_P(EDX, edx);
-        CASE_GET_REG_P(EBX, ebx);
-        CASE_GET_REG_P(EBP, ebp);
-        CASE_GET_REG_P(ESI, esi);
-        CASE_GET_REG_P(EDI, edi);
+    switch ( exit_qualification & DEBUG_REG_ACCESS_REG ) {
+    CASE_GET_REG_P(EAX, eax);
+    CASE_GET_REG_P(ECX, ecx);
+    CASE_GET_REG_P(EDX, edx);
+    CASE_GET_REG_P(EBX, ebx);
+    CASE_GET_REG_P(EBP, ebp);
+    CASE_GET_REG_P(ESI, esi);
+    CASE_GET_REG_P(EDI, edi);
+    CASE_EXTEND_GET_REG_P;
     case REG_ESP:
         break;
     default:
@@ -1525,28 +1540,29 @@ static int vmx_set_cr0(unsigned long val
     return 1;
 }
 
-#define CASE_GET_REG(REG, reg)  \
+#define CASE_SET_REG(REG, reg)      \
+    case REG_ ## REG: regs->reg = value; break
+#define CASE_GET_REG(REG, reg)      \
     case REG_ ## REG: value = regs->reg; break
 
-#define CASE_EXTEND_SET_REG \
-      CASE_EXTEND_REG(S)
-#define CASE_EXTEND_GET_REG \
-      CASE_EXTEND_REG(G)
+#define CASE_EXTEND_SET_REG         \
+    CASE_EXTEND_REG(S)
+#define CASE_EXTEND_GET_REG         \
+    CASE_EXTEND_REG(G)
 
 #ifdef __i386__
 #define CASE_EXTEND_REG(T)
 #else
-#define CASE_EXTEND_REG(T)    \
-    CASE_ ## T ## ET_REG(R8, r8); \
-    CASE_ ## T ## ET_REG(R9, r9); \
+#define CASE_EXTEND_REG(T)          \
+    CASE_ ## T ## ET_REG(R8, r8);   \
+    CASE_ ## T ## ET_REG(R9, r9);   \
     CASE_ ## T ## ET_REG(R10, r10); \
     CASE_ ## T ## ET_REG(R11, r11); \
     CASE_ ## T ## ET_REG(R12, r12); \
     CASE_ ## T ## ET_REG(R13, r13); \
     CASE_ ## T ## ET_REG(R14, r14); \
-    CASE_ ## T ## ET_REG(R15, r15);
+    CASE_ ## T ## ET_REG(R15, r15)
 #endif
-
 
 /*
  * Write to control registers
@@ -1557,31 +1573,28 @@ static int mov_to_cr(int gp, int cr, str
     unsigned long old_cr;
     struct vcpu *v = current;
 
-    switch (gp) {
-        CASE_GET_REG(EAX, eax);
-        CASE_GET_REG(ECX, ecx);
-        CASE_GET_REG(EDX, edx);
-        CASE_GET_REG(EBX, ebx);
-        CASE_GET_REG(EBP, ebp);
-        CASE_GET_REG(ESI, esi);
-        CASE_GET_REG(EDI, edi);
-        CASE_EXTEND_GET_REG
-            case REG_ESP:
-                __vmread(GUEST_RSP, &value);
+    switch ( gp ) {
+    CASE_GET_REG(EAX, eax);
+    CASE_GET_REG(ECX, ecx);
+    CASE_GET_REG(EDX, edx);
+    CASE_GET_REG(EBX, ebx);
+    CASE_GET_REG(EBP, ebp);
+    CASE_GET_REG(ESI, esi);
+    CASE_GET_REG(EDI, edi);
+    CASE_EXTEND_GET_REG;
+    case REG_ESP:
+        __vmread(GUEST_RSP, &value);
         break;
     default:
         printk("invalid gp: %d\n", gp);
         __hvm_bug(regs);
     }
 
-    HVM_DBG_LOG(DBG_LEVEL_1, "mov_to_cr: CR%d, value = %lx,", cr, value);
-    HVM_DBG_LOG(DBG_LEVEL_1, "current = %lx,", (unsigned long) current);
-
-    switch(cr) {
+    HVM_DBG_LOG(DBG_LEVEL_1, "CR%d, value = %lx", cr, value);
+
+    switch ( cr ) {
     case 0:
-    {
         return vmx_set_cr0(value);
-    }
     case 3:
     {
         unsigned long old_base_mfn, mfn;
@@ -1753,11 +1766,6 @@ static int mov_to_cr(int gp, int cr, str
     return 1;
 }
 
-#define CASE_SET_REG(REG, reg)      \
-    case REG_ ## REG:       \
-    regs->reg = value;      \
-    break
-
 /*
  * Read from control registers. CR0 and CR4 are read from the shadow.
  */
@@ -1766,22 +1774,22 @@ static void mov_from_cr(int cr, int gp, 
     unsigned long value;
     struct vcpu *v = current;
 
-    if (cr != 3)
+    if ( cr != 3 )
         __hvm_bug(regs);
 
     value = (unsigned long) v->arch.hvm_vmx.cpu_cr3;
 
-    switch (gp) {
-        CASE_SET_REG(EAX, eax);
-        CASE_SET_REG(ECX, ecx);
-        CASE_SET_REG(EDX, edx);
-        CASE_SET_REG(EBX, ebx);
-        CASE_SET_REG(EBP, ebp);
-        CASE_SET_REG(ESI, esi);
-        CASE_SET_REG(EDI, edi);
-        CASE_EXTEND_SET_REG
-            case REG_ESP:
-                __vmwrite(GUEST_RSP, value);
+    switch ( gp ) {
+    CASE_SET_REG(EAX, eax);
+    CASE_SET_REG(ECX, ecx);
+    CASE_SET_REG(EDX, edx);
+    CASE_SET_REG(EBX, ebx);
+    CASE_SET_REG(EBP, ebp);
+    CASE_SET_REG(ESI, esi);
+    CASE_SET_REG(EDI, edi);
+    CASE_EXTEND_SET_REG;
+    case REG_ESP:
+        __vmwrite(GUEST_RSP, value);
         regs->esp = value;
         break;
     default:
@@ -1789,7 +1797,7 @@ static void mov_from_cr(int cr, int gp, 
         __hvm_bug(regs);
     }
 
-    HVM_DBG_LOG(DBG_LEVEL_VMMU, "mov_from_cr: CR%d, value = %lx,", cr, value);
+    HVM_DBG_LOG(DBG_LEVEL_VMMU, "CR%d, value = %lx", cr, value);
 }
 
 static int vmx_cr_access(unsigned long exit_qualification, struct 
cpu_user_regs *regs)
@@ -2284,11 +2292,7 @@ asmlinkage void vmx_load_cr2(void)
     struct vcpu *v = current;
 
     local_irq_disable();
-#ifdef __i386__
-    asm volatile("movl %0,%%cr2": :"r" (v->arch.hvm_vmx.cpu_cr2));
-#else
-    asm volatile("movq %0,%%cr2": :"r" (v->arch.hvm_vmx.cpu_cr2));
-#endif
+    asm volatile("mov %0,%%cr2": :"r" (v->arch.hvm_vmx.cpu_cr2));
 }
 
 asmlinkage void vmx_trace_vmentry (void)
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c        Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/irq.c        Fri May 05 18:36:26 2006 +0100
@@ -318,6 +318,7 @@ static void __pirq_guest_eoi(struct doma
     {
         ASSERT(cpus_empty(action->cpu_eoi_map));
         desc->handler->end(irq_to_vector(irq));
+        spin_unlock_irq(&desc->lock);
         return;
     }
 
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/smp.c
--- a/xen/arch/x86/smp.c        Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/smp.c        Fri May 05 18:36:26 2006 +0100
@@ -169,6 +169,7 @@ fastcall void smp_invalidate_interrupt(v
 {
     ack_APIC_irq();
     perfc_incrc(ipis);
+    irq_enter();
     if ( !__sync_lazy_execstate() )
     {
         if ( flush_va == FLUSHVA_ALL )
@@ -177,6 +178,7 @@ fastcall void smp_invalidate_interrupt(v
             local_flush_tlb_one(flush_va);
     }
     cpu_clear(smp_processor_id(), flush_cpumask);
+    irq_exit();
 }
 
 void __flush_tlb_mask(cpumask_t mask, unsigned long va)
@@ -335,6 +337,8 @@ fastcall void smp_call_function_interrup
     if ( !cpu_isset(smp_processor_id(), call_data->selected) )
         return;
 
+    irq_enter();
+
     if ( call_data->wait )
     {
         (*func)(info);
@@ -347,4 +351,6 @@ fastcall void smp_call_function_interrup
         atomic_inc(&call_data->started);
         (*func)(info);
     }
-}
+
+    irq_exit();
+}
diff -r d61fc1f33954 -r 0afdf20b3efa xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c      Fri May 05 18:36:12 2006 +0100
+++ b/xen/arch/x86/traps.c      Fri May 05 18:36:26 2006 +0100
@@ -674,6 +674,8 @@ asmlinkage int do_page_fault(struct cpu_
     unsigned long addr, fixup;
     int rc;
 
+    ASSERT(!in_irq());
+
     __asm__ __volatile__ ("mov %%cr2,%0" : "=r" (addr) : );
 
     DEBUGGER_trap_entry(TRAP_page_fault, regs);
diff -r d61fc1f33954 -r 0afdf20b3efa xen/include/asm-x86/hvm/vmx/vmcs.h
--- a/xen/include/asm-x86/hvm/vmx/vmcs.h        Fri May 05 18:36:12 2006 +0100
+++ b/xen/include/asm-x86/hvm/vmx/vmcs.h        Fri May 05 18:36:26 2006 +0100
@@ -68,6 +68,7 @@ struct arch_vmx_struct {
     struct vmcs_struct      *vmcs;  /* VMCS pointer in virtual. */
     unsigned int            launch_cpu; /* VMCS is valid on this CPU. */
     u32                     exec_control; /* cache of cpu execution control */
+    u32                     vector_injected; /* if there is vector installed 
in the INTR_INFO_FIELD */
     unsigned long           flags;  /* VMCS flags */
     unsigned long           cpu_cr0; /* copy of guest CR0 */
     unsigned long           cpu_shadow_cr0; /* copy of guest read shadow CR0 */
diff -r d61fc1f33954 -r 0afdf20b3efa xen/include/asm-x86/hvm/vmx/vmx.h
--- a/xen/include/asm-x86/hvm/vmx/vmx.h Fri May 05 18:36:12 2006 +0100
+++ b/xen/include/asm-x86/hvm/vmx/vmx.h Fri May 05 18:36:26 2006 +0100
@@ -444,6 +444,7 @@ static inline int __vmx_inject_exception
 
 static inline int vmx_inject_exception(struct vcpu *v, int trap, int 
error_code)
 {
+    v->arch.hvm_vmx.vector_injected = 1;
     return __vmx_inject_exception(v, trap, INTR_TYPE_EXCEPTION, error_code);
 }
 

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

<Prev in Thread] Current Thread [Next in Thread>