ia64/xen-unstable

changeset 3856:0fe3bb5ed3aa

bitkeeper revision 1.1205.1.1 (42150936fR3KSFT51o4AFy0i4Fg7Vg)

Merge burn.cl.cam.ac.uk:/local/scratch-1/maf46/xen-unstable.bk/tmp
into burn.cl.cam.ac.uk:/local/scratch-1/maf46/xen-unstable.bk
author maf46@burn.cl.cam.ac.uk
date Thu Feb 17 21:14:30 2005 +0000 (2005-02-17)
parents 73f9c9685211 f4a89c40649f
children 5b63436f25fe
files BitKeeper/etc/logging_ok xen/arch/x86/mm.c xen/arch/x86/shadow.c xen/arch/x86/vmx.c xen/arch/x86/vmx_intercept.c xen/arch/x86/vmx_io.c xen/arch/x86/vmx_vmcs.c
line diff
     1.1 --- a/BitKeeper/etc/logging_ok	Mon Feb 14 13:05:43 2005 +0000
     1.2 +++ b/BitKeeper/etc/logging_ok	Thu Feb 17 21:14:30 2005 +0000
     1.3 @@ -40,6 +40,7 @@ kaf24@striker.cl.cam.ac.uk
     1.4  kaf24@viper.(none)
     1.5  laudney@eclipse.(none)
     1.6  lynx@idefix.cl.cam.ac.uk
     1.7 +maf46@burn.cl.cam.ac.uk
     1.8  mafetter@fleming.research
     1.9  mark@maw48.kings.cam.ac.uk
    1.10  maw48@labyrinth.cl.cam.ac.uk
     2.1 --- a/xen/arch/x86/mm.c	Mon Feb 14 13:05:43 2005 +0000
     2.2 +++ b/xen/arch/x86/mm.c	Thu Feb 17 21:14:30 2005 +0000
     2.3 @@ -2974,4 +2974,4 @@ void audit_domains_key(unsigned char key
     2.4      audit_domains();
     2.5  }
     2.6  
     2.7 -#endif
     2.8 +#endif /* NDEBUG */
     3.1 --- a/xen/arch/x86/shadow.c	Mon Feb 14 13:05:43 2005 +0000
     3.2 +++ b/xen/arch/x86/shadow.c	Thu Feb 17 21:14:30 2005 +0000
     3.3 @@ -260,7 +260,7 @@ static int shadow_mode_table_op(
     3.4      ASSERT(spin_is_locked(&d->arch.shadow_lock));
     3.5  
     3.6      SH_VLOG("shadow mode table op %p %p count %d",
     3.7 -            pagetable_val(d->exec_domain[0]->arch.pagetable),    /* XXX SMP */
     3.8 +            pagetable_val(d->exec_domain[0]->arch.guest_table),  /* XXX SMP */
     3.9              pagetable_val(d->exec_domain[0]->arch.shadow_table), /* XXX SMP */
    3.10              d->arch.shadow_page_count);
    3.11  
    3.12 @@ -546,7 +546,7 @@ static void shadow_map_l1_into_current_l
    3.13      if ( !(sl1ss & PSH_shadowed) )
    3.14      {
    3.15          /* This L1 is NOT already shadowed so we need to shadow it. */
    3.16 -        SH_VVLOG("4a: l1 not shadowed ( %p )", sl1pfn);
    3.17 +        SH_VVLOG("4a: l1 not shadowed ( %p )", sl1ss);
    3.18  
    3.19          sl1mfn_info = alloc_shadow_page(d);
    3.20          sl1mfn_info->u.inuse.type_info = PGT_l1_page_table;
    3.21 @@ -618,7 +618,7 @@ int shadow_fault(unsigned long va, long 
    3.22  
    3.23      SH_VVLOG("shadow_fault( va=%p, code=%ld )", va, error_code );
    3.24  
    3.25 -    check_pagetable(d, ed->arch.pagetable, "pre-sf");
    3.26 +    check_pagetable(d, ed->arch.guest_table, "pre-sf");
    3.27  
    3.28      /*
    3.29       * STEP 1. A fast-reject set of checks with no locking.
    3.30 @@ -708,7 +708,7 @@ int shadow_fault(unsigned long va, long 
    3.31  
    3.32      shadow_unlock(d);
    3.33  
    3.34 -    check_pagetable(d, ed->arch.pagetable, "post-sf");
    3.35 +    check_pagetable(d, ed->arch.guest_table, "post-sf");
    3.36      return EXCRET_fault_fixed;
    3.37  }
    3.38  
     4.1 --- a/xen/arch/x86/vmx.c	Mon Feb 14 13:05:43 2005 +0000
     4.2 +++ b/xen/arch/x86/vmx.c	Thu Feb 17 21:14:30 2005 +0000
     4.3 @@ -42,7 +42,7 @@
     4.4  #ifdef CONFIG_VMX
     4.5  
     4.6  int vmcs_size;
     4.7 -unsigned int opt_vmx_debug_level;
     4.8 +unsigned int opt_vmx_debug_level = 0;
     4.9  
    4.10  extern long evtchn_send(int lport);
    4.11  extern long do_block(void);
    4.12 @@ -114,16 +114,27 @@ static int vmx_do_page_fault(unsigned lo
    4.13      unsigned long eip;
    4.14      unsigned long gpa;
    4.15      int result;
    4.16 +    struct exec_domain *ed = current;
    4.17  
    4.18  #if VMX_DEBUG
    4.19      {
    4.20          __vmread(GUEST_EIP, &eip);
    4.21          VMX_DBG_LOG(DBG_LEVEL_VMMU, 
    4.22 -                "vmx_do_page_fault = 0x%lx, eip = %lx, erro_code = %lx\n", 
    4.23 +                "vmx_do_page_fault = 0x%lx, eip = %lx, erro_code = %lx",
    4.24                  va, eip, error_code);
    4.25      }
    4.26  #endif
    4.27  
    4.28 +    /*
    4.29 +     * If vpagetable is zero, then we are still emulating 1:1 page tables,
    4.30 +     * and we should have never gotten here.
    4.31 +     */
    4.32 +    if ( !ed->arch.vpagetable )
    4.33 +    {
    4.34 +        printk("vmx_do_page_fault while still running on 1:1 page table\n");
    4.35 +        return 0;
    4.36 +    }
    4.37 +
    4.38      gpa = gva_to_gpa(va);
    4.39      if (!gpa)
    4.40          return 0;
    4.41 @@ -146,11 +157,11 @@ static void vmx_do_general_protection_fa
    4.42      __vmread(VM_EXIT_INTR_ERROR_CODE, &error_code);
    4.43  
    4.44      VMX_DBG_LOG(DBG_LEVEL_1,
    4.45 -            "vmx_general_protection_fault: eip = %lx, erro_code = %lx\n",
    4.46 +            "vmx_general_protection_fault: eip = %lx, erro_code = %lx",
    4.47              eip, error_code);
    4.48  
    4.49      VMX_DBG_LOG(DBG_LEVEL_1,
    4.50 -            "eax=%lx, ebx=%lx, ecx=%lx, edx=%lx, esi=%lx, edi=%lx\n",
    4.51 +            "eax=%lx, ebx=%lx, ecx=%lx, edx=%lx, esi=%lx, edi=%lx",
    4.52              regs->eax, regs->ebx, regs->ecx, regs->edx, regs->esi, regs->edi);
    4.53  
    4.54      /* Reflect it back into the guest */
    4.55 @@ -171,7 +182,7 @@ static void vmx_vmexit_do_cpuid(unsigned
    4.56  
    4.57      VMX_DBG_LOG(DBG_LEVEL_1, 
    4.58                  "do_cpuid: (eax) %lx, (ebx) %lx, (ecx) %lx, (edx) %lx,"
    4.59 -                " (esi) %lx, (edi) %lx\n",
    4.60 +                " (esi) %lx, (edi) %lx",
    4.61                  regs->eax, regs->ebx, regs->ecx, regs->edx,
    4.62                  regs->esi, regs->edi);
    4.63  
    4.64 @@ -189,7 +200,7 @@ static void vmx_vmexit_do_cpuid(unsigned
    4.65      regs->edx = (unsigned long) edx;
    4.66  
    4.67      VMX_DBG_LOG(DBG_LEVEL_1, 
    4.68 -            "vmx_vmexit_do_cpuid: eip: %lx, input: %lx, out:eax=%x, ebx=%x, ecx=%x, edx=%x\n", 
    4.69 +            "vmx_vmexit_do_cpuid: eip: %lx, input: %lx, out:eax=%x, ebx=%x, ecx=%x, edx=%x",
    4.70              eip, input, eax, ebx, ecx, edx);
    4.71  
    4.72  }
    4.73 @@ -209,7 +220,7 @@ static void vmx_dr_access (unsigned long
    4.74      reg = exit_qualification & DEBUG_REG_ACCESS_NUM;
    4.75  
    4.76      VMX_DBG_LOG(DBG_LEVEL_1, 
    4.77 -                "vmx_dr_access : eip=%lx, reg=%d, exit_qualification = %lx\n",
    4.78 +                "vmx_dr_access : eip=%lx, reg=%d, exit_qualification = %lx",
    4.79                  eip, reg, exit_qualification);
    4.80  
    4.81      switch(exit_qualification & DEBUG_REG_ACCESS_REG) {
    4.82 @@ -259,7 +270,7 @@ static void vmx_vmexit_do_invlpg(unsigne
    4.83  
    4.84      __vmread(GUEST_EIP, &eip);
    4.85  
    4.86 -    VMX_DBG_LOG(DBG_LEVEL_VMMU, "vmx_vmexit_do_invlpg:eip=%p, va=%p\n",
    4.87 +    VMX_DBG_LOG(DBG_LEVEL_VMMU, "vmx_vmexit_do_invlpg:eip=%p, va=%p",
    4.88              eip, va);
    4.89  
    4.90      /*
    4.91 @@ -292,7 +303,7 @@ static void vmx_io_instruction(struct xe
    4.92      __vmread(GUEST_EIP, &eip);
    4.93  
    4.94      VMX_DBG_LOG(DBG_LEVEL_1, 
    4.95 -            "vmx_io_instruction: eip=%p, exit_qualification = %lx\n",
    4.96 +            "vmx_io_instruction: eip=%p, exit_qualification = %lx",
    4.97              eip, exit_qualification);
    4.98  
    4.99      if (test_bit(6, &exit_qualification))
   4.100 @@ -307,7 +318,7 @@ static void vmx_io_instruction(struct xe
   4.101  
   4.102      vio = (vcpu_iodata_t *) d->arch.arch_vmx.vmx_platform.shared_page_va;
   4.103      if (vio == 0) {
   4.104 -        VMX_DBG_LOG(DBG_LEVEL_1, "bad shared page: %lx\n", (unsigned long) vio);
   4.105 +        VMX_DBG_LOG(DBG_LEVEL_1, "bad shared page: %lx", (unsigned long) vio);
   4.106          domain_crash(); 
   4.107      }
   4.108      p = &vio->vp_ioreq;
   4.109 @@ -389,8 +400,8 @@ static void mov_to_cr(int gp, int cr, st
   4.110          __vmx_bug(regs);
   4.111      }
   4.112      
   4.113 -    VMX_DBG_LOG(DBG_LEVEL_1, "mov_to_cr: CR%d, value = %lx, \n", cr, value);
   4.114 -    VMX_DBG_LOG(DBG_LEVEL_1, "current = %lx, \n", (unsigned long) current);
   4.115 +    VMX_DBG_LOG(DBG_LEVEL_1, "mov_to_cr: CR%d, value = %lx,", cr, value);
   4.116 +    VMX_DBG_LOG(DBG_LEVEL_1, "current = %lx,", (unsigned long) current);
   4.117  
   4.118      switch(cr) {
   4.119      case 0: 
   4.120 @@ -416,7 +427,7 @@ static void mov_to_cr(int gp, int cr, st
   4.121              if (!(pfn = phys_to_machine_mapping(
   4.122                        d->arch.arch_vmx.cpu_cr3 >> PAGE_SHIFT))) 
   4.123              {
   4.124 -                VMX_DBG_LOG(DBG_LEVEL_VMMU, "Invalid CR3 value = %lx\n", 
   4.125 +                VMX_DBG_LOG(DBG_LEVEL_VMMU, "Invalid CR3 value = %lx", 
   4.126                          d->arch.arch_vmx.cpu_cr3);
   4.127                  domain_crash(); /* need to take a clean path */
   4.128              }
   4.129 @@ -436,14 +447,14 @@ static void mov_to_cr(int gp, int cr, st
   4.130              d->arch.guest_table = mk_pagetable(pfn << PAGE_SHIFT);
   4.131              update_pagetables(d);
   4.132  
   4.133 -            VMX_DBG_LOG(DBG_LEVEL_VMMU, "New arch.guest_table = %lx\n", 
   4.134 +            VMX_DBG_LOG(DBG_LEVEL_VMMU, "New arch.guest_table = %lx", 
   4.135                      (unsigned long) (pfn << PAGE_SHIFT));
   4.136  
   4.137              __vmwrite(GUEST_CR3, pagetable_val(d->arch.shadow_table));
   4.138              /* 
   4.139               * arch->shadow_table should hold the next CR3 for shadow
   4.140               */
   4.141 -            VMX_DBG_LOG(DBG_LEVEL_VMMU, "Update CR3 value = %lx, pfn = %lx\n", 
   4.142 +            VMX_DBG_LOG(DBG_LEVEL_VMMU, "Update CR3 value = %lx, pfn = %lx", 
   4.143                      d->arch.arch_vmx.cpu_cr3, pfn);
   4.144              /* undo the get_page done in the para virt case */
   4.145              put_page_and_type(&frame_table[old_base_pfn]);
   4.146 @@ -483,11 +494,11 @@ static void mov_to_cr(int gp, int cr, st
   4.147               * If different, make a shadow. Check if the PDBR is valid
   4.148               * first.
   4.149               */
   4.150 -            VMX_DBG_LOG(DBG_LEVEL_VMMU, "CR3 value = %lx\n", value);
   4.151 +            VMX_DBG_LOG(DBG_LEVEL_VMMU, "CR3 value = %lx", value);
   4.152              if ((value >> PAGE_SHIFT) > d->domain->max_pages)
   4.153              {
   4.154                  VMX_DBG_LOG(DBG_LEVEL_VMMU, 
   4.155 -                        "Invalid CR3 value=%lx\n", value);
   4.156 +                        "Invalid CR3 value=%lx", value);
   4.157                  domain_crash(); /* need to take a clean path */
   4.158              }
   4.159              pfn = phys_to_machine_mapping(value >> PAGE_SHIFT);
   4.160 @@ -498,7 +509,7 @@ static void mov_to_cr(int gp, int cr, st
   4.161               * arch.shadow_table should now hold the next CR3 for shadow
   4.162               */
   4.163              d->arch.arch_vmx.cpu_cr3 = value;
   4.164 -            VMX_DBG_LOG(DBG_LEVEL_VMMU, "Update CR3 value = %lx\n", 
   4.165 +            VMX_DBG_LOG(DBG_LEVEL_VMMU, "Update CR3 value = %lx",
   4.166                      value);
   4.167              __vmwrite(GUEST_CR3, pagetable_val(d->arch.shadow_table));
   4.168          }
   4.169 @@ -565,7 +576,7 @@ static void mov_from_cr(int cr, int gp, 
   4.170          __vmx_bug(regs);
   4.171      }
   4.172  
   4.173 -    VMX_DBG_LOG(DBG_LEVEL_VMMU, "mov_from_cr: CR%d, value = %lx, \n", cr, value);
   4.174 +    VMX_DBG_LOG(DBG_LEVEL_VMMU, "mov_from_cr: CR%d, value = %lx,", cr, value);
   4.175  }
   4.176  
   4.177  static void vmx_cr_access (unsigned long exit_qualification, struct xen_regs *regs)
   4.178 @@ -620,7 +631,7 @@ static inline void vmx_vmexit_do_hlt()
   4.179      unsigned long eip;
   4.180      __vmread(GUEST_EIP, &eip);
   4.181  #endif
   4.182 -    VMX_DBG_LOG(DBG_LEVEL_1, "vmx_vmexit_do_hlt:eip=%p\n", eip);
   4.183 +    VMX_DBG_LOG(DBG_LEVEL_1, "vmx_vmexit_do_hlt:eip=%p", eip);
   4.184      __enter_scheduler();
   4.185  }
   4.186  
   4.187 @@ -630,7 +641,7 @@ static inline void vmx_vmexit_do_mwait()
   4.188      unsigned long eip;
   4.189      __vmread(GUEST_EIP, &eip);
   4.190  #endif
   4.191 -    VMX_DBG_LOG(DBG_LEVEL_1, "vmx_vmexit_do_mwait:eip=%p\n", eip);
   4.192 +    VMX_DBG_LOG(DBG_LEVEL_1, "vmx_vmexit_do_mwait:eip=%p", eip);
   4.193      __enter_scheduler();
   4.194  }
   4.195  
   4.196 @@ -722,7 +733,7 @@ asmlinkage void vmx_vmexit_handler(struc
   4.197              __vmread(VM_EXIT_INTR_ERROR_CODE, &error_code);
   4.198              printk("#PG error code: %lx\n", error_code);
   4.199          }
   4.200 -        VMX_DBG_LOG(DBG_LEVEL_1, "idtv_info_field=%x\n", 
   4.201 +        VMX_DBG_LOG(DBG_LEVEL_1, "idtv_info_field=%x",
   4.202                  idtv_info_field);
   4.203      }
   4.204  
   4.205 @@ -730,7 +741,7 @@ asmlinkage void vmx_vmexit_handler(struc
   4.206      if (exit_reason != EXIT_REASON_EXTERNAL_INTERRUPT &&
   4.207          exit_reason != EXIT_REASON_VMCALL &&
   4.208          exit_reason != EXIT_REASON_IO_INSTRUCTION)
   4.209 -        VMX_DBG_LOG(DBG_LEVEL_0, "exit reason = %x\n", exit_reason);
   4.210 +        VMX_DBG_LOG(DBG_LEVEL_0, "exit reason = %x", exit_reason);
   4.211  
   4.212      if (exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) {
   4.213          domain_crash();         
   4.214 @@ -788,7 +799,7 @@ asmlinkage void vmx_vmexit_handler(struc
   4.215              __vmread(EXIT_QUALIFICATION, &va);
   4.216              __vmread(VM_EXIT_INTR_ERROR_CODE, &error_code);
   4.217              VMX_DBG_LOG(DBG_LEVEL_VMMU, 
   4.218 -                    "eax=%lx, ebx=%lx, ecx=%lx, edx=%lx, esi=%lx, edi=%lx\n",
   4.219 +                    "eax=%lx, ebx=%lx, ecx=%lx, edx=%lx, esi=%lx, edi=%lx",
   4.220                          regs.eax, regs.ebx, regs.ecx, regs.edx, regs.esi,
   4.221                          regs.edi);
   4.222              ed->arch.arch_vmx.vmx_platform.mpci.inst_decoder_regs = &regs;
   4.223 @@ -810,7 +821,8 @@ asmlinkage void vmx_vmexit_handler(struc
   4.224              break;
   4.225          }
   4.226          default:
   4.227 -            __vmx_bug(&regs);
   4.228 +            printk("unexpected VMexit for exception vector 0x%x\n", vector);
   4.229 +            //__vmx_bug(&regs);
   4.230              break;
   4.231          }
   4.232          break;
   4.233 @@ -881,7 +893,7 @@ asmlinkage void vmx_vmexit_handler(struc
   4.234          __get_instruction_length(inst_len);
   4.235          __vmread(EXIT_QUALIFICATION, &exit_qualification);
   4.236  
   4.237 -        VMX_DBG_LOG(DBG_LEVEL_1, "eip = %lx, inst_len =%lx, exit_qualification = %lx\n", 
   4.238 +        VMX_DBG_LOG(DBG_LEVEL_1, "eip = %lx, inst_len =%lx, exit_qualification = %lx", 
   4.239                  eip, inst_len, exit_qualification);
   4.240          vmx_cr_access(exit_qualification, &regs);
   4.241          __update_guest_eip(inst_len);
     5.1 --- a/xen/arch/x86/vmx_intercept.c	Mon Feb 14 13:05:43 2005 +0000
     5.2 +++ b/xen/arch/x86/vmx_intercept.c	Thu Feb 17 21:14:30 2005 +0000
     5.3 @@ -69,7 +69,7 @@ static void pit_cal_count(struct vmx_vir
     5.4  {
     5.5      unsigned int usec_delta = (unsigned int)((NOW() - vpit->inject_point) / 1000);
     5.6      if (usec_delta > vpit->period * 1000)
     5.7 -        VMX_DBG_LOG(DBG_LEVEL_1, "VMX_PIT:long time has passed from last injection!\n");
     5.8 +        VMX_DBG_LOG(DBG_LEVEL_1, "VMX_PIT:long time has passed from last injection!");
     5.9      vpit->count = vpit->init_val - ((usec_delta * PIT_FREQ / 1000000) % vpit->init_val );
    5.10  }
    5.11  
     6.1 --- a/xen/arch/x86/vmx_io.c	Mon Feb 14 13:05:43 2005 +0000
     6.2 +++ b/xen/arch/x86/vmx_io.c	Thu Feb 17 21:14:30 2005 +0000
     6.3 @@ -194,7 +194,7 @@ void vmx_io_assist(struct exec_domain *e
     6.4      vio = (vcpu_iodata_t *) ed->arch.arch_vmx.vmx_platform.shared_page_va;
     6.5      if (vio == 0) {
     6.6          VMX_DBG_LOG(DBG_LEVEL_1, 
     6.7 -                    "bad shared page: %lx\n", (unsigned long) vio);
     6.8 +                    "bad shared page: %lx", (unsigned long) vio);
     6.9          domain_crash();
    6.10      }
    6.11      p = &vio->vp_ioreq;
    6.12 @@ -313,7 +313,7 @@ static inline int find_highest_pending_i
    6.13      vio = (vcpu_iodata_t *) d->arch.arch_vmx.vmx_platform.shared_page_va;
    6.14      if (vio == 0) {
    6.15          VMX_DBG_LOG(DBG_LEVEL_1, 
    6.16 -                    "bad shared page: %lx\n", (unsigned long) vio);
    6.17 +                    "bad shared page: %lx", (unsigned long) vio);
    6.18          domain_crash();
    6.19      }
    6.20          
    6.21 @@ -327,7 +327,7 @@ static inline void clear_highest_bit(str
    6.22      vio = (vcpu_iodata_t *) d->arch.arch_vmx.vmx_platform.shared_page_va;
    6.23      if (vio == 0) {
    6.24          VMX_DBG_LOG(DBG_LEVEL_1, 
    6.25 -                    "bad shared page: %lx\n", (unsigned long) vio);
    6.26 +                    "bad shared page: %lx", (unsigned long) vio);
    6.27          domain_crash();
    6.28      }
    6.29          
    6.30 @@ -350,14 +350,14 @@ void vmx_intr_assist(struct exec_domain 
    6.31  
    6.32      __vmread(VM_ENTRY_INTR_INFO_FIELD, &intr_fields);
    6.33      if (intr_fields & INTR_INFO_VALID_MASK) {
    6.34 -        VMX_DBG_LOG(DBG_LEVEL_1, "vmx_intr_assist: intr_fields: %lx\n", 
    6.35 +        VMX_DBG_LOG(DBG_LEVEL_1, "vmx_intr_assist: intr_fields: %lx",
    6.36                      intr_fields);
    6.37          return;
    6.38      }
    6.39  
    6.40      __vmread(GUEST_EFLAGS, &eflags);
    6.41      if (irq_masked(eflags)) {
    6.42 -        VMX_DBG_LOG(DBG_LEVEL_1, "guesting pending: %x, eflags: %lx\n", 
    6.43 +        VMX_DBG_LOG(DBG_LEVEL_1, "guesting pending: %x, eflags: %lx",
    6.44                      highest_vector, eflags);
    6.45          return;
    6.46      }
    6.47 @@ -380,8 +380,13 @@ void vmx_intr_assist(struct exec_domain 
    6.48  
    6.49  void vmx_do_resume(struct exec_domain *d) 
    6.50  {
    6.51 +    if ( d->arch.vpagetable )
    6.52 +        __vmwrite(GUEST_CR3, pagetable_val(d->arch.shadow_table));
    6.53 +    else
    6.54 +        // we haven't switched off the 1:1 pagetable yet...
    6.55 +        __vmwrite(GUEST_CR3, pagetable_val(d->arch.guest_table));
    6.56 +
    6.57      __vmwrite(HOST_CR3, pagetable_val(d->arch.monitor_table));
    6.58 -    __vmwrite(GUEST_CR3, pagetable_val(d->arch.shadow_table));
    6.59      __vmwrite(HOST_ESP, (unsigned long)get_stack_bottom());
    6.60  
    6.61      if (event_pending(d)) {
     7.1 --- a/xen/arch/x86/vmx_vmcs.c	Mon Feb 14 13:05:43 2005 +0000
     7.2 +++ b/xen/arch/x86/vmx_vmcs.c	Thu Feb 17 21:14:30 2005 +0000
     7.3 @@ -113,7 +113,7 @@ int vmx_setup_platform(struct exec_domai
     7.4  
     7.5      n = context->ecx;
     7.6      if (n > 32) {
     7.7 -        VMX_DBG_LOG(DBG_LEVEL_1, "Too many e820 entries: %d\n", n);
     7.8 +        VMX_DBG_LOG(DBG_LEVEL_1, "Too many e820 entries: %d", n);
     7.9          return -1;
    7.10      }
    7.11