* [PATCH] KVM: fix calculation of initial value of rdx register
@ 2006-11-06 13:15 Avi Kivity
2006-11-06 18:47 ` Hesse, Christian
0 siblings, 1 reply; 25+ messages in thread
From: Avi Kivity @ 2006-11-06 13:15 UTC (permalink / raw)
To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f
Cc: akpm-3NddpPZAyC0, linux-kernel-u79uwXL29TY76Z2rM5mHXA
On bootup, the rdx register contains information about the processor. The
function which calculates this value has the bugs:
- missing 'cpuid' to get the value from the processor
- missing register clobber caused a miscompilation in some circumstances
- we shouldn't return a value that depends on the current processor in
case we migrate
In any case nobody looks at the value, so just return a generic P6
identifier.
Thanks to Christian Hesse <mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> for debugging help.
Signed-off-by: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Index: linux-2.6/drivers/kvm/kvm_main.c
===================================================================
--- linux-2.6.orig/drivers/kvm/kvm_main.c
+++ linux-2.6/drivers/kvm/kvm_main.c
@@ -1052,12 +1052,7 @@ static void set_cr8(struct kvm_vcpu *vcp
static u32 get_rdx_init_val(void)
{
- u32 val;
-
- asm ("movl $1, %%eax \n\t"
- "movl %%eax, %0 \n\t" : "=g"(val) );
- return val;
-
+ return 0x600; /* P6 family */
}
static void fx_init(struct kvm_vcpu *vcpu)
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
^ permalink raw reply [flat|nested] 25+ messages in thread* Re: [PATCH] KVM: fix calculation of initial value of rdx register 2006-11-06 13:15 [PATCH] KVM: fix calculation of initial value of rdx register Avi Kivity @ 2006-11-06 18:47 ` Hesse, Christian [not found] ` <200611061947.47165.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-06 18:47 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1: Type: text/plain, Size: 665 bytes --] On Monday 06 November 2006 14:15, you wrote: > On bootup, the rdx register contains information about the processor. The > function which calculates this value has the bugs: > > - missing 'cpuid' to get the value from the processor > - missing register clobber caused a miscompilation in some circumstances > - we shouldn't return a value that depends on the current processor in > case we migrate > > In any case nobody looks at the value, so just return a generic P6 > identifier. I'm sorry, but this does not change the situation for me... My system still freezes with the same messages. Awaiting more patches. :) -- Regards, Chris [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611061947.47165.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611061947.47165.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-07 8:14 ` Avi Kivity [not found] ` <4550407F.6030007-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-07 8:14 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hesse, Christian wrote: > On Monday 06 November 2006 14:15, you wrote: > >> On bootup, the rdx register contains information about the processor. The >> function which calculates this value has the bugs: >> >> - missing 'cpuid' to get the value from the processor >> - missing register clobber caused a miscompilation in some circumstances >> - we shouldn't return a value that depends on the current processor in >> case we migrate >> >> In any case nobody looks at the value, so just return a generic P6 >> identifier. >> > > I'm sorry, but this does not change the situation for me... My system still > freezes with the same messages. > > Awaiting more patches. :) > Please revert all external patches (except kvm :) and try again. I don't think it matters, but let's make sure. Then, please apply the attached patch. You will need serial console or netconsole, and to echo 9 > /proc/sysrq-trigger before launching the VM. BTW, what OS are you trying to run in the guest? -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <4550407F.6030007-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <4550407F.6030007-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-07 11:55 ` Hesse, Christian [not found] ` <200611071255.59831.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-07 11:55 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1: Type: text/plain, Size: 1267 bytes --] On Tuesday 07 November 2006 09:14, Avi Kivity wrote: > Hesse, Christian wrote: > > On Monday 06 November 2006 14:15, you wrote: > >> On bootup, the rdx register contains information about the processor. > >> The function which calculates this value has the bugs: > >> > >> - missing 'cpuid' to get the value from the processor > >> - missing register clobber caused a miscompilation in some > >> circumstances - we shouldn't return a value that depends on the current > >> processor in case we migrate > >> > >> In any case nobody looks at the value, so just return a generic P6 > >> identifier. > > > > I'm sorry, but this does not change the situation for me... My system > > still freezes with the same messages. > > > > Awaiting more patches. :) > > Please revert all external patches (except kvm :) and try again. I > don't think it matters, but let's make sure. You are right, it does not matter. > Then, please apply the attached patch. You will need serial console or > netconsole, and to > > echo 9 > /proc/sysrq-trigger > > before launching the VM. There is no patch attached to this mail... > BTW, what OS are you trying to run in the guest? I try to boot a Windows XP SP2 install CD. -- Regards, Chris [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611071255.59831.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611071255.59831.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-07 12:31 ` Avi Kivity [not found] ` <45507C84.70504-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-07 12:31 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1: Type: text/plain, Size: 617 bytes --] Hesse, Christian wrote: > >> Then, please apply the attached patch. You will need serial console or >> netconsole, and to >> >> echo 9 > /proc/sysrq-trigger >> >> before launching the VM. >> > > There is no patch attached to this mail... > > Sorry, attaching now. >> BTW, what OS are you trying to run in the guest? >> > > I try to boot a Windows XP SP2 install CD. > Ok. kvm isn't really able to complete the install (Windows will bluescreen) but it shouldn't lock up either. (you can install with qemu and run with kvm -- error compiling committee.c: too many arguments to function [-- Attachment #2: kvm-debug.patch --] [-- Type: text/x-patch, Size: 31694 bytes --] Index: linux-2.6/drivers/kvm/debug.c =================================================================== --- /dev/null +++ linux-2.6/drivers/kvm/debug.c @@ -0,0 +1,1052 @@ +/* + * Kernel-based Virtual Machine driver for Linux + * + * This module enables machines with Intel VT-x extensions to run virtual + * machines without emulation or binary translation. + * + * Debug support + * + * Copyright (C) 2006 Qumranet, Inc. + * + * Authors: + * Yaniv Kamay <yaniv-atKUWr5tajBWk0Htik3J/w@public.gmane.org> + * Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> + * + */ + +#include <linux/highmem.h> + +#include "kvm.h" +#include "debug.h" + +#ifdef KVM_DEBUG + +static const char *vmx_msr_name[] = { + "MSR_EFER", "MSR_STAR", "MSR_CSTAR", + "MSR_KERNEL_GS_BASE", "MSR_SYSCALL_MASK", "MSR_LSTAR" +}; + +#define NR_VMX_MSR (sizeof(vmx_msr_name) / sizeof(char*)) + +void show_msrs(struct kvm_vcpu *vcpu) +{ + int i; + + for (i = 0; i < NR_VMX_MSR; ++i) { + vcpu_printf(vcpu, "%s: %s=0x%llx\n", + __FUNCTION__, + vmx_msr_name[i], + vcpu->guest_msrs[i].data); + } +} + +void show_code(struct kvm_vcpu *vcpu) +{ + gva_t rip = vmcs_readl(GUEST_RIP); + u8 code[50]; + char buf[30 + 3 * sizeof code]; + int i; + + if (!is_long_mode()) + rip += vmcs_readl(GUEST_CS_BASE); + + kvm_read_guest(vcpu, rip, sizeof code, code); + for (i = 0; i < sizeof code; ++i) + sprintf(buf + i * 3, " %02x", code[i]); + vcpu_printf(vcpu, "code: %lx%s\n", rip, buf); +} + +struct gate_struct { + u16 offset_low; + u16 segment; + unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1; + u16 offset_middle; + u32 offset_high; + u32 zero1; +} __attribute__((packed)); + +void show_irq(struct kvm_vcpu *vcpu, int irq) +{ + unsigned long idt_base = vmcs_readl(GUEST_IDTR_BASE); + unsigned long idt_limit = vmcs_readl(GUEST_IDTR_LIMIT); + struct gate_struct gate; + + if (!is_long_mode()) + vcpu_printf(vcpu, "%s: not in long mode\n", __FUNCTION__); + + if (!is_long_mode() || idt_limit < irq * sizeof(gate)) { + vcpu_printf(vcpu, "%s: 0x%x read_guest err\n", + __FUNCTION__, + irq); + return; + } + + if (kvm_read_guest(vcpu, idt_base + irq * sizeof(gate), sizeof(gate), &gate) != sizeof(gate)) { + vcpu_printf(vcpu, "%s: 0x%x read_guest err\n", + __FUNCTION__, + irq); + return; + } + vcpu_printf(vcpu, "%s: 0x%x handler 0x%llx\n", + __FUNCTION__, + irq, + ((u64)gate.offset_high << 32) | + ((u64)gate.offset_middle << 16) | + gate.offset_low); +} + +void show_page(struct kvm_vcpu *vcpu, + gva_t addr) +{ + u64 *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); + + if (!buf) + return; + + addr &= PAGE_MASK; + if (kvm_read_guest(vcpu, addr, PAGE_SIZE, buf)) { + int i; + for (i = 0; i < PAGE_SIZE / sizeof(u64) ; i++) { + u8 *ptr = (u8*)&buf[i]; + int j; + vcpu_printf(vcpu, " 0x%16.16lx:", + addr + i * sizeof(u64)); + for (j = 0; j < sizeof(u64) ; j++) + vcpu_printf(vcpu, " 0x%2.2x", ptr[j]); + vcpu_printf(vcpu, "\n"); + } + } + kfree(buf); +} + +void show_u64(struct kvm_vcpu *vcpu, gva_t addr) +{ + u64 buf; + + if (kvm_read_guest(vcpu, addr, sizeof(u64), &buf) == sizeof(u64)) { + u8 *ptr = (u8*)&buf; + int j; + vcpu_printf(vcpu, " 0x%16.16lx:", addr); + for (j = 0; j < sizeof(u64) ; j++) + vcpu_printf(vcpu, " 0x%2.2x", ptr[j]); + vcpu_printf(vcpu, "\n"); + } +} + +#define IA32_DEBUGCTL_RESERVED_BITS 0xfffffffffffffe3cULL + +static int is_canonical(unsigned long addr) +{ + return addr == ((long)addr << 16) >> 16; +} + +int vm_entry_test_guest(struct kvm_vcpu *vcpu) +{ + unsigned long cr0; + unsigned long cr4; + unsigned long cr3; + unsigned long dr7; + u64 ia32_debugctl; + unsigned long sysenter_esp; + unsigned long sysenter_eip; + unsigned long rflags; + + int long_mode; + int virtual8086; + + #define RFLAGS_VM (1 << 17) + #define RFLAGS_RF (1 << 9) + + + #define VIR8086_SEG_BASE_TEST(seg)\ + if (vmcs_readl(GUEST_##seg##_BASE) != \ + (unsigned long)vmcs_read16(GUEST_##seg##_SELECTOR) << 4) {\ + vcpu_printf(vcpu, "%s: "#seg" base 0x%lx in "\ + "virtual8086 is not "#seg" selector 0x%x"\ + " shifted right 4 bits\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_BASE),\ + vmcs_read16(GUEST_##seg##_SELECTOR));\ + return 0;\ + } + + #define VIR8086_SEG_LIMIT_TEST(seg)\ + if (vmcs_readl(GUEST_##seg##_LIMIT) != 0x0ffff) { \ + vcpu_printf(vcpu, "%s: "#seg" limit 0x%lx in "\ + "virtual8086 is not 0xffff\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_LIMIT));\ + return 0;\ + } + + #define VIR8086_SEG_AR_TEST(seg)\ + if (vmcs_read32(GUEST_##seg##_AR_BYTES) != 0x0f3) { \ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x in "\ + "virtual8086 is not 0xf3\n",\ + __FUNCTION__,\ + vmcs_read32(GUEST_##seg##_AR_BYTES));\ + return 0;\ + } + + + cr0 = vmcs_readl(GUEST_CR0); + + if (!(cr0 & CR0_PG_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, PG is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_PE_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, PE is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_NE_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, NE is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_WP_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, WP is not set\n", + __FUNCTION__, cr0); + } + + cr4 = vmcs_readl(GUEST_CR4); + + if (!(cr4 & CR4_VMXE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 0x%lx, VMXE is not set\n", + __FUNCTION__, cr4); + return 0; + } + + if (!(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 0x%lx, PAE is not set\n", + __FUNCTION__, cr4); + } + + ia32_debugctl = vmcs_read64(GUEST_IA32_DEBUGCTL); + + if (ia32_debugctl & IA32_DEBUGCTL_RESERVED_BITS ) { + vcpu_printf(vcpu, "%s: ia32_debugctl 0x%llx, reserve bits\n", + __FUNCTION__, ia32_debugctl); + return 0; + } + + long_mode = is_long_mode(); + + if (long_mode) { + } + + if ( long_mode && !(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: long mode and not PAE\n", + __FUNCTION__); + return 0; + } + + cr3 = vmcs_readl(GUEST_CR3); + + if (cr3 & CR3_L_MODE_RESEVED_BITS) { + vcpu_printf(vcpu, "%s: cr3 0x%lx, reserved bits\n", + __FUNCTION__, cr3); + return 0; + } + + if ( !long_mode && (cr4 & CR4_PAE_MASK)) { + /* check the 4 PDPTEs for reserved bits */ + unsigned long pdpt_pfn = cr3 >> PAGE_SHIFT; + int i; + u64 pdpte; + unsigned offset = (cr3 & (PAGE_SIZE-1)) >> 5; + u64 *pdpt = kmap_atomic(pfn_to_page(pdpt_pfn), KM_USER0); + + for (i = 0; i < 4; ++i) { + pdpte = pdpt[offset + i]; + if ((pdpte & 1) && (pdpte & 0xfffffff0000001e6ull)) + break; + } + + kunmap_atomic(pdpt, KM_USER0); + + if (i != 4) { + vcpu_printf(vcpu, "%s: pae cr3[%d] 0x%llx, reserved bits\n", + __FUNCTION__, i, pdpte); + return 0; + } + } + + dr7 = vmcs_readl(GUEST_DR7); + + if (dr7 & ~((1ULL << 32) - 1)) { + vcpu_printf(vcpu, "%s: dr7 0x%lx, reserved bits\n", + __FUNCTION__, dr7); + return 0; + } + + sysenter_esp = vmcs_readl(GUEST_SYSENTER_ESP); + + if (!is_canonical(sysenter_esp)) { + vcpu_printf(vcpu, "%s: sysenter_esp 0x%lx, not canonical\n", + __FUNCTION__, sysenter_esp); + return 0; + } + + sysenter_eip = vmcs_readl(GUEST_SYSENTER_EIP); + + if (!is_canonical(sysenter_eip)) { + vcpu_printf(vcpu, "%s: sysenter_eip 0x%lx, not canonical\n", + __FUNCTION__, sysenter_eip); + return 0; + } + + rflags = vmcs_readl(GUEST_RFLAGS); + virtual8086 = rflags & RFLAGS_VM; + + + if (vmcs_read16(GUEST_TR_SELECTOR) & SELECTOR_TI_MASK) { + vcpu_printf(vcpu, "%s: tr selctor 0x%x, TI is set\n", + __FUNCTION__, vmcs_read16(GUEST_TR_SELECTOR)); + return 0; + } + + if (!(vmcs_read32(GUEST_LDTR_AR_BYTES) & AR_UNUSABLE_MASK) && + vmcs_read16(GUEST_LDTR_SELECTOR) & SELECTOR_TI_MASK) { + vcpu_printf(vcpu, "%s: ldtr selctor 0x%x," + " is usable and TI is set\n", + __FUNCTION__, vmcs_read16(GUEST_LDTR_SELECTOR)); + return 0; + } + + if (!virtual8086 && + (vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK) != + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK)) { + vcpu_printf(vcpu, "%s: ss selctor 0x%x cs selctor 0x%x," + " not same RPL\n", + __FUNCTION__, + vmcs_read16(GUEST_SS_SELECTOR), + vmcs_read16(GUEST_CS_SELECTOR)); + return 0; + } + + if (virtual8086) { + VIR8086_SEG_BASE_TEST(CS); + VIR8086_SEG_BASE_TEST(SS); + VIR8086_SEG_BASE_TEST(DS); + VIR8086_SEG_BASE_TEST(ES); + VIR8086_SEG_BASE_TEST(FS); + VIR8086_SEG_BASE_TEST(GS); + } + + if (!is_canonical(vmcs_readl(GUEST_TR_BASE)) || + !is_canonical(vmcs_readl(GUEST_FS_BASE)) || + !is_canonical(vmcs_readl(GUEST_GS_BASE)) ) { + vcpu_printf(vcpu, "%s: TR 0x%lx FS 0x%lx or GS 0x%lx base" + " is not canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_TR_BASE), + vmcs_readl(GUEST_FS_BASE), + vmcs_readl(GUEST_GS_BASE)); + return 0; + + } + + if (!(vmcs_read32(GUEST_LDTR_AR_BYTES) & AR_UNUSABLE_MASK) && + !is_canonical(vmcs_readl(GUEST_LDTR_BASE))) { + vcpu_printf(vcpu, "%s: LDTR base 0x%lx, usable and is not" + " canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_LDTR_BASE)); + return 0; + } + + if ((vmcs_readl(GUEST_CS_BASE) & ~((1ULL << 32) - 1))) { + vcpu_printf(vcpu, "%s: CS base 0x%lx, not all bits 63-32" + " are zero\n", + __FUNCTION__, + vmcs_readl(GUEST_CS_BASE)); + return 0; + } + + #define SEG_BASE_TEST(seg)\ + if ( !(vmcs_read32(GUEST_##seg##_AR_BYTES) & AR_UNUSABLE_MASK) &&\ + (vmcs_readl(GUEST_##seg##_BASE) & ~((1ULL << 32) - 1))) {\ + vcpu_printf(vcpu, "%s: "#seg" base 0x%lx, is usable and not"\ + " all bits 63-32 are zero\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_BASE));\ + return 0;\ + } + SEG_BASE_TEST(SS); + SEG_BASE_TEST(DS); + SEG_BASE_TEST(ES); + + if (virtual8086) { + VIR8086_SEG_LIMIT_TEST(CS); + VIR8086_SEG_LIMIT_TEST(SS); + VIR8086_SEG_LIMIT_TEST(DS); + VIR8086_SEG_LIMIT_TEST(ES); + VIR8086_SEG_LIMIT_TEST(FS); + VIR8086_SEG_LIMIT_TEST(GS); + } + + if (virtual8086) { + VIR8086_SEG_AR_TEST(CS); + VIR8086_SEG_AR_TEST(SS); + VIR8086_SEG_AR_TEST(DS); + VIR8086_SEG_AR_TEST(ES); + VIR8086_SEG_AR_TEST(FS); + VIR8086_SEG_AR_TEST(GS); + } else { + + u32 cs_ar = vmcs_read32(GUEST_CS_AR_BYTES); + u32 ss_ar = vmcs_read32(GUEST_SS_AR_BYTES); + u32 tr_ar = vmcs_read32(GUEST_TR_AR_BYTES); + u32 ldtr_ar = vmcs_read32(GUEST_LDTR_AR_BYTES); + + #define SEG_G_TEST(seg) { \ + u32 lim = vmcs_read32(GUEST_##seg##_LIMIT); \ + u32 ar = vmcs_read32(GUEST_##seg##_AR_BYTES); \ + int err = 0; \ + if (((lim & ~PAGE_MASK) != ~PAGE_MASK) && (ar & AR_G_MASK)) \ + err = 1; \ + if ((lim & ~((1u << 20) - 1)) && !(ar & AR_G_MASK)) \ + err = 1; \ + if (err) { \ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, G err. lim" \ + " is 0x%x\n", \ + __FUNCTION__, \ + ar, lim); \ + return 0; \ + } \ + } + + + if (!(cs_ar & AR_TYPE_ACCESSES_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, accesses is clear\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_TYPE_CODE_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, code is clear\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, type is sys\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_TYPE_MASK) >= 8 && (cs_ar & AR_TYPE_MASK) < 12 && + AR_DPL(cs_ar) != + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, " + "DPL not as RPL\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_TYPE_MASK) >= 13 && (cs_ar & AR_TYPE_MASK) < 16 && + AR_DPL(cs_ar) > + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, " + "DPL greater than RPL\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, not " + "present\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, reseved" + " bits are set\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (long_mode & (cs_ar & AR_L_MASK) && (cs_ar & AR_DB_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, DB and L are set" + " in long mode\n", + __FUNCTION__, + cs_ar); + return 0; + + } + + SEG_G_TEST(CS); + + if (!(ss_ar & AR_UNUSABLE_MASK)) { + if ((ss_ar & AR_TYPE_MASK) != 3 && + (ss_ar & AR_TYPE_MASK) != 7 ) { + vcpu_printf(vcpu, "%s: ss AR 0x%x, usable and type" + " is not 3 or 7\n", + __FUNCTION__, + ss_ar); + return 0; + } + + if (!(ss_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: ss AR 0x%x, usable and" + " is sys\n", + __FUNCTION__, + ss_ar); + return 0; + } + if (!(ss_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, usable" + " and not present\n", + __FUNCTION__, + ss_ar); + return 0; + } + + if ((ss_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, reseved" + " bits are set\n", + __FUNCTION__, + ss_ar); + return 0; + } + + SEG_G_TEST(SS); + + } + + if (AR_DPL(ss_ar) != + (vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, " + "DPL not as RPL\n", + __FUNCTION__, + ss_ar); + return 0; + } + + #define SEG_AR_TEST(seg) {\ + u32 ar = vmcs_read32(GUEST_##seg##_AR_BYTES);\ + if (!(ar & AR_UNUSABLE_MASK)) {\ + if (!(ar & AR_TYPE_ACCESSES_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "usable and not accesses\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_TYPE_CODE_MASK) &&\ + !(ar & AR_TYPE_READABLE_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "code and not readable\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if (!(ar & AR_S_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, usable and"\ + " is sys\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_TYPE_MASK) >= 0 && \ + (ar & AR_TYPE_MASK) < 12 && \ + AR_DPL(ar) < (vmcs_read16(GUEST_##seg##_SELECTOR) & \ + SELECTOR_RPL_MASK) ) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "DPL less than RPL\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if (!(ar & AR_P_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, usable and"\ + " not present\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_RESERVD_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR"\ + " 0x%x, reseved"\ + " bits are set\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + SEG_G_TEST(seg)\ + }\ + } + +#undef DS +#undef ES +#undef FS +#undef GS + + SEG_AR_TEST(DS); + SEG_AR_TEST(ES); + SEG_AR_TEST(FS); + SEG_AR_TEST(GS); + + // TR test + if (long_mode) { + if ((tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_64_TSS) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, long" + " mode and not 64bit busy" + " tss\n", + __FUNCTION__, + tr_ar); + return 0; + } + } else { + if ((tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_32_TSS && + (tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_16_TSS) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, legacy" + " mode and not 16/32bit " + "busy tss\n", + __FUNCTION__, + tr_ar); + return 0; + } + + } + if ((tr_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, S is set\n", + __FUNCTION__, + tr_ar); + return 0; + } + if (!(tr_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, P is not set\n", + __FUNCTION__, + tr_ar); + return 0; + } + + if ((tr_ar & (AR_RESERVD_MASK| AR_UNUSABLE_MASK))) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, reserved bit are" + " set\n", + __FUNCTION__, + tr_ar); + return 0; + } + SEG_G_TEST(TR); + + // TR test + if (!(ldtr_ar & AR_UNUSABLE_MASK)) { + + if ((ldtr_ar & AR_TYPE_MASK) != AR_TYPE_LDT) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " bad type\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + + if ((ldtr_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " S is set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + + if (!(ldtr_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " P is not set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + if ((ldtr_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " reserved bit are set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + SEG_G_TEST(LDTR); + } + } + + // GDTR and IDTR + + + #define IDT_GDT_TEST(reg)\ + if (!is_canonical(vmcs_readl(GUEST_##reg##_BASE))) {\ + vcpu_printf(vcpu, "%s: "#reg" BASE 0x%lx, not canonical\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##reg##_BASE));\ + return 0;\ + }\ + if (vmcs_read32(GUEST_##reg##_LIMIT) >> 16) {\ + vcpu_printf(vcpu, "%s: "#reg" LIMIT 0x%x, size err\n",\ + __FUNCTION__,\ + vmcs_read32(GUEST_##reg##_LIMIT));\ + return 0;\ + }\ + + IDT_GDT_TEST(GDTR); + IDT_GDT_TEST(IDTR); + + + // RIP + + if ((!long_mode || !(vmcs_read32(GUEST_CS_AR_BYTES) & AR_L_MASK)) && + vmcs_readl(GUEST_RIP) & ~((1ULL << 32) - 1) ){ + vcpu_printf(vcpu, "%s: RIP 0x%lx, size err\n", + __FUNCTION__, + vmcs_readl(GUEST_RIP)); + return 0; + } + + if (!is_canonical(vmcs_readl(GUEST_RIP))) { + vcpu_printf(vcpu, "%s: RIP 0x%lx, not canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_RIP)); + return 0; + } + + // RFLAGS + #define RFLAGS_RESEVED_CLEAR_BITS\ + (~((1ULL << 22) - 1) | (1ULL << 15) | (1ULL << 5) | (1ULL << 3)) + #define RFLAGS_RESEVED_SET_BITS (1 << 1) + + if ((rflags & RFLAGS_RESEVED_CLEAR_BITS) || + !(rflags & RFLAGS_RESEVED_SET_BITS)) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, reserved bits 0x%llx 0x%x\n", + __FUNCTION__, + rflags, + RFLAGS_RESEVED_CLEAR_BITS, + RFLAGS_RESEVED_SET_BITS); + return 0; + } + + if (long_mode && virtual8086) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, vm and long mode\n", + __FUNCTION__, + rflags); + return 0; + } + + + if (!(rflags & RFLAGS_RF)) { + u32 vm_entry_info = vmcs_read32(VM_ENTRY_INTR_INFO_FIELD); + if ((vm_entry_info & INTR_INFO_VALID_MASK) && + (vm_entry_info & INTR_INFO_INTR_TYPE_MASK) == + INTR_TYPE_EXT_INTR) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, external" + " interrupt and RF is clear\n", + __FUNCTION__, + rflags); + return 0; + } + + } + + // to be continued from Checks on Guest Non-Register State (22.3.1.5) + return 1; +} + +static int check_fixed_bits(struct kvm_vcpu *vcpu, const char *reg, + unsigned long cr, + u32 msr_fixed_0, u32 msr_fixed_1) +{ + u64 fixed_bits_0, fixed_bits_1; + + rdmsrl(msr_fixed_0, fixed_bits_0); + rdmsrl(msr_fixed_1, fixed_bits_1); + if ((cr & fixed_bits_0) != fixed_bits_0) { + vcpu_printf(vcpu, "%s: %s (%lx) has one of %llx unset\n", + __FUNCTION__, reg, cr, fixed_bits_0); + return 0; + } + if ((~cr & ~fixed_bits_1) != ~fixed_bits_1) { + vcpu_printf(vcpu, "%s: %s (%lx) has one of %llx set\n", + __FUNCTION__, reg, cr, ~fixed_bits_1); + return 0; + } + return 1; +} + +static int phys_addr_width(void) +{ + unsigned eax, ebx, ecx, edx; + + cpuid(0x80000008, &eax, &ebx, &ecx, &edx); + return eax & 0xff; +} + +static int check_canonical(struct kvm_vcpu *vcpu, const char *name, + unsigned long reg) +{ +#ifdef __x86_64__ + unsigned long x; + + if (sizeof(reg) == 4) + return 1; + x = (long)reg >> 48; + if (!(x == 0 || x == ~0UL)) { + vcpu_printf(vcpu, "%s: %s (%lx) not canonical\n", + __FUNCTION__, name, reg); + return 0; + } +#endif + return 1; +} + +static int check_selector(struct kvm_vcpu *vcpu, const char *name, + int rpl_ti, int null, + u16 sel) +{ + if (rpl_ti && (sel & 7)) { + vcpu_printf(vcpu, "%s: %s (%x) nonzero rpl or ti\n", + __FUNCTION__, name, sel); + return 0; + } + if (null && !sel) { + vcpu_printf(vcpu, "%s: %s (%x) zero\n", + __FUNCTION__, name, sel); + return 0; + } + return 1; +} + +#define MSR_IA32_VMX_CR0_FIXED0 0x486 +#define MSR_IA32_VMX_CR0_FIXED1 0x487 + +#define MSR_IA32_VMX_CR4_FIXED0 0x488 +#define MSR_IA32_VMX_CR4_FIXED1 0x489 + +int vm_entry_test_host(struct kvm_vcpu *vcpu) +{ + int r = 0; + unsigned long cr0 = vmcs_readl(HOST_CR0); + unsigned long cr4 = vmcs_readl(HOST_CR4); + unsigned long cr3 = vmcs_readl(HOST_CR3); + int host_64; + + host_64 = vmcs_read32(VM_EXIT_CONTROLS) & VM_EXIT_HOST_ADD_SPACE_SIZE; + + /* 22.2.2 */ + r &= check_fixed_bits(vcpu, "host cr0", cr0, MSR_IA32_VMX_CR0_FIXED0, + MSR_IA32_VMX_CR0_FIXED1); + + r &= check_fixed_bits(vcpu, "host cr0", cr4, MSR_IA32_VMX_CR4_FIXED0, + MSR_IA32_VMX_CR4_FIXED1); + if ((u64)cr3 >> phys_addr_width()) { + vcpu_printf(vcpu, "%s: cr3 (%lx) vs phys addr width\n", + __FUNCTION__, cr3); + r = 0; + } + + r &= check_canonical(vcpu, "host ia32_sysenter_eip", + vmcs_readl(HOST_IA32_SYSENTER_EIP)); + r &= check_canonical(vcpu, "host ia32_sysenter_esp", + vmcs_readl(HOST_IA32_SYSENTER_ESP)); + + /* 22.2.3 */ + r &= check_selector(vcpu, "host cs", 1, 1, + vmcs_read16(HOST_CS_SELECTOR)); + r &= check_selector(vcpu, "host ss", 1, !host_64, + vmcs_read16(HOST_SS_SELECTOR)); + r &= check_selector(vcpu, "host ds", 1, 0, + vmcs_read16(HOST_DS_SELECTOR)); + r &= check_selector(vcpu, "host es", 1, 0, + vmcs_read16(HOST_ES_SELECTOR)); + r &= check_selector(vcpu, "host fs", 1, 0, + vmcs_read16(HOST_FS_SELECTOR)); + r &= check_selector(vcpu, "host gs", 1, 0, + vmcs_read16(HOST_GS_SELECTOR)); + r &= check_selector(vcpu, "host tr", 1, 1, + vmcs_read16(HOST_TR_SELECTOR)); + +#ifdef __x86_64__ + r &= check_canonical(vcpu, "host fs base", + vmcs_readl(HOST_FS_BASE)); + r &= check_canonical(vcpu, "host gs base", + vmcs_readl(HOST_GS_BASE)); + r &= check_canonical(vcpu, "host gdtr base", + vmcs_readl(HOST_GDTR_BASE)); + r &= check_canonical(vcpu, "host idtr base", + vmcs_readl(HOST_IDTR_BASE)); +#endif + + /* 22.2.4 */ +#ifdef __x86_64__ + if (!host_64) { + vcpu_printf(vcpu, "%s: vm exit controls: !64 bit host\n", + __FUNCTION__); + r = 0; + } + if (!(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 (%lx): !pae\n", + __FUNCTION__, cr4); + r = 0; + } + r &= check_canonical(vcpu, "host rip", vmcs_readl(HOST_RIP)); +#endif + + return r; +} + +int vm_entry_test(struct kvm_vcpu *vcpu) +{ + int rg, rh; + + rg = vm_entry_test_guest(vcpu); + rh = vm_entry_test_host(vcpu); + return rg && rh; +} + +void vmcs_dump(struct kvm_vcpu *vcpu) +{ + vcpu_printf(vcpu, "************************ vmcs_dump ************************\n"); + vcpu_printf(vcpu, "HOST_CR0 0x%lx\n", vmcs_readl(HOST_CR0)); + vcpu_printf(vcpu, "HOST_CR3 0x%lx\n", vmcs_readl(HOST_CR3)); + vcpu_printf(vcpu, "HOST_CR4 0x%lx\n", vmcs_readl(HOST_CR4)); + + vcpu_printf(vcpu, "HOST_TR_SELECTOR 0x%x\n", vmcs_read16(HOST_TR_SELECTOR)); + vcpu_printf(vcpu, "HOST_TR_BASE 0x%lx\n", vmcs_readl(HOST_TR_BASE)); + vcpu_printf(vcpu, "HOST_TR_LIMIT 0x%x\n", vmcs_read32(HOST_TR_LIMIT)); + + vcpu_printf(vcpu, "HOST_GDTR_BASE 0x%lx\n", vmcs_readl(HOST_GDTR_BASE)); + vcpu_printf(vcpu, "HOST_GDTR_LIMIT 0x%x\n", vmcs_read32(HOST_GDTR_LIMIT)); + + vcpu_printf(vcpu, "HOST_LDTR_SELECTOR 0x%x\n", vmcs_read16(HOST_TR_SELECTOR)); + vcpu_printf(vcpu, "HOST_LDTR_BASE 0x%lx\n", vmcs_readl(HOST_TR_BASE)); + vcpu_printf(vcpu, "HOST_LDTR_LIMIT 0x%x\n", vmcs_read32(HOST_TR_LIMIT)); + + vcpu_printf(vcpu, "HOST_CS_SELECTOR 0x%x\n", vmcs_read16(HOST_CS_SELECTOR)); + vcpu_printf(vcpu, "HOST_DS_SELECTOR 0x%x\n", vmcs_read16(HOST_DS_SELECTOR)); + vcpu_printf(vcpu, "HOST_ES_SELECTOR 0x%x\n", vmcs_read16(HOST_ES_SELECTOR)); + vcpu_printf(vcpu, "HOST_FS_SELECTOR 0x%x\n", vmcs_read16(HOST_FS_SELECTOR)); + vcpu_printf(vcpu, "HOST_GS_SELECTOR 0x%x\n", vmcs_read16(HOST_GS_SELECTOR)); + vcpu_printf(vcpu, "HOST_SS_SELECTOR 0x%x\n", vmcs_read16(HOST_SS_SELECTOR)); + + + vcpu_printf(vcpu, "VM_ENTRY_CONTROLS 0x%x\n", vmcs_read32(VM_ENTRY_CONTROLS)); + + vcpu_printf(vcpu, "GUEST_CR0 0x%lx\n", vmcs_readl(GUEST_CR0)); + vcpu_printf(vcpu, "GUEST_CR3 0x%lx\n", vmcs_readl(GUEST_CR3)); + vcpu_printf(vcpu, "GUEST_CR4 0x%lx\n", vmcs_readl(GUEST_CR4)); + + vcpu_printf(vcpu, "GUEST_SYSENTER_ESP 0x%lx\n", vmcs_readl(GUEST_SYSENTER_ESP)); + vcpu_printf(vcpu, "GUEST_SYSENTER_EIP 0x%lx\n", vmcs_readl(GUEST_SYSENTER_EIP)); + + + vcpu_printf(vcpu, "GUEST_IA32_DEBUGCTL 0x%llx\n", vmcs_read64(GUEST_IA32_DEBUGCTL)); + vcpu_printf(vcpu, "GUEST_DR7 0x%lx\n", vmcs_readl(GUEST_DR7)); + + vcpu_printf(vcpu, "GUEST_RFLAGS 0x%lx\n", vmcs_readl(GUEST_RFLAGS)); + vcpu_printf(vcpu, "GUEST_RIP 0x%lx\n", vmcs_readl(GUEST_RIP)); + + vcpu_printf(vcpu, "GUEST_CS_SELECTOR 0x%x\n", vmcs_read16(GUEST_CS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_DS_SELECTOR 0x%x\n", vmcs_read16(GUEST_DS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_ES_SELECTOR 0x%x\n", vmcs_read16(GUEST_ES_SELECTOR)); + vcpu_printf(vcpu, "GUEST_FS_SELECTOR 0x%x\n", vmcs_read16(GUEST_FS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_GS_SELECTOR 0x%x\n", vmcs_read16(GUEST_GS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_SS_SELECTOR 0x%x\n", vmcs_read16(GUEST_SS_SELECTOR)); + + vcpu_printf(vcpu, "GUEST_TR_SELECTOR 0x%x\n", vmcs_read16(GUEST_TR_SELECTOR)); + vcpu_printf(vcpu, "GUEST_LDTR_SELECTOR 0x%x\n", vmcs_read16(GUEST_LDTR_SELECTOR)); + + vcpu_printf(vcpu, "GUEST_CS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_CS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_DS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_DS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_ES_AR_BYTES 0x%x\n", vmcs_read32(GUEST_ES_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_FS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_FS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_GS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_GS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_SS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_SS_AR_BYTES)); + + vcpu_printf(vcpu, "GUEST_LDTR_AR_BYTES 0x%x\n", vmcs_read32(GUEST_LDTR_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_TR_AR_BYTES 0x%x\n", vmcs_read32(GUEST_TR_AR_BYTES)); + + vcpu_printf(vcpu, "GUEST_CS_BASE 0x%lx\n", vmcs_readl(GUEST_CS_BASE)); + vcpu_printf(vcpu, "GUEST_DS_BASE 0x%lx\n", vmcs_readl(GUEST_DS_BASE)); + vcpu_printf(vcpu, "GUEST_ES_BASE 0x%lx\n", vmcs_readl(GUEST_ES_BASE)); + vcpu_printf(vcpu, "GUEST_FS_BASE 0x%lx\n", vmcs_readl(GUEST_FS_BASE)); + vcpu_printf(vcpu, "GUEST_GS_BASE 0x%lx\n", vmcs_readl(GUEST_GS_BASE)); + vcpu_printf(vcpu, "GUEST_SS_BASE 0x%lx\n", vmcs_readl(GUEST_SS_BASE)); + + + vcpu_printf(vcpu, "GUEST_LDTR_BASE 0x%lx\n", vmcs_readl(GUEST_LDTR_BASE)); + vcpu_printf(vcpu, "GUEST_TR_BASE 0x%lx\n", vmcs_readl(GUEST_TR_BASE)); + + vcpu_printf(vcpu, "GUEST_CS_LIMIT 0x%x\n", vmcs_read32(GUEST_CS_LIMIT)); + vcpu_printf(vcpu, "GUEST_DS_LIMIT 0x%x\n", vmcs_read32(GUEST_DS_LIMIT)); + vcpu_printf(vcpu, "GUEST_ES_LIMIT 0x%x\n", vmcs_read32(GUEST_ES_LIMIT)); + vcpu_printf(vcpu, "GUEST_FS_LIMIT 0x%x\n", vmcs_read32(GUEST_FS_LIMIT)); + vcpu_printf(vcpu, "GUEST_GS_LIMIT 0x%x\n", vmcs_read32(GUEST_GS_LIMIT)); + vcpu_printf(vcpu, "GUEST_SS_LIMIT 0x%x\n", vmcs_read32(GUEST_SS_LIMIT)); + + vcpu_printf(vcpu, "GUEST_LDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_LDTR_LIMIT)); + vcpu_printf(vcpu, "GUEST_TR_LIMIT 0x%x\n", vmcs_read32(GUEST_TR_LIMIT)); + + vcpu_printf(vcpu, "GUEST_GDTR_BASE 0x%lx\n", vmcs_readl(GUEST_GDTR_BASE)); + vcpu_printf(vcpu, "GUEST_IDTR_BASE 0x%lx\n", vmcs_readl(GUEST_IDTR_BASE)); + + vcpu_printf(vcpu, "GUEST_GDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_GDTR_LIMIT)); + vcpu_printf(vcpu, "GUEST_IDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_IDTR_LIMIT)); + vcpu_printf(vcpu, "***********************************************************\n"); +} + +void regs_dump(struct kvm_vcpu *vcpu) +{ + #define REG_DUMP(reg) \ + vcpu_printf(vcpu, #reg" = 0x%lx\n", vcpu->regs[VCPU_REGS_##reg]) + #define VMCS_REG_DUMP(reg) \ + vcpu_printf(vcpu, #reg" = 0x%lx\n", vmcs_readl(GUEST_##reg)) + + vcpu_printf(vcpu, "************************ regs_dump ************************\n"); + REG_DUMP(RAX); + REG_DUMP(RBX); + REG_DUMP(RCX); + REG_DUMP(RDX); + REG_DUMP(RSP); + REG_DUMP(RBP); + REG_DUMP(RSI); + REG_DUMP(RDI); + REG_DUMP(R8); + REG_DUMP(R9); + REG_DUMP(R10); + REG_DUMP(R11); + REG_DUMP(R12); + REG_DUMP(R13); + REG_DUMP(R14); + REG_DUMP(R15); + + VMCS_REG_DUMP(RSP); + VMCS_REG_DUMP(RIP); + VMCS_REG_DUMP(RFLAGS); + + vcpu_printf(vcpu, "***********************************************************\n"); +} + +void sregs_dump(struct kvm_vcpu *vcpu) +{ + vcpu_printf(vcpu, "************************ sregs_dump ************************\n"); + vcpu_printf(vcpu, "cr0 = 0x%lx\n", guest_cr0()); + vcpu_printf(vcpu, "cr2 = 0x%lx\n", vcpu->cr2); + vcpu_printf(vcpu, "cr3 = 0x%lx\n", vcpu->cr3); + vcpu_printf(vcpu, "cr4 = 0x%lx\n", guest_cr4()); + vcpu_printf(vcpu, "cr8 = 0x%lx\n", vcpu->cr8); + vcpu_printf(vcpu, "shadow_efer = 0x%llx\n", vcpu->shadow_efer); + vmcs_dump(vcpu); + vcpu_printf(vcpu, "***********************************************************\n"); +} + +#endif + Index: linux-2.6/drivers/kvm/debug.h =================================================================== --- /dev/null +++ linux-2.6/drivers/kvm/debug.h @@ -0,0 +1,21 @@ +#ifndef __KVM_DEBUG_H +#define __KVM_DEBUG_H + +#ifdef KVM_DEBUG + +void show_msrs(struct kvm_vcpu *vcpu); + + +void show_irq(struct kvm_vcpu *vcpu, int irq); +void show_page(struct kvm_vcpu *vcpu, gva_t addr); +void show_u64(struct kvm_vcpu *vcpu, gva_t addr); +void show_code(struct kvm_vcpu *vcpu); +int vm_entry_test(struct kvm_vcpu *vcpu); + +void vmcs_dump(struct kvm_vcpu *vcpu); +void regs_dump(struct kvm_vcpu *vcpu); +void sregs_dump(struct kvm_vcpu *vcpu); + +#endif + +#endif Index: linux-2.6/drivers/kvm/kvm.h =================================================================== --- linux-2.6.orig/drivers/kvm/kvm.h +++ linux-2.6/drivers/kvm/kvm.h @@ -9,6 +9,8 @@ #include "vmx.h" +#define KVM_DEBUG 1 + #define CR0_PE_MASK (1ULL << 0) #define CR0_TS_MASK (1ULL << 3) #define CR0_NE_MASK (1ULL << 5) Index: linux-2.6/drivers/kvm/kvm_main.c =================================================================== --- linux-2.6.orig/drivers/kvm/kvm_main.c +++ linux-2.6/drivers/kvm/kvm_main.c @@ -33,6 +33,7 @@ #include "vmx.h" #include "x86_emulate.h" +#include "debug.h" MODULE_AUTHOR("Qumranet"); MODULE_LICENSE("GPL"); @@ -1107,6 +1108,9 @@ static int kvm_vcpu_setup(struct kvm_vcp int nr_good_msrs; + printk("*** vcpu_setup begin\n"); + vmcs_dump(vcpu); + if (!init_rmode_tss(vcpu->kvm)) { ret = 0; goto out; @@ -1303,6 +1307,9 @@ static int kvm_vcpu_setup(struct kvm_vcp ret = kvm_mmu_init(vcpu); + printk("*** vcpu_setup end\n"); + vmcs_dump(vcpu); + return ret; out_free_guest_msrs: @@ -2618,6 +2625,9 @@ again: fx_save(vcpu->host_fx_image); fx_restore(vcpu->guest_fx_image); + printk("*** pre launch\n"); + vmcs_dump(vcpu); + save_msrs(vcpu->host_msrs, vcpu->nmsrs); load_msrs(vcpu->guest_msrs, NR_BAD_MSRS); @@ -2740,6 +2750,9 @@ again: [cr2]"i"(offsetof(struct kvm_vcpu, cr2)) : "cc", "memory" ); + printk("*** post launch\n"); + vmcs_dump(vcpu); + ++kvm_stat.exits; save_msrs(vcpu->guest_msrs, NR_BAD_MSRS); [-- Attachment #3: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #4: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <45507C84.70504-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <45507C84.70504-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-07 13:04 ` Hesse, Christian [not found] ` <200611071404.38825.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-07 13:04 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f On Tuesday 07 November 2006 13:31, Avi Kivity wrote: > Hesse, Christian wrote: > >> Then, please apply the attached patch. You will need serial console or > >> netconsole, and to > >> > >> echo 9 > /proc/sysrq-trigger > >> > >> before launching the VM. > > > > There is no patch attached to this mail... > > Sorry, attaching now. There are some undefined values in your code: /usr/src/kvm-module/debug.c: In function 'vmcs_dump': /usr/src/kvm-module/debug.c:924: error: 'HOST_TR_LIMIT' undeclared (first use in this function) /usr/src/kvm-module/debug.c:924: error: (Each undeclared identifier is reported only once /usr/src/kvm-module/debug.c:924: error: for each function it appears in.) /usr/src/kvm-module/debug.c:927: error: 'HOST_GDTR_LIMIT' undeclared (first use in this function) /usr/src/kvm-module/debug.c: In function 'regs_dump': /usr/src/kvm-module/debug.c:1022: error: 'VCPU_REGS_R8' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1023: error: 'VCPU_REGS_R9' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1024: error: 'VCPU_REGS_R10' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1025: error: 'VCPU_REGS_R11' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1026: error: 'VCPU_REGS_R12' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1027: error: 'VCPU_REGS_R13' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1028: error: 'VCPU_REGS_R14' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1029: error: 'VCPU_REGS_R15' undeclared (first use in this function) > >> BTW, what OS are you trying to run in the guest? > > > > I try to boot a Windows XP SP2 install CD. > > Ok. kvm isn't really able to complete the install (Windows will > bluescreen) but it shouldn't lock up either. > > (you can install with qemu and run with kvm I already do have a working qemu installation (that freezes the system as well, that was the first I tried to boot). -- Regards, Chris ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611071404.38825.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611071404.38825.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-07 13:25 ` Avi Kivity [not found] ` <4550893A.1000304-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-07 13:25 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1: Type: text/plain, Size: 716 bytes --] Hesse, Christian wrote: > On Tuesday 07 November 2006 13:31, Avi Kivity wrote: > >> Hesse, Christian wrote: >> >>>> Then, please apply the attached patch. You will need serial console or >>>> netconsole, and to >>>> >>>> echo 9 > /proc/sysrq-trigger >>>> >>>> before launching the VM. >>>> >>> There is no patch attached to this mail... >>> >> Sorry, attaching now. >> > > There are some undefined values in your code: > > /usr/src/kvm-module/debug.c: In function 'vmcs_dump': > /usr/src/kvm-module/debug.c:924: error: 'HOST_TR_LIMIT' undeclared (first use > in this function) > Sorry, refreshed patch attached. -- error compiling committee.c: too many arguments to function [-- Attachment #2: kvm-debug.patch --] [-- Type: text/x-patch, Size: 31493 bytes --] Index: linux-2.6/drivers/kvm/debug.c =================================================================== --- /dev/null +++ linux-2.6/drivers/kvm/debug.c @@ -0,0 +1,1049 @@ +/* + * Kernel-based Virtual Machine driver for Linux + * + * This module enables machines with Intel VT-x extensions to run virtual + * machines without emulation or binary translation. + * + * Debug support + * + * Copyright (C) 2006 Qumranet, Inc. + * + * Authors: + * Yaniv Kamay <yaniv-atKUWr5tajBWk0Htik3J/w@public.gmane.org> + * Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> + * + */ + +#include <linux/highmem.h> + +#include <linux/kvm.h> +#include "kvm.h" +#include "debug.h" + +#ifdef KVM_DEBUG + +static const char *vmx_msr_name[] = { + "MSR_EFER", "MSR_STAR", "MSR_CSTAR", + "MSR_KERNEL_GS_BASE", "MSR_SYSCALL_MASK", "MSR_LSTAR" +}; + +#define NR_VMX_MSR (sizeof(vmx_msr_name) / sizeof(char*)) + +void show_msrs(struct kvm_vcpu *vcpu) +{ + int i; + + for (i = 0; i < NR_VMX_MSR; ++i) { + vcpu_printf(vcpu, "%s: %s=0x%llx\n", + __FUNCTION__, + vmx_msr_name[i], + vcpu->guest_msrs[i].data); + } +} + +void show_code(struct kvm_vcpu *vcpu) +{ + gva_t rip = vmcs_readl(GUEST_RIP); + u8 code[50]; + char buf[30 + 3 * sizeof code]; + int i; + + if (!is_long_mode()) + rip += vmcs_readl(GUEST_CS_BASE); + + kvm_read_guest(vcpu, rip, sizeof code, code); + for (i = 0; i < sizeof code; ++i) + sprintf(buf + i * 3, " %02x", code[i]); + vcpu_printf(vcpu, "code: %lx%s\n", rip, buf); +} + +struct gate_struct { + u16 offset_low; + u16 segment; + unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1; + u16 offset_middle; + u32 offset_high; + u32 zero1; +} __attribute__((packed)); + +void show_irq(struct kvm_vcpu *vcpu, int irq) +{ + unsigned long idt_base = vmcs_readl(GUEST_IDTR_BASE); + unsigned long idt_limit = vmcs_readl(GUEST_IDTR_LIMIT); + struct gate_struct gate; + + if (!is_long_mode()) + vcpu_printf(vcpu, "%s: not in long mode\n", __FUNCTION__); + + if (!is_long_mode() || idt_limit < irq * sizeof(gate)) { + vcpu_printf(vcpu, "%s: 0x%x read_guest err\n", + __FUNCTION__, + irq); + return; + } + + if (kvm_read_guest(vcpu, idt_base + irq * sizeof(gate), sizeof(gate), &gate) != sizeof(gate)) { + vcpu_printf(vcpu, "%s: 0x%x read_guest err\n", + __FUNCTION__, + irq); + return; + } + vcpu_printf(vcpu, "%s: 0x%x handler 0x%llx\n", + __FUNCTION__, + irq, + ((u64)gate.offset_high << 32) | + ((u64)gate.offset_middle << 16) | + gate.offset_low); +} + +void show_page(struct kvm_vcpu *vcpu, + gva_t addr) +{ + u64 *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); + + if (!buf) + return; + + addr &= PAGE_MASK; + if (kvm_read_guest(vcpu, addr, PAGE_SIZE, buf)) { + int i; + for (i = 0; i < PAGE_SIZE / sizeof(u64) ; i++) { + u8 *ptr = (u8*)&buf[i]; + int j; + vcpu_printf(vcpu, " 0x%16.16lx:", + addr + i * sizeof(u64)); + for (j = 0; j < sizeof(u64) ; j++) + vcpu_printf(vcpu, " 0x%2.2x", ptr[j]); + vcpu_printf(vcpu, "\n"); + } + } + kfree(buf); +} + +void show_u64(struct kvm_vcpu *vcpu, gva_t addr) +{ + u64 buf; + + if (kvm_read_guest(vcpu, addr, sizeof(u64), &buf) == sizeof(u64)) { + u8 *ptr = (u8*)&buf; + int j; + vcpu_printf(vcpu, " 0x%16.16lx:", addr); + for (j = 0; j < sizeof(u64) ; j++) + vcpu_printf(vcpu, " 0x%2.2x", ptr[j]); + vcpu_printf(vcpu, "\n"); + } +} + +#define IA32_DEBUGCTL_RESERVED_BITS 0xfffffffffffffe3cULL + +static int is_canonical(unsigned long addr) +{ + return addr == ((long)addr << 16) >> 16; +} + +int vm_entry_test_guest(struct kvm_vcpu *vcpu) +{ + unsigned long cr0; + unsigned long cr4; + unsigned long cr3; + unsigned long dr7; + u64 ia32_debugctl; + unsigned long sysenter_esp; + unsigned long sysenter_eip; + unsigned long rflags; + + int long_mode; + int virtual8086; + + #define RFLAGS_VM (1 << 17) + #define RFLAGS_RF (1 << 9) + + + #define VIR8086_SEG_BASE_TEST(seg)\ + if (vmcs_readl(GUEST_##seg##_BASE) != \ + (unsigned long)vmcs_read16(GUEST_##seg##_SELECTOR) << 4) {\ + vcpu_printf(vcpu, "%s: "#seg" base 0x%lx in "\ + "virtual8086 is not "#seg" selector 0x%x"\ + " shifted right 4 bits\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_BASE),\ + vmcs_read16(GUEST_##seg##_SELECTOR));\ + return 0;\ + } + + #define VIR8086_SEG_LIMIT_TEST(seg)\ + if (vmcs_readl(GUEST_##seg##_LIMIT) != 0x0ffff) { \ + vcpu_printf(vcpu, "%s: "#seg" limit 0x%lx in "\ + "virtual8086 is not 0xffff\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_LIMIT));\ + return 0;\ + } + + #define VIR8086_SEG_AR_TEST(seg)\ + if (vmcs_read32(GUEST_##seg##_AR_BYTES) != 0x0f3) { \ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x in "\ + "virtual8086 is not 0xf3\n",\ + __FUNCTION__,\ + vmcs_read32(GUEST_##seg##_AR_BYTES));\ + return 0;\ + } + + + cr0 = vmcs_readl(GUEST_CR0); + + if (!(cr0 & CR0_PG_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, PG is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_PE_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, PE is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_NE_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, NE is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_WP_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, WP is not set\n", + __FUNCTION__, cr0); + } + + cr4 = vmcs_readl(GUEST_CR4); + + if (!(cr4 & CR4_VMXE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 0x%lx, VMXE is not set\n", + __FUNCTION__, cr4); + return 0; + } + + if (!(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 0x%lx, PAE is not set\n", + __FUNCTION__, cr4); + } + + ia32_debugctl = vmcs_read64(GUEST_IA32_DEBUGCTL); + + if (ia32_debugctl & IA32_DEBUGCTL_RESERVED_BITS ) { + vcpu_printf(vcpu, "%s: ia32_debugctl 0x%llx, reserve bits\n", + __FUNCTION__, ia32_debugctl); + return 0; + } + + long_mode = is_long_mode(); + + if (long_mode) { + } + + if ( long_mode && !(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: long mode and not PAE\n", + __FUNCTION__); + return 0; + } + + cr3 = vmcs_readl(GUEST_CR3); + + if (cr3 & CR3_L_MODE_RESEVED_BITS) { + vcpu_printf(vcpu, "%s: cr3 0x%lx, reserved bits\n", + __FUNCTION__, cr3); + return 0; + } + + if ( !long_mode && (cr4 & CR4_PAE_MASK)) { + /* check the 4 PDPTEs for reserved bits */ + unsigned long pdpt_pfn = cr3 >> PAGE_SHIFT; + int i; + u64 pdpte; + unsigned offset = (cr3 & (PAGE_SIZE-1)) >> 5; + u64 *pdpt = kmap_atomic(pfn_to_page(pdpt_pfn), KM_USER0); + + for (i = 0; i < 4; ++i) { + pdpte = pdpt[offset + i]; + if ((pdpte & 1) && (pdpte & 0xfffffff0000001e6ull)) + break; + } + + kunmap_atomic(pdpt, KM_USER0); + + if (i != 4) { + vcpu_printf(vcpu, "%s: pae cr3[%d] 0x%llx, reserved bits\n", + __FUNCTION__, i, pdpte); + return 0; + } + } + + dr7 = vmcs_readl(GUEST_DR7); + + if (dr7 & ~((1ULL << 32) - 1)) { + vcpu_printf(vcpu, "%s: dr7 0x%lx, reserved bits\n", + __FUNCTION__, dr7); + return 0; + } + + sysenter_esp = vmcs_readl(GUEST_SYSENTER_ESP); + + if (!is_canonical(sysenter_esp)) { + vcpu_printf(vcpu, "%s: sysenter_esp 0x%lx, not canonical\n", + __FUNCTION__, sysenter_esp); + return 0; + } + + sysenter_eip = vmcs_readl(GUEST_SYSENTER_EIP); + + if (!is_canonical(sysenter_eip)) { + vcpu_printf(vcpu, "%s: sysenter_eip 0x%lx, not canonical\n", + __FUNCTION__, sysenter_eip); + return 0; + } + + rflags = vmcs_readl(GUEST_RFLAGS); + virtual8086 = rflags & RFLAGS_VM; + + + if (vmcs_read16(GUEST_TR_SELECTOR) & SELECTOR_TI_MASK) { + vcpu_printf(vcpu, "%s: tr selctor 0x%x, TI is set\n", + __FUNCTION__, vmcs_read16(GUEST_TR_SELECTOR)); + return 0; + } + + if (!(vmcs_read32(GUEST_LDTR_AR_BYTES) & AR_UNUSABLE_MASK) && + vmcs_read16(GUEST_LDTR_SELECTOR) & SELECTOR_TI_MASK) { + vcpu_printf(vcpu, "%s: ldtr selctor 0x%x," + " is usable and TI is set\n", + __FUNCTION__, vmcs_read16(GUEST_LDTR_SELECTOR)); + return 0; + } + + if (!virtual8086 && + (vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK) != + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK)) { + vcpu_printf(vcpu, "%s: ss selctor 0x%x cs selctor 0x%x," + " not same RPL\n", + __FUNCTION__, + vmcs_read16(GUEST_SS_SELECTOR), + vmcs_read16(GUEST_CS_SELECTOR)); + return 0; + } + + if (virtual8086) { + VIR8086_SEG_BASE_TEST(CS); + VIR8086_SEG_BASE_TEST(SS); + VIR8086_SEG_BASE_TEST(DS); + VIR8086_SEG_BASE_TEST(ES); + VIR8086_SEG_BASE_TEST(FS); + VIR8086_SEG_BASE_TEST(GS); + } + + if (!is_canonical(vmcs_readl(GUEST_TR_BASE)) || + !is_canonical(vmcs_readl(GUEST_FS_BASE)) || + !is_canonical(vmcs_readl(GUEST_GS_BASE)) ) { + vcpu_printf(vcpu, "%s: TR 0x%lx FS 0x%lx or GS 0x%lx base" + " is not canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_TR_BASE), + vmcs_readl(GUEST_FS_BASE), + vmcs_readl(GUEST_GS_BASE)); + return 0; + + } + + if (!(vmcs_read32(GUEST_LDTR_AR_BYTES) & AR_UNUSABLE_MASK) && + !is_canonical(vmcs_readl(GUEST_LDTR_BASE))) { + vcpu_printf(vcpu, "%s: LDTR base 0x%lx, usable and is not" + " canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_LDTR_BASE)); + return 0; + } + + if ((vmcs_readl(GUEST_CS_BASE) & ~((1ULL << 32) - 1))) { + vcpu_printf(vcpu, "%s: CS base 0x%lx, not all bits 63-32" + " are zero\n", + __FUNCTION__, + vmcs_readl(GUEST_CS_BASE)); + return 0; + } + + #define SEG_BASE_TEST(seg)\ + if ( !(vmcs_read32(GUEST_##seg##_AR_BYTES) & AR_UNUSABLE_MASK) &&\ + (vmcs_readl(GUEST_##seg##_BASE) & ~((1ULL << 32) - 1))) {\ + vcpu_printf(vcpu, "%s: "#seg" base 0x%lx, is usable and not"\ + " all bits 63-32 are zero\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_BASE));\ + return 0;\ + } + SEG_BASE_TEST(SS); + SEG_BASE_TEST(DS); + SEG_BASE_TEST(ES); + + if (virtual8086) { + VIR8086_SEG_LIMIT_TEST(CS); + VIR8086_SEG_LIMIT_TEST(SS); + VIR8086_SEG_LIMIT_TEST(DS); + VIR8086_SEG_LIMIT_TEST(ES); + VIR8086_SEG_LIMIT_TEST(FS); + VIR8086_SEG_LIMIT_TEST(GS); + } + + if (virtual8086) { + VIR8086_SEG_AR_TEST(CS); + VIR8086_SEG_AR_TEST(SS); + VIR8086_SEG_AR_TEST(DS); + VIR8086_SEG_AR_TEST(ES); + VIR8086_SEG_AR_TEST(FS); + VIR8086_SEG_AR_TEST(GS); + } else { + + u32 cs_ar = vmcs_read32(GUEST_CS_AR_BYTES); + u32 ss_ar = vmcs_read32(GUEST_SS_AR_BYTES); + u32 tr_ar = vmcs_read32(GUEST_TR_AR_BYTES); + u32 ldtr_ar = vmcs_read32(GUEST_LDTR_AR_BYTES); + + #define SEG_G_TEST(seg) { \ + u32 lim = vmcs_read32(GUEST_##seg##_LIMIT); \ + u32 ar = vmcs_read32(GUEST_##seg##_AR_BYTES); \ + int err = 0; \ + if (((lim & ~PAGE_MASK) != ~PAGE_MASK) && (ar & AR_G_MASK)) \ + err = 1; \ + if ((lim & ~((1u << 20) - 1)) && !(ar & AR_G_MASK)) \ + err = 1; \ + if (err) { \ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, G err. lim" \ + " is 0x%x\n", \ + __FUNCTION__, \ + ar, lim); \ + return 0; \ + } \ + } + + + if (!(cs_ar & AR_TYPE_ACCESSES_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, accesses is clear\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_TYPE_CODE_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, code is clear\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, type is sys\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_TYPE_MASK) >= 8 && (cs_ar & AR_TYPE_MASK) < 12 && + AR_DPL(cs_ar) != + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, " + "DPL not as RPL\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_TYPE_MASK) >= 13 && (cs_ar & AR_TYPE_MASK) < 16 && + AR_DPL(cs_ar) > + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, " + "DPL greater than RPL\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, not " + "present\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, reseved" + " bits are set\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (long_mode & (cs_ar & AR_L_MASK) && (cs_ar & AR_DB_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, DB and L are set" + " in long mode\n", + __FUNCTION__, + cs_ar); + return 0; + + } + + SEG_G_TEST(CS); + + if (!(ss_ar & AR_UNUSABLE_MASK)) { + if ((ss_ar & AR_TYPE_MASK) != 3 && + (ss_ar & AR_TYPE_MASK) != 7 ) { + vcpu_printf(vcpu, "%s: ss AR 0x%x, usable and type" + " is not 3 or 7\n", + __FUNCTION__, + ss_ar); + return 0; + } + + if (!(ss_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: ss AR 0x%x, usable and" + " is sys\n", + __FUNCTION__, + ss_ar); + return 0; + } + if (!(ss_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, usable" + " and not present\n", + __FUNCTION__, + ss_ar); + return 0; + } + + if ((ss_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, reseved" + " bits are set\n", + __FUNCTION__, + ss_ar); + return 0; + } + + SEG_G_TEST(SS); + + } + + if (AR_DPL(ss_ar) != + (vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, " + "DPL not as RPL\n", + __FUNCTION__, + ss_ar); + return 0; + } + + #define SEG_AR_TEST(seg) {\ + u32 ar = vmcs_read32(GUEST_##seg##_AR_BYTES);\ + if (!(ar & AR_UNUSABLE_MASK)) {\ + if (!(ar & AR_TYPE_ACCESSES_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "usable and not accesses\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_TYPE_CODE_MASK) &&\ + !(ar & AR_TYPE_READABLE_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "code and not readable\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if (!(ar & AR_S_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, usable and"\ + " is sys\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_TYPE_MASK) >= 0 && \ + (ar & AR_TYPE_MASK) < 12 && \ + AR_DPL(ar) < (vmcs_read16(GUEST_##seg##_SELECTOR) & \ + SELECTOR_RPL_MASK) ) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "DPL less than RPL\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if (!(ar & AR_P_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, usable and"\ + " not present\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_RESERVD_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR"\ + " 0x%x, reseved"\ + " bits are set\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + SEG_G_TEST(seg)\ + }\ + } + +#undef DS +#undef ES +#undef FS +#undef GS + + SEG_AR_TEST(DS); + SEG_AR_TEST(ES); + SEG_AR_TEST(FS); + SEG_AR_TEST(GS); + + // TR test + if (long_mode) { + if ((tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_64_TSS) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, long" + " mode and not 64bit busy" + " tss\n", + __FUNCTION__, + tr_ar); + return 0; + } + } else { + if ((tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_32_TSS && + (tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_16_TSS) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, legacy" + " mode and not 16/32bit " + "busy tss\n", + __FUNCTION__, + tr_ar); + return 0; + } + + } + if ((tr_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, S is set\n", + __FUNCTION__, + tr_ar); + return 0; + } + if (!(tr_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, P is not set\n", + __FUNCTION__, + tr_ar); + return 0; + } + + if ((tr_ar & (AR_RESERVD_MASK| AR_UNUSABLE_MASK))) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, reserved bit are" + " set\n", + __FUNCTION__, + tr_ar); + return 0; + } + SEG_G_TEST(TR); + + // TR test + if (!(ldtr_ar & AR_UNUSABLE_MASK)) { + + if ((ldtr_ar & AR_TYPE_MASK) != AR_TYPE_LDT) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " bad type\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + + if ((ldtr_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " S is set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + + if (!(ldtr_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " P is not set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + if ((ldtr_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " reserved bit are set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + SEG_G_TEST(LDTR); + } + } + + // GDTR and IDTR + + + #define IDT_GDT_TEST(reg)\ + if (!is_canonical(vmcs_readl(GUEST_##reg##_BASE))) {\ + vcpu_printf(vcpu, "%s: "#reg" BASE 0x%lx, not canonical\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##reg##_BASE));\ + return 0;\ + }\ + if (vmcs_read32(GUEST_##reg##_LIMIT) >> 16) {\ + vcpu_printf(vcpu, "%s: "#reg" LIMIT 0x%x, size err\n",\ + __FUNCTION__,\ + vmcs_read32(GUEST_##reg##_LIMIT));\ + return 0;\ + }\ + + IDT_GDT_TEST(GDTR); + IDT_GDT_TEST(IDTR); + + + // RIP + + if ((!long_mode || !(vmcs_read32(GUEST_CS_AR_BYTES) & AR_L_MASK)) && + vmcs_readl(GUEST_RIP) & ~((1ULL << 32) - 1) ){ + vcpu_printf(vcpu, "%s: RIP 0x%lx, size err\n", + __FUNCTION__, + vmcs_readl(GUEST_RIP)); + return 0; + } + + if (!is_canonical(vmcs_readl(GUEST_RIP))) { + vcpu_printf(vcpu, "%s: RIP 0x%lx, not canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_RIP)); + return 0; + } + + // RFLAGS + #define RFLAGS_RESEVED_CLEAR_BITS\ + (~((1ULL << 22) - 1) | (1ULL << 15) | (1ULL << 5) | (1ULL << 3)) + #define RFLAGS_RESEVED_SET_BITS (1 << 1) + + if ((rflags & RFLAGS_RESEVED_CLEAR_BITS) || + !(rflags & RFLAGS_RESEVED_SET_BITS)) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, reserved bits 0x%llx 0x%x\n", + __FUNCTION__, + rflags, + RFLAGS_RESEVED_CLEAR_BITS, + RFLAGS_RESEVED_SET_BITS); + return 0; + } + + if (long_mode && virtual8086) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, vm and long mode\n", + __FUNCTION__, + rflags); + return 0; + } + + + if (!(rflags & RFLAGS_RF)) { + u32 vm_entry_info = vmcs_read32(VM_ENTRY_INTR_INFO_FIELD); + if ((vm_entry_info & INTR_INFO_VALID_MASK) && + (vm_entry_info & INTR_INFO_INTR_TYPE_MASK) == + INTR_TYPE_EXT_INTR) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, external" + " interrupt and RF is clear\n", + __FUNCTION__, + rflags); + return 0; + } + + } + + // to be continued from Checks on Guest Non-Register State (22.3.1.5) + return 1; +} + +static int check_fixed_bits(struct kvm_vcpu *vcpu, const char *reg, + unsigned long cr, + u32 msr_fixed_0, u32 msr_fixed_1) +{ + u64 fixed_bits_0, fixed_bits_1; + + rdmsrl(msr_fixed_0, fixed_bits_0); + rdmsrl(msr_fixed_1, fixed_bits_1); + if ((cr & fixed_bits_0) != fixed_bits_0) { + vcpu_printf(vcpu, "%s: %s (%lx) has one of %llx unset\n", + __FUNCTION__, reg, cr, fixed_bits_0); + return 0; + } + if ((~cr & ~fixed_bits_1) != ~fixed_bits_1) { + vcpu_printf(vcpu, "%s: %s (%lx) has one of %llx set\n", + __FUNCTION__, reg, cr, ~fixed_bits_1); + return 0; + } + return 1; +} + +static int phys_addr_width(void) +{ + unsigned eax, ebx, ecx, edx; + + cpuid(0x80000008, &eax, &ebx, &ecx, &edx); + return eax & 0xff; +} + +static int check_canonical(struct kvm_vcpu *vcpu, const char *name, + unsigned long reg) +{ +#ifdef __x86_64__ + unsigned long x; + + if (sizeof(reg) == 4) + return 1; + x = (long)reg >> 48; + if (!(x == 0 || x == ~0UL)) { + vcpu_printf(vcpu, "%s: %s (%lx) not canonical\n", + __FUNCTION__, name, reg); + return 0; + } +#endif + return 1; +} + +static int check_selector(struct kvm_vcpu *vcpu, const char *name, + int rpl_ti, int null, + u16 sel) +{ + if (rpl_ti && (sel & 7)) { + vcpu_printf(vcpu, "%s: %s (%x) nonzero rpl or ti\n", + __FUNCTION__, name, sel); + return 0; + } + if (null && !sel) { + vcpu_printf(vcpu, "%s: %s (%x) zero\n", + __FUNCTION__, name, sel); + return 0; + } + return 1; +} + +#define MSR_IA32_VMX_CR0_FIXED0 0x486 +#define MSR_IA32_VMX_CR0_FIXED1 0x487 + +#define MSR_IA32_VMX_CR4_FIXED0 0x488 +#define MSR_IA32_VMX_CR4_FIXED1 0x489 + +int vm_entry_test_host(struct kvm_vcpu *vcpu) +{ + int r = 0; + unsigned long cr0 = vmcs_readl(HOST_CR0); + unsigned long cr4 = vmcs_readl(HOST_CR4); + unsigned long cr3 = vmcs_readl(HOST_CR3); + int host_64; + + host_64 = vmcs_read32(VM_EXIT_CONTROLS) & VM_EXIT_HOST_ADD_SPACE_SIZE; + + /* 22.2.2 */ + r &= check_fixed_bits(vcpu, "host cr0", cr0, MSR_IA32_VMX_CR0_FIXED0, + MSR_IA32_VMX_CR0_FIXED1); + + r &= check_fixed_bits(vcpu, "host cr0", cr4, MSR_IA32_VMX_CR4_FIXED0, + MSR_IA32_VMX_CR4_FIXED1); + if ((u64)cr3 >> phys_addr_width()) { + vcpu_printf(vcpu, "%s: cr3 (%lx) vs phys addr width\n", + __FUNCTION__, cr3); + r = 0; + } + + r &= check_canonical(vcpu, "host ia32_sysenter_eip", + vmcs_readl(HOST_IA32_SYSENTER_EIP)); + r &= check_canonical(vcpu, "host ia32_sysenter_esp", + vmcs_readl(HOST_IA32_SYSENTER_ESP)); + + /* 22.2.3 */ + r &= check_selector(vcpu, "host cs", 1, 1, + vmcs_read16(HOST_CS_SELECTOR)); + r &= check_selector(vcpu, "host ss", 1, !host_64, + vmcs_read16(HOST_SS_SELECTOR)); + r &= check_selector(vcpu, "host ds", 1, 0, + vmcs_read16(HOST_DS_SELECTOR)); + r &= check_selector(vcpu, "host es", 1, 0, + vmcs_read16(HOST_ES_SELECTOR)); + r &= check_selector(vcpu, "host fs", 1, 0, + vmcs_read16(HOST_FS_SELECTOR)); + r &= check_selector(vcpu, "host gs", 1, 0, + vmcs_read16(HOST_GS_SELECTOR)); + r &= check_selector(vcpu, "host tr", 1, 1, + vmcs_read16(HOST_TR_SELECTOR)); + +#ifdef __x86_64__ + r &= check_canonical(vcpu, "host fs base", + vmcs_readl(HOST_FS_BASE)); + r &= check_canonical(vcpu, "host gs base", + vmcs_readl(HOST_GS_BASE)); + r &= check_canonical(vcpu, "host gdtr base", + vmcs_readl(HOST_GDTR_BASE)); + r &= check_canonical(vcpu, "host idtr base", + vmcs_readl(HOST_IDTR_BASE)); +#endif + + /* 22.2.4 */ +#ifdef __x86_64__ + if (!host_64) { + vcpu_printf(vcpu, "%s: vm exit controls: !64 bit host\n", + __FUNCTION__); + r = 0; + } + if (!(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 (%lx): !pae\n", + __FUNCTION__, cr4); + r = 0; + } + r &= check_canonical(vcpu, "host rip", vmcs_readl(HOST_RIP)); +#endif + + return r; +} + +int vm_entry_test(struct kvm_vcpu *vcpu) +{ + int rg, rh; + + rg = vm_entry_test_guest(vcpu); + rh = vm_entry_test_host(vcpu); + return rg && rh; +} + +void vmcs_dump(struct kvm_vcpu *vcpu) +{ + vcpu_printf(vcpu, "************************ vmcs_dump ************************\n"); + vcpu_printf(vcpu, "HOST_CR0 0x%lx\n", vmcs_readl(HOST_CR0)); + vcpu_printf(vcpu, "HOST_CR3 0x%lx\n", vmcs_readl(HOST_CR3)); + vcpu_printf(vcpu, "HOST_CR4 0x%lx\n", vmcs_readl(HOST_CR4)); + + vcpu_printf(vcpu, "HOST_TR_SELECTOR 0x%x\n", vmcs_read16(HOST_TR_SELECTOR)); + vcpu_printf(vcpu, "HOST_TR_BASE 0x%lx\n", vmcs_readl(HOST_TR_BASE)); + + vcpu_printf(vcpu, "HOST_GDTR_BASE 0x%lx\n", vmcs_readl(HOST_GDTR_BASE)); + vcpu_printf(vcpu, "HOST_LDTR_SELECTOR 0x%x\n", vmcs_read16(HOST_TR_SELECTOR)); + vcpu_printf(vcpu, "HOST_IDTR_BASE 0x%lx\n", vmcs_readl(HOST_IDTR_BASE)); + + vcpu_printf(vcpu, "HOST_CS_SELECTOR 0x%x\n", vmcs_read16(HOST_CS_SELECTOR)); + vcpu_printf(vcpu, "HOST_DS_SELECTOR 0x%x\n", vmcs_read16(HOST_DS_SELECTOR)); + vcpu_printf(vcpu, "HOST_ES_SELECTOR 0x%x\n", vmcs_read16(HOST_ES_SELECTOR)); + vcpu_printf(vcpu, "HOST_FS_SELECTOR 0x%x\n", vmcs_read16(HOST_FS_SELECTOR)); + vcpu_printf(vcpu, "HOST_GS_SELECTOR 0x%x\n", vmcs_read16(HOST_GS_SELECTOR)); + vcpu_printf(vcpu, "HOST_SS_SELECTOR 0x%x\n", vmcs_read16(HOST_SS_SELECTOR)); + + + vcpu_printf(vcpu, "VM_ENTRY_CONTROLS 0x%x\n", vmcs_read32(VM_ENTRY_CONTROLS)); + + vcpu_printf(vcpu, "GUEST_CR0 0x%lx\n", vmcs_readl(GUEST_CR0)); + vcpu_printf(vcpu, "GUEST_CR3 0x%lx\n", vmcs_readl(GUEST_CR3)); + vcpu_printf(vcpu, "GUEST_CR4 0x%lx\n", vmcs_readl(GUEST_CR4)); + + vcpu_printf(vcpu, "GUEST_SYSENTER_ESP 0x%lx\n", vmcs_readl(GUEST_SYSENTER_ESP)); + vcpu_printf(vcpu, "GUEST_SYSENTER_EIP 0x%lx\n", vmcs_readl(GUEST_SYSENTER_EIP)); + + + vcpu_printf(vcpu, "GUEST_IA32_DEBUGCTL 0x%llx\n", vmcs_read64(GUEST_IA32_DEBUGCTL)); + vcpu_printf(vcpu, "GUEST_DR7 0x%lx\n", vmcs_readl(GUEST_DR7)); + + vcpu_printf(vcpu, "GUEST_RFLAGS 0x%lx\n", vmcs_readl(GUEST_RFLAGS)); + vcpu_printf(vcpu, "GUEST_RIP 0x%lx\n", vmcs_readl(GUEST_RIP)); + + vcpu_printf(vcpu, "GUEST_CS_SELECTOR 0x%x\n", vmcs_read16(GUEST_CS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_DS_SELECTOR 0x%x\n", vmcs_read16(GUEST_DS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_ES_SELECTOR 0x%x\n", vmcs_read16(GUEST_ES_SELECTOR)); + vcpu_printf(vcpu, "GUEST_FS_SELECTOR 0x%x\n", vmcs_read16(GUEST_FS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_GS_SELECTOR 0x%x\n", vmcs_read16(GUEST_GS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_SS_SELECTOR 0x%x\n", vmcs_read16(GUEST_SS_SELECTOR)); + + vcpu_printf(vcpu, "GUEST_TR_SELECTOR 0x%x\n", vmcs_read16(GUEST_TR_SELECTOR)); + vcpu_printf(vcpu, "GUEST_LDTR_SELECTOR 0x%x\n", vmcs_read16(GUEST_LDTR_SELECTOR)); + + vcpu_printf(vcpu, "GUEST_CS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_CS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_DS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_DS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_ES_AR_BYTES 0x%x\n", vmcs_read32(GUEST_ES_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_FS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_FS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_GS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_GS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_SS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_SS_AR_BYTES)); + + vcpu_printf(vcpu, "GUEST_LDTR_AR_BYTES 0x%x\n", vmcs_read32(GUEST_LDTR_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_TR_AR_BYTES 0x%x\n", vmcs_read32(GUEST_TR_AR_BYTES)); + + vcpu_printf(vcpu, "GUEST_CS_BASE 0x%lx\n", vmcs_readl(GUEST_CS_BASE)); + vcpu_printf(vcpu, "GUEST_DS_BASE 0x%lx\n", vmcs_readl(GUEST_DS_BASE)); + vcpu_printf(vcpu, "GUEST_ES_BASE 0x%lx\n", vmcs_readl(GUEST_ES_BASE)); + vcpu_printf(vcpu, "GUEST_FS_BASE 0x%lx\n", vmcs_readl(GUEST_FS_BASE)); + vcpu_printf(vcpu, "GUEST_GS_BASE 0x%lx\n", vmcs_readl(GUEST_GS_BASE)); + vcpu_printf(vcpu, "GUEST_SS_BASE 0x%lx\n", vmcs_readl(GUEST_SS_BASE)); + + + vcpu_printf(vcpu, "GUEST_LDTR_BASE 0x%lx\n", vmcs_readl(GUEST_LDTR_BASE)); + vcpu_printf(vcpu, "GUEST_TR_BASE 0x%lx\n", vmcs_readl(GUEST_TR_BASE)); + + vcpu_printf(vcpu, "GUEST_CS_LIMIT 0x%x\n", vmcs_read32(GUEST_CS_LIMIT)); + vcpu_printf(vcpu, "GUEST_DS_LIMIT 0x%x\n", vmcs_read32(GUEST_DS_LIMIT)); + vcpu_printf(vcpu, "GUEST_ES_LIMIT 0x%x\n", vmcs_read32(GUEST_ES_LIMIT)); + vcpu_printf(vcpu, "GUEST_FS_LIMIT 0x%x\n", vmcs_read32(GUEST_FS_LIMIT)); + vcpu_printf(vcpu, "GUEST_GS_LIMIT 0x%x\n", vmcs_read32(GUEST_GS_LIMIT)); + vcpu_printf(vcpu, "GUEST_SS_LIMIT 0x%x\n", vmcs_read32(GUEST_SS_LIMIT)); + + vcpu_printf(vcpu, "GUEST_LDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_LDTR_LIMIT)); + vcpu_printf(vcpu, "GUEST_TR_LIMIT 0x%x\n", vmcs_read32(GUEST_TR_LIMIT)); + + vcpu_printf(vcpu, "GUEST_GDTR_BASE 0x%lx\n", vmcs_readl(GUEST_GDTR_BASE)); + vcpu_printf(vcpu, "GUEST_IDTR_BASE 0x%lx\n", vmcs_readl(GUEST_IDTR_BASE)); + + vcpu_printf(vcpu, "GUEST_GDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_GDTR_LIMIT)); + vcpu_printf(vcpu, "GUEST_IDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_IDTR_LIMIT)); + vcpu_printf(vcpu, "***********************************************************\n"); +} + +void regs_dump(struct kvm_vcpu *vcpu) +{ + #define REG_DUMP(reg) \ + vcpu_printf(vcpu, #reg" = 0x%lx\n", vcpu->regs[VCPU_REGS_##reg]) + #define VMCS_REG_DUMP(reg) \ + vcpu_printf(vcpu, #reg" = 0x%lx\n", vmcs_readl(GUEST_##reg)) + + vcpu_printf(vcpu, "************************ regs_dump ************************\n"); + REG_DUMP(RAX); + REG_DUMP(RBX); + REG_DUMP(RCX); + REG_DUMP(RDX); + REG_DUMP(RSP); + REG_DUMP(RBP); + REG_DUMP(RSI); + REG_DUMP(RDI); + REG_DUMP(R8); + REG_DUMP(R9); + REG_DUMP(R10); + REG_DUMP(R11); + REG_DUMP(R12); + REG_DUMP(R13); + REG_DUMP(R14); + REG_DUMP(R15); + + VMCS_REG_DUMP(RSP); + VMCS_REG_DUMP(RIP); + VMCS_REG_DUMP(RFLAGS); + + vcpu_printf(vcpu, "***********************************************************\n"); +} + +void sregs_dump(struct kvm_vcpu *vcpu) +{ + vcpu_printf(vcpu, "************************ sregs_dump ************************\n"); + vcpu_printf(vcpu, "cr0 = 0x%lx\n", guest_cr0()); + vcpu_printf(vcpu, "cr2 = 0x%lx\n", vcpu->cr2); + vcpu_printf(vcpu, "cr3 = 0x%lx\n", vcpu->cr3); + vcpu_printf(vcpu, "cr4 = 0x%lx\n", guest_cr4()); + vcpu_printf(vcpu, "cr8 = 0x%lx\n", vcpu->cr8); + vcpu_printf(vcpu, "shadow_efer = 0x%llx\n", vcpu->shadow_efer); + vmcs_dump(vcpu); + vcpu_printf(vcpu, "***********************************************************\n"); +} + +#endif + Index: linux-2.6/drivers/kvm/debug.h =================================================================== --- /dev/null +++ linux-2.6/drivers/kvm/debug.h @@ -0,0 +1,21 @@ +#ifndef __KVM_DEBUG_H +#define __KVM_DEBUG_H + +#ifdef KVM_DEBUG + +void show_msrs(struct kvm_vcpu *vcpu); + + +void show_irq(struct kvm_vcpu *vcpu, int irq); +void show_page(struct kvm_vcpu *vcpu, gva_t addr); +void show_u64(struct kvm_vcpu *vcpu, gva_t addr); +void show_code(struct kvm_vcpu *vcpu); +int vm_entry_test(struct kvm_vcpu *vcpu); + +void vmcs_dump(struct kvm_vcpu *vcpu); +void regs_dump(struct kvm_vcpu *vcpu); +void sregs_dump(struct kvm_vcpu *vcpu); + +#endif + +#endif Index: linux-2.6/drivers/kvm/kvm.h =================================================================== --- linux-2.6.orig/drivers/kvm/kvm.h +++ linux-2.6/drivers/kvm/kvm.h @@ -9,6 +9,8 @@ #include "vmx.h" +#define KVM_DEBUG 1 + #define CR0_PE_MASK (1ULL << 0) #define CR0_TS_MASK (1ULL << 3) #define CR0_NE_MASK (1ULL << 5) Index: linux-2.6/drivers/kvm/kvm_main.c =================================================================== --- linux-2.6.orig/drivers/kvm/kvm_main.c +++ linux-2.6/drivers/kvm/kvm_main.c @@ -33,6 +33,7 @@ #include "vmx.h" #include "x86_emulate.h" +#include "debug.h" MODULE_AUTHOR("Qumranet"); MODULE_LICENSE("GPL"); @@ -1107,6 +1108,9 @@ static int kvm_vcpu_setup(struct kvm_vcp int nr_good_msrs; + printk("*** vcpu_setup begin\n"); + vmcs_dump(vcpu); + if (!init_rmode_tss(vcpu->kvm)) { ret = 0; goto out; @@ -1303,6 +1307,9 @@ static int kvm_vcpu_setup(struct kvm_vcp ret = kvm_mmu_init(vcpu); + printk("*** vcpu_setup end\n"); + vmcs_dump(vcpu); + return ret; out_free_guest_msrs: @@ -2618,6 +2625,9 @@ again: fx_save(vcpu->host_fx_image); fx_restore(vcpu->guest_fx_image); + printk("*** pre launch\n"); + vmcs_dump(vcpu); + save_msrs(vcpu->host_msrs, vcpu->nmsrs); load_msrs(vcpu->guest_msrs, NR_BAD_MSRS); @@ -2740,6 +2750,9 @@ again: [cr2]"i"(offsetof(struct kvm_vcpu, cr2)) : "cc", "memory" ); + printk("*** post launch\n"); + vmcs_dump(vcpu); + ++kvm_stat.exits; save_msrs(vcpu->guest_msrs, NR_BAD_MSRS); [-- Attachment #3: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #4: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <4550893A.1000304-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <4550893A.1000304-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-07 13:46 ` Hesse, Christian [not found] ` <200611071446.17870.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-07 13:46 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1: Type: text/plain, Size: 1817 bytes --] On Tuesday 07 November 2006 14:25, Avi Kivity wrote: > Hesse, Christian wrote: > > On Tuesday 07 November 2006 13:31, Avi Kivity wrote: > >> Hesse, Christian wrote: > >>>> Then, please apply the attached patch. You will need serial console > >>>> or netconsole, and to > >>>> > >>>> echo 9 > /proc/sysrq-trigger > >>>> > >>>> before launching the VM. > >>> > >>> There is no patch attached to this mail... > >> > >> Sorry, attaching now. > > > > There are some undefined values in your code: > > > > /usr/src/kvm-module/debug.c: In function 'vmcs_dump': > > /usr/src/kvm-module/debug.c:924: error: 'HOST_TR_LIMIT' undeclared (first > > use in this function) > > Sorry, refreshed patch attached. Looks better, but you did not catch them all. /usr/src/kvm-module/debug.c: In function 'regs_dump': /usr/src/kvm-module/debug.c:1019: error: 'VCPU_REGS_R8' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1019: error: (Each undeclared identifier is reported only once /usr/src/kvm-module/debug.c:1019: error: for each function it appears in.) /usr/src/kvm-module/debug.c:1020: error: 'VCPU_REGS_R9' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1021: error: 'VCPU_REGS_R10' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1022: error: 'VCPU_REGS_R11' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1023: error: 'VCPU_REGS_R12' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1024: error: 'VCPU_REGS_R13' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1025: error: 'VCPU_REGS_R14' undeclared (first use in this function) /usr/src/kvm-module/debug.c:1026: error: 'VCPU_REGS_R15' undeclared (first use in this function) -- Regards, Chris [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611071446.17870.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611071446.17870.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-07 14:11 ` Avi Kivity [not found] ` <4550941E.4070409-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-07 14:11 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1: Type: text/plain, Size: 1090 bytes --] Hesse, Christian wrote: > On Tuesday 07 November 2006 14:25, Avi Kivity wrote: > >> Hesse, Christian wrote: >> >>> On Tuesday 07 November 2006 13:31, Avi Kivity wrote: >>> >>>> Hesse, Christian wrote: >>>> >>>>>> Then, please apply the attached patch. You will need serial console >>>>>> or netconsole, and to >>>>>> >>>>>> echo 9 > /proc/sysrq-trigger >>>>>> >>>>>> before launching the VM. >>>>>> >>>>> There is no patch attached to this mail... >>>>> >>>> Sorry, attaching now. >>>> >>> There are some undefined values in your code: >>> >>> /usr/src/kvm-module/debug.c: In function 'vmcs_dump': >>> /usr/src/kvm-module/debug.c:924: error: 'HOST_TR_LIMIT' undeclared (first >>> use in this function) >>> >> Sorry, refreshed patch attached. >> > > Looks better, but you did not catch them all. > > Forgot you're using 32-bit. #ifdef'ed out. Is this machine a laptop? If so, we may be seeing interaction between system management mode and VT. -- error compiling committee.c: too many arguments to function [-- Attachment #2: kvm-debug.patch --] [-- Type: text/x-patch, Size: 31520 bytes --] Index: linux-2.6/drivers/kvm/debug.c =================================================================== --- /dev/null +++ linux-2.6/drivers/kvm/debug.c @@ -0,0 +1,1051 @@ +/* + * Kernel-based Virtual Machine driver for Linux + * + * This module enables machines with Intel VT-x extensions to run virtual + * machines without emulation or binary translation. + * + * Debug support + * + * Copyright (C) 2006 Qumranet, Inc. + * + * Authors: + * Yaniv Kamay <yaniv-atKUWr5tajBWk0Htik3J/w@public.gmane.org> + * Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> + * + */ + +#include <linux/highmem.h> + +#include <linux/kvm.h> +#include "kvm.h" +#include "debug.h" + +#ifdef KVM_DEBUG + +static const char *vmx_msr_name[] = { + "MSR_EFER", "MSR_STAR", "MSR_CSTAR", + "MSR_KERNEL_GS_BASE", "MSR_SYSCALL_MASK", "MSR_LSTAR" +}; + +#define NR_VMX_MSR (sizeof(vmx_msr_name) / sizeof(char*)) + +void show_msrs(struct kvm_vcpu *vcpu) +{ + int i; + + for (i = 0; i < NR_VMX_MSR; ++i) { + vcpu_printf(vcpu, "%s: %s=0x%llx\n", + __FUNCTION__, + vmx_msr_name[i], + vcpu->guest_msrs[i].data); + } +} + +void show_code(struct kvm_vcpu *vcpu) +{ + gva_t rip = vmcs_readl(GUEST_RIP); + u8 code[50]; + char buf[30 + 3 * sizeof code]; + int i; + + if (!is_long_mode()) + rip += vmcs_readl(GUEST_CS_BASE); + + kvm_read_guest(vcpu, rip, sizeof code, code); + for (i = 0; i < sizeof code; ++i) + sprintf(buf + i * 3, " %02x", code[i]); + vcpu_printf(vcpu, "code: %lx%s\n", rip, buf); +} + +struct gate_struct { + u16 offset_low; + u16 segment; + unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1; + u16 offset_middle; + u32 offset_high; + u32 zero1; +} __attribute__((packed)); + +void show_irq(struct kvm_vcpu *vcpu, int irq) +{ + unsigned long idt_base = vmcs_readl(GUEST_IDTR_BASE); + unsigned long idt_limit = vmcs_readl(GUEST_IDTR_LIMIT); + struct gate_struct gate; + + if (!is_long_mode()) + vcpu_printf(vcpu, "%s: not in long mode\n", __FUNCTION__); + + if (!is_long_mode() || idt_limit < irq * sizeof(gate)) { + vcpu_printf(vcpu, "%s: 0x%x read_guest err\n", + __FUNCTION__, + irq); + return; + } + + if (kvm_read_guest(vcpu, idt_base + irq * sizeof(gate), sizeof(gate), &gate) != sizeof(gate)) { + vcpu_printf(vcpu, "%s: 0x%x read_guest err\n", + __FUNCTION__, + irq); + return; + } + vcpu_printf(vcpu, "%s: 0x%x handler 0x%llx\n", + __FUNCTION__, + irq, + ((u64)gate.offset_high << 32) | + ((u64)gate.offset_middle << 16) | + gate.offset_low); +} + +void show_page(struct kvm_vcpu *vcpu, + gva_t addr) +{ + u64 *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); + + if (!buf) + return; + + addr &= PAGE_MASK; + if (kvm_read_guest(vcpu, addr, PAGE_SIZE, buf)) { + int i; + for (i = 0; i < PAGE_SIZE / sizeof(u64) ; i++) { + u8 *ptr = (u8*)&buf[i]; + int j; + vcpu_printf(vcpu, " 0x%16.16lx:", + addr + i * sizeof(u64)); + for (j = 0; j < sizeof(u64) ; j++) + vcpu_printf(vcpu, " 0x%2.2x", ptr[j]); + vcpu_printf(vcpu, "\n"); + } + } + kfree(buf); +} + +void show_u64(struct kvm_vcpu *vcpu, gva_t addr) +{ + u64 buf; + + if (kvm_read_guest(vcpu, addr, sizeof(u64), &buf) == sizeof(u64)) { + u8 *ptr = (u8*)&buf; + int j; + vcpu_printf(vcpu, " 0x%16.16lx:", addr); + for (j = 0; j < sizeof(u64) ; j++) + vcpu_printf(vcpu, " 0x%2.2x", ptr[j]); + vcpu_printf(vcpu, "\n"); + } +} + +#define IA32_DEBUGCTL_RESERVED_BITS 0xfffffffffffffe3cULL + +static int is_canonical(unsigned long addr) +{ + return addr == ((long)addr << 16) >> 16; +} + +int vm_entry_test_guest(struct kvm_vcpu *vcpu) +{ + unsigned long cr0; + unsigned long cr4; + unsigned long cr3; + unsigned long dr7; + u64 ia32_debugctl; + unsigned long sysenter_esp; + unsigned long sysenter_eip; + unsigned long rflags; + + int long_mode; + int virtual8086; + + #define RFLAGS_VM (1 << 17) + #define RFLAGS_RF (1 << 9) + + + #define VIR8086_SEG_BASE_TEST(seg)\ + if (vmcs_readl(GUEST_##seg##_BASE) != \ + (unsigned long)vmcs_read16(GUEST_##seg##_SELECTOR) << 4) {\ + vcpu_printf(vcpu, "%s: "#seg" base 0x%lx in "\ + "virtual8086 is not "#seg" selector 0x%x"\ + " shifted right 4 bits\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_BASE),\ + vmcs_read16(GUEST_##seg##_SELECTOR));\ + return 0;\ + } + + #define VIR8086_SEG_LIMIT_TEST(seg)\ + if (vmcs_readl(GUEST_##seg##_LIMIT) != 0x0ffff) { \ + vcpu_printf(vcpu, "%s: "#seg" limit 0x%lx in "\ + "virtual8086 is not 0xffff\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_LIMIT));\ + return 0;\ + } + + #define VIR8086_SEG_AR_TEST(seg)\ + if (vmcs_read32(GUEST_##seg##_AR_BYTES) != 0x0f3) { \ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x in "\ + "virtual8086 is not 0xf3\n",\ + __FUNCTION__,\ + vmcs_read32(GUEST_##seg##_AR_BYTES));\ + return 0;\ + } + + + cr0 = vmcs_readl(GUEST_CR0); + + if (!(cr0 & CR0_PG_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, PG is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_PE_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, PE is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_NE_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, NE is not set\n", + __FUNCTION__, cr0); + return 0; + } + + if (!(cr0 & CR0_WP_MASK)) { + vcpu_printf(vcpu, "%s: cr0 0x%lx, WP is not set\n", + __FUNCTION__, cr0); + } + + cr4 = vmcs_readl(GUEST_CR4); + + if (!(cr4 & CR4_VMXE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 0x%lx, VMXE is not set\n", + __FUNCTION__, cr4); + return 0; + } + + if (!(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 0x%lx, PAE is not set\n", + __FUNCTION__, cr4); + } + + ia32_debugctl = vmcs_read64(GUEST_IA32_DEBUGCTL); + + if (ia32_debugctl & IA32_DEBUGCTL_RESERVED_BITS ) { + vcpu_printf(vcpu, "%s: ia32_debugctl 0x%llx, reserve bits\n", + __FUNCTION__, ia32_debugctl); + return 0; + } + + long_mode = is_long_mode(); + + if (long_mode) { + } + + if ( long_mode && !(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: long mode and not PAE\n", + __FUNCTION__); + return 0; + } + + cr3 = vmcs_readl(GUEST_CR3); + + if (cr3 & CR3_L_MODE_RESEVED_BITS) { + vcpu_printf(vcpu, "%s: cr3 0x%lx, reserved bits\n", + __FUNCTION__, cr3); + return 0; + } + + if ( !long_mode && (cr4 & CR4_PAE_MASK)) { + /* check the 4 PDPTEs for reserved bits */ + unsigned long pdpt_pfn = cr3 >> PAGE_SHIFT; + int i; + u64 pdpte; + unsigned offset = (cr3 & (PAGE_SIZE-1)) >> 5; + u64 *pdpt = kmap_atomic(pfn_to_page(pdpt_pfn), KM_USER0); + + for (i = 0; i < 4; ++i) { + pdpte = pdpt[offset + i]; + if ((pdpte & 1) && (pdpte & 0xfffffff0000001e6ull)) + break; + } + + kunmap_atomic(pdpt, KM_USER0); + + if (i != 4) { + vcpu_printf(vcpu, "%s: pae cr3[%d] 0x%llx, reserved bits\n", + __FUNCTION__, i, pdpte); + return 0; + } + } + + dr7 = vmcs_readl(GUEST_DR7); + + if (dr7 & ~((1ULL << 32) - 1)) { + vcpu_printf(vcpu, "%s: dr7 0x%lx, reserved bits\n", + __FUNCTION__, dr7); + return 0; + } + + sysenter_esp = vmcs_readl(GUEST_SYSENTER_ESP); + + if (!is_canonical(sysenter_esp)) { + vcpu_printf(vcpu, "%s: sysenter_esp 0x%lx, not canonical\n", + __FUNCTION__, sysenter_esp); + return 0; + } + + sysenter_eip = vmcs_readl(GUEST_SYSENTER_EIP); + + if (!is_canonical(sysenter_eip)) { + vcpu_printf(vcpu, "%s: sysenter_eip 0x%lx, not canonical\n", + __FUNCTION__, sysenter_eip); + return 0; + } + + rflags = vmcs_readl(GUEST_RFLAGS); + virtual8086 = rflags & RFLAGS_VM; + + + if (vmcs_read16(GUEST_TR_SELECTOR) & SELECTOR_TI_MASK) { + vcpu_printf(vcpu, "%s: tr selctor 0x%x, TI is set\n", + __FUNCTION__, vmcs_read16(GUEST_TR_SELECTOR)); + return 0; + } + + if (!(vmcs_read32(GUEST_LDTR_AR_BYTES) & AR_UNUSABLE_MASK) && + vmcs_read16(GUEST_LDTR_SELECTOR) & SELECTOR_TI_MASK) { + vcpu_printf(vcpu, "%s: ldtr selctor 0x%x," + " is usable and TI is set\n", + __FUNCTION__, vmcs_read16(GUEST_LDTR_SELECTOR)); + return 0; + } + + if (!virtual8086 && + (vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK) != + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK)) { + vcpu_printf(vcpu, "%s: ss selctor 0x%x cs selctor 0x%x," + " not same RPL\n", + __FUNCTION__, + vmcs_read16(GUEST_SS_SELECTOR), + vmcs_read16(GUEST_CS_SELECTOR)); + return 0; + } + + if (virtual8086) { + VIR8086_SEG_BASE_TEST(CS); + VIR8086_SEG_BASE_TEST(SS); + VIR8086_SEG_BASE_TEST(DS); + VIR8086_SEG_BASE_TEST(ES); + VIR8086_SEG_BASE_TEST(FS); + VIR8086_SEG_BASE_TEST(GS); + } + + if (!is_canonical(vmcs_readl(GUEST_TR_BASE)) || + !is_canonical(vmcs_readl(GUEST_FS_BASE)) || + !is_canonical(vmcs_readl(GUEST_GS_BASE)) ) { + vcpu_printf(vcpu, "%s: TR 0x%lx FS 0x%lx or GS 0x%lx base" + " is not canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_TR_BASE), + vmcs_readl(GUEST_FS_BASE), + vmcs_readl(GUEST_GS_BASE)); + return 0; + + } + + if (!(vmcs_read32(GUEST_LDTR_AR_BYTES) & AR_UNUSABLE_MASK) && + !is_canonical(vmcs_readl(GUEST_LDTR_BASE))) { + vcpu_printf(vcpu, "%s: LDTR base 0x%lx, usable and is not" + " canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_LDTR_BASE)); + return 0; + } + + if ((vmcs_readl(GUEST_CS_BASE) & ~((1ULL << 32) - 1))) { + vcpu_printf(vcpu, "%s: CS base 0x%lx, not all bits 63-32" + " are zero\n", + __FUNCTION__, + vmcs_readl(GUEST_CS_BASE)); + return 0; + } + + #define SEG_BASE_TEST(seg)\ + if ( !(vmcs_read32(GUEST_##seg##_AR_BYTES) & AR_UNUSABLE_MASK) &&\ + (vmcs_readl(GUEST_##seg##_BASE) & ~((1ULL << 32) - 1))) {\ + vcpu_printf(vcpu, "%s: "#seg" base 0x%lx, is usable and not"\ + " all bits 63-32 are zero\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##seg##_BASE));\ + return 0;\ + } + SEG_BASE_TEST(SS); + SEG_BASE_TEST(DS); + SEG_BASE_TEST(ES); + + if (virtual8086) { + VIR8086_SEG_LIMIT_TEST(CS); + VIR8086_SEG_LIMIT_TEST(SS); + VIR8086_SEG_LIMIT_TEST(DS); + VIR8086_SEG_LIMIT_TEST(ES); + VIR8086_SEG_LIMIT_TEST(FS); + VIR8086_SEG_LIMIT_TEST(GS); + } + + if (virtual8086) { + VIR8086_SEG_AR_TEST(CS); + VIR8086_SEG_AR_TEST(SS); + VIR8086_SEG_AR_TEST(DS); + VIR8086_SEG_AR_TEST(ES); + VIR8086_SEG_AR_TEST(FS); + VIR8086_SEG_AR_TEST(GS); + } else { + + u32 cs_ar = vmcs_read32(GUEST_CS_AR_BYTES); + u32 ss_ar = vmcs_read32(GUEST_SS_AR_BYTES); + u32 tr_ar = vmcs_read32(GUEST_TR_AR_BYTES); + u32 ldtr_ar = vmcs_read32(GUEST_LDTR_AR_BYTES); + + #define SEG_G_TEST(seg) { \ + u32 lim = vmcs_read32(GUEST_##seg##_LIMIT); \ + u32 ar = vmcs_read32(GUEST_##seg##_AR_BYTES); \ + int err = 0; \ + if (((lim & ~PAGE_MASK) != ~PAGE_MASK) && (ar & AR_G_MASK)) \ + err = 1; \ + if ((lim & ~((1u << 20) - 1)) && !(ar & AR_G_MASK)) \ + err = 1; \ + if (err) { \ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, G err. lim" \ + " is 0x%x\n", \ + __FUNCTION__, \ + ar, lim); \ + return 0; \ + } \ + } + + + if (!(cs_ar & AR_TYPE_ACCESSES_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, accesses is clear\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_TYPE_CODE_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, code is clear\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, type is sys\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_TYPE_MASK) >= 8 && (cs_ar & AR_TYPE_MASK) < 12 && + AR_DPL(cs_ar) != + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, " + "DPL not as RPL\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_TYPE_MASK) >= 13 && (cs_ar & AR_TYPE_MASK) < 16 && + AR_DPL(cs_ar) > + (vmcs_read16(GUEST_CS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: cs AR 0x%x, " + "DPL greater than RPL\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (!(cs_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, not " + "present\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if ((cs_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, reseved" + " bits are set\n", + __FUNCTION__, + cs_ar); + return 0; + } + + if (long_mode & (cs_ar & AR_L_MASK) && (cs_ar & AR_DB_MASK)) { + vcpu_printf(vcpu, "%s: CS AR 0x%x, DB and L are set" + " in long mode\n", + __FUNCTION__, + cs_ar); + return 0; + + } + + SEG_G_TEST(CS); + + if (!(ss_ar & AR_UNUSABLE_MASK)) { + if ((ss_ar & AR_TYPE_MASK) != 3 && + (ss_ar & AR_TYPE_MASK) != 7 ) { + vcpu_printf(vcpu, "%s: ss AR 0x%x, usable and type" + " is not 3 or 7\n", + __FUNCTION__, + ss_ar); + return 0; + } + + if (!(ss_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: ss AR 0x%x, usable and" + " is sys\n", + __FUNCTION__, + ss_ar); + return 0; + } + if (!(ss_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, usable" + " and not present\n", + __FUNCTION__, + ss_ar); + return 0; + } + + if ((ss_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, reseved" + " bits are set\n", + __FUNCTION__, + ss_ar); + return 0; + } + + SEG_G_TEST(SS); + + } + + if (AR_DPL(ss_ar) != + (vmcs_read16(GUEST_SS_SELECTOR) & SELECTOR_RPL_MASK) ) { + vcpu_printf(vcpu, "%s: SS AR 0x%x, " + "DPL not as RPL\n", + __FUNCTION__, + ss_ar); + return 0; + } + + #define SEG_AR_TEST(seg) {\ + u32 ar = vmcs_read32(GUEST_##seg##_AR_BYTES);\ + if (!(ar & AR_UNUSABLE_MASK)) {\ + if (!(ar & AR_TYPE_ACCESSES_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "usable and not accesses\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_TYPE_CODE_MASK) &&\ + !(ar & AR_TYPE_READABLE_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "code and not readable\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if (!(ar & AR_S_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, usable and"\ + " is sys\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_TYPE_MASK) >= 0 && \ + (ar & AR_TYPE_MASK) < 12 && \ + AR_DPL(ar) < (vmcs_read16(GUEST_##seg##_SELECTOR) & \ + SELECTOR_RPL_MASK) ) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, "\ + "DPL less than RPL\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if (!(ar & AR_P_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR 0x%x, usable and"\ + " not present\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + if ((ar & AR_RESERVD_MASK)) {\ + vcpu_printf(vcpu, "%s: "#seg" AR"\ + " 0x%x, reseved"\ + " bits are set\n",\ + __FUNCTION__,\ + ar);\ + return 0;\ + }\ + SEG_G_TEST(seg)\ + }\ + } + +#undef DS +#undef ES +#undef FS +#undef GS + + SEG_AR_TEST(DS); + SEG_AR_TEST(ES); + SEG_AR_TEST(FS); + SEG_AR_TEST(GS); + + // TR test + if (long_mode) { + if ((tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_64_TSS) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, long" + " mode and not 64bit busy" + " tss\n", + __FUNCTION__, + tr_ar); + return 0; + } + } else { + if ((tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_32_TSS && + (tr_ar & AR_TYPE_MASK) != AR_TYPE_BUSY_16_TSS) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, legacy" + " mode and not 16/32bit " + "busy tss\n", + __FUNCTION__, + tr_ar); + return 0; + } + + } + if ((tr_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, S is set\n", + __FUNCTION__, + tr_ar); + return 0; + } + if (!(tr_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, P is not set\n", + __FUNCTION__, + tr_ar); + return 0; + } + + if ((tr_ar & (AR_RESERVD_MASK| AR_UNUSABLE_MASK))) { + vcpu_printf(vcpu, "%s: TR AR 0x%x, reserved bit are" + " set\n", + __FUNCTION__, + tr_ar); + return 0; + } + SEG_G_TEST(TR); + + // TR test + if (!(ldtr_ar & AR_UNUSABLE_MASK)) { + + if ((ldtr_ar & AR_TYPE_MASK) != AR_TYPE_LDT) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " bad type\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + + if ((ldtr_ar & AR_S_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " S is set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + + if (!(ldtr_ar & AR_P_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " P is not set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + if ((ldtr_ar & AR_RESERVD_MASK)) { + vcpu_printf(vcpu, "%s: LDTR AR 0x%x," + " reserved bit are set\n", + __FUNCTION__, + ldtr_ar); + return 0; + } + SEG_G_TEST(LDTR); + } + } + + // GDTR and IDTR + + + #define IDT_GDT_TEST(reg)\ + if (!is_canonical(vmcs_readl(GUEST_##reg##_BASE))) {\ + vcpu_printf(vcpu, "%s: "#reg" BASE 0x%lx, not canonical\n",\ + __FUNCTION__,\ + vmcs_readl(GUEST_##reg##_BASE));\ + return 0;\ + }\ + if (vmcs_read32(GUEST_##reg##_LIMIT) >> 16) {\ + vcpu_printf(vcpu, "%s: "#reg" LIMIT 0x%x, size err\n",\ + __FUNCTION__,\ + vmcs_read32(GUEST_##reg##_LIMIT));\ + return 0;\ + }\ + + IDT_GDT_TEST(GDTR); + IDT_GDT_TEST(IDTR); + + + // RIP + + if ((!long_mode || !(vmcs_read32(GUEST_CS_AR_BYTES) & AR_L_MASK)) && + vmcs_readl(GUEST_RIP) & ~((1ULL << 32) - 1) ){ + vcpu_printf(vcpu, "%s: RIP 0x%lx, size err\n", + __FUNCTION__, + vmcs_readl(GUEST_RIP)); + return 0; + } + + if (!is_canonical(vmcs_readl(GUEST_RIP))) { + vcpu_printf(vcpu, "%s: RIP 0x%lx, not canonical\n", + __FUNCTION__, + vmcs_readl(GUEST_RIP)); + return 0; + } + + // RFLAGS + #define RFLAGS_RESEVED_CLEAR_BITS\ + (~((1ULL << 22) - 1) | (1ULL << 15) | (1ULL << 5) | (1ULL << 3)) + #define RFLAGS_RESEVED_SET_BITS (1 << 1) + + if ((rflags & RFLAGS_RESEVED_CLEAR_BITS) || + !(rflags & RFLAGS_RESEVED_SET_BITS)) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, reserved bits 0x%llx 0x%x\n", + __FUNCTION__, + rflags, + RFLAGS_RESEVED_CLEAR_BITS, + RFLAGS_RESEVED_SET_BITS); + return 0; + } + + if (long_mode && virtual8086) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, vm and long mode\n", + __FUNCTION__, + rflags); + return 0; + } + + + if (!(rflags & RFLAGS_RF)) { + u32 vm_entry_info = vmcs_read32(VM_ENTRY_INTR_INFO_FIELD); + if ((vm_entry_info & INTR_INFO_VALID_MASK) && + (vm_entry_info & INTR_INFO_INTR_TYPE_MASK) == + INTR_TYPE_EXT_INTR) { + vcpu_printf(vcpu, "%s: RFLAGS 0x%lx, external" + " interrupt and RF is clear\n", + __FUNCTION__, + rflags); + return 0; + } + + } + + // to be continued from Checks on Guest Non-Register State (22.3.1.5) + return 1; +} + +static int check_fixed_bits(struct kvm_vcpu *vcpu, const char *reg, + unsigned long cr, + u32 msr_fixed_0, u32 msr_fixed_1) +{ + u64 fixed_bits_0, fixed_bits_1; + + rdmsrl(msr_fixed_0, fixed_bits_0); + rdmsrl(msr_fixed_1, fixed_bits_1); + if ((cr & fixed_bits_0) != fixed_bits_0) { + vcpu_printf(vcpu, "%s: %s (%lx) has one of %llx unset\n", + __FUNCTION__, reg, cr, fixed_bits_0); + return 0; + } + if ((~cr & ~fixed_bits_1) != ~fixed_bits_1) { + vcpu_printf(vcpu, "%s: %s (%lx) has one of %llx set\n", + __FUNCTION__, reg, cr, ~fixed_bits_1); + return 0; + } + return 1; +} + +static int phys_addr_width(void) +{ + unsigned eax, ebx, ecx, edx; + + cpuid(0x80000008, &eax, &ebx, &ecx, &edx); + return eax & 0xff; +} + +static int check_canonical(struct kvm_vcpu *vcpu, const char *name, + unsigned long reg) +{ +#ifdef __x86_64__ + unsigned long x; + + if (sizeof(reg) == 4) + return 1; + x = (long)reg >> 48; + if (!(x == 0 || x == ~0UL)) { + vcpu_printf(vcpu, "%s: %s (%lx) not canonical\n", + __FUNCTION__, name, reg); + return 0; + } +#endif + return 1; +} + +static int check_selector(struct kvm_vcpu *vcpu, const char *name, + int rpl_ti, int null, + u16 sel) +{ + if (rpl_ti && (sel & 7)) { + vcpu_printf(vcpu, "%s: %s (%x) nonzero rpl or ti\n", + __FUNCTION__, name, sel); + return 0; + } + if (null && !sel) { + vcpu_printf(vcpu, "%s: %s (%x) zero\n", + __FUNCTION__, name, sel); + return 0; + } + return 1; +} + +#define MSR_IA32_VMX_CR0_FIXED0 0x486 +#define MSR_IA32_VMX_CR0_FIXED1 0x487 + +#define MSR_IA32_VMX_CR4_FIXED0 0x488 +#define MSR_IA32_VMX_CR4_FIXED1 0x489 + +int vm_entry_test_host(struct kvm_vcpu *vcpu) +{ + int r = 0; + unsigned long cr0 = vmcs_readl(HOST_CR0); + unsigned long cr4 = vmcs_readl(HOST_CR4); + unsigned long cr3 = vmcs_readl(HOST_CR3); + int host_64; + + host_64 = vmcs_read32(VM_EXIT_CONTROLS) & VM_EXIT_HOST_ADD_SPACE_SIZE; + + /* 22.2.2 */ + r &= check_fixed_bits(vcpu, "host cr0", cr0, MSR_IA32_VMX_CR0_FIXED0, + MSR_IA32_VMX_CR0_FIXED1); + + r &= check_fixed_bits(vcpu, "host cr0", cr4, MSR_IA32_VMX_CR4_FIXED0, + MSR_IA32_VMX_CR4_FIXED1); + if ((u64)cr3 >> phys_addr_width()) { + vcpu_printf(vcpu, "%s: cr3 (%lx) vs phys addr width\n", + __FUNCTION__, cr3); + r = 0; + } + + r &= check_canonical(vcpu, "host ia32_sysenter_eip", + vmcs_readl(HOST_IA32_SYSENTER_EIP)); + r &= check_canonical(vcpu, "host ia32_sysenter_esp", + vmcs_readl(HOST_IA32_SYSENTER_ESP)); + + /* 22.2.3 */ + r &= check_selector(vcpu, "host cs", 1, 1, + vmcs_read16(HOST_CS_SELECTOR)); + r &= check_selector(vcpu, "host ss", 1, !host_64, + vmcs_read16(HOST_SS_SELECTOR)); + r &= check_selector(vcpu, "host ds", 1, 0, + vmcs_read16(HOST_DS_SELECTOR)); + r &= check_selector(vcpu, "host es", 1, 0, + vmcs_read16(HOST_ES_SELECTOR)); + r &= check_selector(vcpu, "host fs", 1, 0, + vmcs_read16(HOST_FS_SELECTOR)); + r &= check_selector(vcpu, "host gs", 1, 0, + vmcs_read16(HOST_GS_SELECTOR)); + r &= check_selector(vcpu, "host tr", 1, 1, + vmcs_read16(HOST_TR_SELECTOR)); + +#ifdef __x86_64__ + r &= check_canonical(vcpu, "host fs base", + vmcs_readl(HOST_FS_BASE)); + r &= check_canonical(vcpu, "host gs base", + vmcs_readl(HOST_GS_BASE)); + r &= check_canonical(vcpu, "host gdtr base", + vmcs_readl(HOST_GDTR_BASE)); + r &= check_canonical(vcpu, "host idtr base", + vmcs_readl(HOST_IDTR_BASE)); +#endif + + /* 22.2.4 */ +#ifdef __x86_64__ + if (!host_64) { + vcpu_printf(vcpu, "%s: vm exit controls: !64 bit host\n", + __FUNCTION__); + r = 0; + } + if (!(cr4 & CR4_PAE_MASK)) { + vcpu_printf(vcpu, "%s: cr4 (%lx): !pae\n", + __FUNCTION__, cr4); + r = 0; + } + r &= check_canonical(vcpu, "host rip", vmcs_readl(HOST_RIP)); +#endif + + return r; +} + +int vm_entry_test(struct kvm_vcpu *vcpu) +{ + int rg, rh; + + rg = vm_entry_test_guest(vcpu); + rh = vm_entry_test_host(vcpu); + return rg && rh; +} + +void vmcs_dump(struct kvm_vcpu *vcpu) +{ + vcpu_printf(vcpu, "************************ vmcs_dump ************************\n"); + vcpu_printf(vcpu, "HOST_CR0 0x%lx\n", vmcs_readl(HOST_CR0)); + vcpu_printf(vcpu, "HOST_CR3 0x%lx\n", vmcs_readl(HOST_CR3)); + vcpu_printf(vcpu, "HOST_CR4 0x%lx\n", vmcs_readl(HOST_CR4)); + + vcpu_printf(vcpu, "HOST_TR_SELECTOR 0x%x\n", vmcs_read16(HOST_TR_SELECTOR)); + vcpu_printf(vcpu, "HOST_TR_BASE 0x%lx\n", vmcs_readl(HOST_TR_BASE)); + + vcpu_printf(vcpu, "HOST_GDTR_BASE 0x%lx\n", vmcs_readl(HOST_GDTR_BASE)); + vcpu_printf(vcpu, "HOST_LDTR_SELECTOR 0x%x\n", vmcs_read16(HOST_TR_SELECTOR)); + vcpu_printf(vcpu, "HOST_IDTR_BASE 0x%lx\n", vmcs_readl(HOST_IDTR_BASE)); + + vcpu_printf(vcpu, "HOST_CS_SELECTOR 0x%x\n", vmcs_read16(HOST_CS_SELECTOR)); + vcpu_printf(vcpu, "HOST_DS_SELECTOR 0x%x\n", vmcs_read16(HOST_DS_SELECTOR)); + vcpu_printf(vcpu, "HOST_ES_SELECTOR 0x%x\n", vmcs_read16(HOST_ES_SELECTOR)); + vcpu_printf(vcpu, "HOST_FS_SELECTOR 0x%x\n", vmcs_read16(HOST_FS_SELECTOR)); + vcpu_printf(vcpu, "HOST_GS_SELECTOR 0x%x\n", vmcs_read16(HOST_GS_SELECTOR)); + vcpu_printf(vcpu, "HOST_SS_SELECTOR 0x%x\n", vmcs_read16(HOST_SS_SELECTOR)); + + + vcpu_printf(vcpu, "VM_ENTRY_CONTROLS 0x%x\n", vmcs_read32(VM_ENTRY_CONTROLS)); + + vcpu_printf(vcpu, "GUEST_CR0 0x%lx\n", vmcs_readl(GUEST_CR0)); + vcpu_printf(vcpu, "GUEST_CR3 0x%lx\n", vmcs_readl(GUEST_CR3)); + vcpu_printf(vcpu, "GUEST_CR4 0x%lx\n", vmcs_readl(GUEST_CR4)); + + vcpu_printf(vcpu, "GUEST_SYSENTER_ESP 0x%lx\n", vmcs_readl(GUEST_SYSENTER_ESP)); + vcpu_printf(vcpu, "GUEST_SYSENTER_EIP 0x%lx\n", vmcs_readl(GUEST_SYSENTER_EIP)); + + + vcpu_printf(vcpu, "GUEST_IA32_DEBUGCTL 0x%llx\n", vmcs_read64(GUEST_IA32_DEBUGCTL)); + vcpu_printf(vcpu, "GUEST_DR7 0x%lx\n", vmcs_readl(GUEST_DR7)); + + vcpu_printf(vcpu, "GUEST_RFLAGS 0x%lx\n", vmcs_readl(GUEST_RFLAGS)); + vcpu_printf(vcpu, "GUEST_RIP 0x%lx\n", vmcs_readl(GUEST_RIP)); + + vcpu_printf(vcpu, "GUEST_CS_SELECTOR 0x%x\n", vmcs_read16(GUEST_CS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_DS_SELECTOR 0x%x\n", vmcs_read16(GUEST_DS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_ES_SELECTOR 0x%x\n", vmcs_read16(GUEST_ES_SELECTOR)); + vcpu_printf(vcpu, "GUEST_FS_SELECTOR 0x%x\n", vmcs_read16(GUEST_FS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_GS_SELECTOR 0x%x\n", vmcs_read16(GUEST_GS_SELECTOR)); + vcpu_printf(vcpu, "GUEST_SS_SELECTOR 0x%x\n", vmcs_read16(GUEST_SS_SELECTOR)); + + vcpu_printf(vcpu, "GUEST_TR_SELECTOR 0x%x\n", vmcs_read16(GUEST_TR_SELECTOR)); + vcpu_printf(vcpu, "GUEST_LDTR_SELECTOR 0x%x\n", vmcs_read16(GUEST_LDTR_SELECTOR)); + + vcpu_printf(vcpu, "GUEST_CS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_CS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_DS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_DS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_ES_AR_BYTES 0x%x\n", vmcs_read32(GUEST_ES_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_FS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_FS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_GS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_GS_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_SS_AR_BYTES 0x%x\n", vmcs_read32(GUEST_SS_AR_BYTES)); + + vcpu_printf(vcpu, "GUEST_LDTR_AR_BYTES 0x%x\n", vmcs_read32(GUEST_LDTR_AR_BYTES)); + vcpu_printf(vcpu, "GUEST_TR_AR_BYTES 0x%x\n", vmcs_read32(GUEST_TR_AR_BYTES)); + + vcpu_printf(vcpu, "GUEST_CS_BASE 0x%lx\n", vmcs_readl(GUEST_CS_BASE)); + vcpu_printf(vcpu, "GUEST_DS_BASE 0x%lx\n", vmcs_readl(GUEST_DS_BASE)); + vcpu_printf(vcpu, "GUEST_ES_BASE 0x%lx\n", vmcs_readl(GUEST_ES_BASE)); + vcpu_printf(vcpu, "GUEST_FS_BASE 0x%lx\n", vmcs_readl(GUEST_FS_BASE)); + vcpu_printf(vcpu, "GUEST_GS_BASE 0x%lx\n", vmcs_readl(GUEST_GS_BASE)); + vcpu_printf(vcpu, "GUEST_SS_BASE 0x%lx\n", vmcs_readl(GUEST_SS_BASE)); + + + vcpu_printf(vcpu, "GUEST_LDTR_BASE 0x%lx\n", vmcs_readl(GUEST_LDTR_BASE)); + vcpu_printf(vcpu, "GUEST_TR_BASE 0x%lx\n", vmcs_readl(GUEST_TR_BASE)); + + vcpu_printf(vcpu, "GUEST_CS_LIMIT 0x%x\n", vmcs_read32(GUEST_CS_LIMIT)); + vcpu_printf(vcpu, "GUEST_DS_LIMIT 0x%x\n", vmcs_read32(GUEST_DS_LIMIT)); + vcpu_printf(vcpu, "GUEST_ES_LIMIT 0x%x\n", vmcs_read32(GUEST_ES_LIMIT)); + vcpu_printf(vcpu, "GUEST_FS_LIMIT 0x%x\n", vmcs_read32(GUEST_FS_LIMIT)); + vcpu_printf(vcpu, "GUEST_GS_LIMIT 0x%x\n", vmcs_read32(GUEST_GS_LIMIT)); + vcpu_printf(vcpu, "GUEST_SS_LIMIT 0x%x\n", vmcs_read32(GUEST_SS_LIMIT)); + + vcpu_printf(vcpu, "GUEST_LDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_LDTR_LIMIT)); + vcpu_printf(vcpu, "GUEST_TR_LIMIT 0x%x\n", vmcs_read32(GUEST_TR_LIMIT)); + + vcpu_printf(vcpu, "GUEST_GDTR_BASE 0x%lx\n", vmcs_readl(GUEST_GDTR_BASE)); + vcpu_printf(vcpu, "GUEST_IDTR_BASE 0x%lx\n", vmcs_readl(GUEST_IDTR_BASE)); + + vcpu_printf(vcpu, "GUEST_GDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_GDTR_LIMIT)); + vcpu_printf(vcpu, "GUEST_IDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_IDTR_LIMIT)); + vcpu_printf(vcpu, "***********************************************************\n"); +} + +void regs_dump(struct kvm_vcpu *vcpu) +{ + #define REG_DUMP(reg) \ + vcpu_printf(vcpu, #reg" = 0x%lx\n", vcpu->regs[VCPU_REGS_##reg]) + #define VMCS_REG_DUMP(reg) \ + vcpu_printf(vcpu, #reg" = 0x%lx\n", vmcs_readl(GUEST_##reg)) + + vcpu_printf(vcpu, "************************ regs_dump ************************\n"); + REG_DUMP(RAX); + REG_DUMP(RBX); + REG_DUMP(RCX); + REG_DUMP(RDX); + REG_DUMP(RSP); + REG_DUMP(RBP); + REG_DUMP(RSI); + REG_DUMP(RDI); +#ifdef __x86_64__ + REG_DUMP(R8); + REG_DUMP(R9); + REG_DUMP(R10); + REG_DUMP(R11); + REG_DUMP(R12); + REG_DUMP(R13); + REG_DUMP(R14); + REG_DUMP(R15); +#endif + + VMCS_REG_DUMP(RSP); + VMCS_REG_DUMP(RIP); + VMCS_REG_DUMP(RFLAGS); + + vcpu_printf(vcpu, "***********************************************************\n"); +} + +void sregs_dump(struct kvm_vcpu *vcpu) +{ + vcpu_printf(vcpu, "************************ sregs_dump ************************\n"); + vcpu_printf(vcpu, "cr0 = 0x%lx\n", guest_cr0()); + vcpu_printf(vcpu, "cr2 = 0x%lx\n", vcpu->cr2); + vcpu_printf(vcpu, "cr3 = 0x%lx\n", vcpu->cr3); + vcpu_printf(vcpu, "cr4 = 0x%lx\n", guest_cr4()); + vcpu_printf(vcpu, "cr8 = 0x%lx\n", vcpu->cr8); + vcpu_printf(vcpu, "shadow_efer = 0x%llx\n", vcpu->shadow_efer); + vmcs_dump(vcpu); + vcpu_printf(vcpu, "***********************************************************\n"); +} + +#endif + Index: linux-2.6/drivers/kvm/debug.h =================================================================== --- /dev/null +++ linux-2.6/drivers/kvm/debug.h @@ -0,0 +1,21 @@ +#ifndef __KVM_DEBUG_H +#define __KVM_DEBUG_H + +#ifdef KVM_DEBUG + +void show_msrs(struct kvm_vcpu *vcpu); + + +void show_irq(struct kvm_vcpu *vcpu, int irq); +void show_page(struct kvm_vcpu *vcpu, gva_t addr); +void show_u64(struct kvm_vcpu *vcpu, gva_t addr); +void show_code(struct kvm_vcpu *vcpu); +int vm_entry_test(struct kvm_vcpu *vcpu); + +void vmcs_dump(struct kvm_vcpu *vcpu); +void regs_dump(struct kvm_vcpu *vcpu); +void sregs_dump(struct kvm_vcpu *vcpu); + +#endif + +#endif Index: linux-2.6/drivers/kvm/kvm.h =================================================================== --- linux-2.6.orig/drivers/kvm/kvm.h +++ linux-2.6/drivers/kvm/kvm.h @@ -9,6 +9,8 @@ #include "vmx.h" +#define KVM_DEBUG 1 + #define CR0_PE_MASK (1ULL << 0) #define CR0_TS_MASK (1ULL << 3) #define CR0_NE_MASK (1ULL << 5) Index: linux-2.6/drivers/kvm/kvm_main.c =================================================================== --- linux-2.6.orig/drivers/kvm/kvm_main.c +++ linux-2.6/drivers/kvm/kvm_main.c @@ -33,6 +33,7 @@ #include "vmx.h" #include "x86_emulate.h" +#include "debug.h" MODULE_AUTHOR("Qumranet"); MODULE_LICENSE("GPL"); @@ -1107,6 +1108,9 @@ static int kvm_vcpu_setup(struct kvm_vcp int nr_good_msrs; + printk("*** vcpu_setup begin\n"); + vmcs_dump(vcpu); + if (!init_rmode_tss(vcpu->kvm)) { ret = 0; goto out; @@ -1303,6 +1307,9 @@ static int kvm_vcpu_setup(struct kvm_vcp ret = kvm_mmu_init(vcpu); + printk("*** vcpu_setup end\n"); + vmcs_dump(vcpu); + return ret; out_free_guest_msrs: @@ -2618,6 +2625,9 @@ again: fx_save(vcpu->host_fx_image); fx_restore(vcpu->guest_fx_image); + printk("*** pre launch\n"); + vmcs_dump(vcpu); + save_msrs(vcpu->host_msrs, vcpu->nmsrs); load_msrs(vcpu->guest_msrs, NR_BAD_MSRS); @@ -2740,6 +2750,9 @@ again: [cr2]"i"(offsetof(struct kvm_vcpu, cr2)) : "cc", "memory" ); + printk("*** post launch\n"); + vmcs_dump(vcpu); + ++kvm_stat.exits; save_msrs(vcpu->guest_msrs, NR_BAD_MSRS); [-- Attachment #3: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #4: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <4550941E.4070409-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <4550941E.4070409-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-08 8:04 ` Hesse, Christian [not found] ` <200611080904.27777.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-08 8:04 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1: Type: text/plain, Size: 1326 bytes --] On Tuesday 07 November 2006 15:11, Avi Kivity wrote: > Hesse, Christian wrote: > > On Tuesday 07 November 2006 14:25, Avi Kivity wrote: > >> Hesse, Christian wrote: > >>> On Tuesday 07 November 2006 13:31, Avi Kivity wrote: > >>>> Hesse, Christian wrote: > >>>>>> Then, please apply the attached patch. You will need serial console > >>>>>> or netconsole, and to > >>>>>> > >>>>>> echo 9 > /proc/sysrq-trigger > >>>>>> > >>>>>> before launching the VM. > >>>>> > >>>>> There is no patch attached to this mail... > >>>> > >>>> Sorry, attaching now. > >>> > >>> There are some undefined values in your code: > >>> > >>> /usr/src/kvm-module/debug.c: In function 'vmcs_dump': > >>> /usr/src/kvm-module/debug.c:924: error: 'HOST_TR_LIMIT' undeclared > >>> (first use in this function) > >> > >> Sorry, refreshed patch attached. > > > > Looks better, but you did not catch them all. > > Forgot you're using 32-bit. #ifdef'ed out. Ok, this one is ok. (Well, it compiles but still crashes my system :) I will send the log as soon as I get my netconsole to work. I could not yet figure out why it does not send any packets. > Is this machine a laptop? If so, we may be seeing interaction between > system management mode and VT. Yes, this is a Samsung X11 T2300 Culesa. -- Christian [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611080904.27777.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611080904.27777.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-08 8:11 ` Avi Kivity [not found] ` <4551914D.70303-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-08 8:11 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hesse, Christian wrote: > >> Is this machine a laptop? If so, we may be seeing interaction between >> system management mode and VT. >> > > Yes, this is a Samsung X11 T2300 Culesa. > Well, bad things happen with laptops, I suspect due to system management mode. Does Xen + VT run on this thing? -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <4551914D.70303-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <4551914D.70303-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-08 8:24 ` Hesse, Christian [not found] ` <200611080924.59607.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-08 8:24 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1: Type: text/plain, Size: 669 bytes --] On Wednesday 08 November 2006 09:11, Avi Kivity wrote: > Hesse, Christian wrote: > >> Is this machine a laptop? If so, we may be seeing interaction between > >> system management mode and VT. > > > > Yes, this is a Samsung X11 T2300 Culesa. > > Well, bad things happen with laptops, I suspect due to system management > mode. > > Does Xen + VT run on this thing? Yes, it does. Though it sometimes froze as well, but that was because of corrupted disk images, after a fresh install everything worked well again. As I need at least kernel version 2.6.17 for my notebook to get all the drivers I need I stopped playing with it. -- Regards, Chris [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611080924.59607.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611080924.59607.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-08 8:28 ` Avi Kivity [not found] ` <45519512.3050606-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-08 8:28 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hesse, Christian wrote: > On Wednesday 08 November 2006 09:11, Avi Kivity wrote: > >> Hesse, Christian wrote: >> >>>> Is this machine a laptop? If so, we may be seeing interaction between >>>> system management mode and VT. >>>> >>> Yes, this is a Samsung X11 T2300 Culesa. >>> >> Well, bad things happen with laptops, I suspect due to system management >> mode. >> >> Does Xen + VT run on this thing? >> > > Yes, it does. Though it sometimes froze as well, but that was because of > corrupted disk images, after a fresh install everything worked well again. > The host froze due to a corrupted guest image? That shouldn't happen. > As I need at least kernel version 2.6.17 for my notebook to get all the > drivers I need I stopped playing with it. > Okay. Please try to apply the two patches I posted yesterday. I don't see how they can help, but it's worth trying. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <45519512.3050606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <45519512.3050606-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-09 12:10 ` Hesse, Christian [not found] ` <200611091310.25066.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-09 12:10 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1.1: Type: text/plain, Size: 492 bytes --] On Wednesday 08 November 2006 09:28, Avi Kivity wrote: > Okay. Please try to apply the two patches I posted yesterday. I don't > see how they can help, but it's worth trying. Ok, here is the log. This time the system did not freeze completely, I could still move the mouse cursor, grab the qemu window and move that around, too. I could not type anything, though I could press Alt+Ctrl+F1 and got a black screen and a not blinking (frozen) console cursor. -- Regards, Chris [-- Attachment #1.1.2: kvm-qemu.log --] [-- Type: text/x-log, Size: 8626 bytes --] *** vcpu_setup begin ************************ vmcs_dump ************************ HOST_CR0 0x0 HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x0 HOST_IDTR_BASE 0x0 HOST_CS_SELECTOR 0x0 HOST_DS_SELECTOR 0x0 HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 *** vcpu_setup begin GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 ************************ vmcs_dump ************************ GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 HOST_CR0 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xb17fb340 *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x10c90000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x0 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x27c25000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 HOST_IDTR_BASE 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 HOST_CS_SELECTOR 0x0 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 HOST_DS_SELECTOR 0x0 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff HOST_ES_SELECTOR 0x0 GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff HOST_FS_SELECTOR 0x0 GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff *********************************************************** HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x10c90000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x27c25000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff *********************************************************** *** pre launch ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x10c90000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x27c25000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 *** pre launch GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff ************************ vmcs_dump ************************ GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff *********************************************************** HOST_CR0 0x80050033 HOST_CR3 0x10c90000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x27c25000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff *********************************************************** [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611091310.25066.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611091310.25066.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-09 13:01 ` Avi Kivity [not found] ` <455326C3.90601-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-09 13:01 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1: Type: text/plain, Size: 898 bytes --] Hesse, Christian wrote: > On Wednesday 08 November 2006 09:28, Avi Kivity wrote: > >> Okay. Please try to apply the two patches I posted yesterday. I don't >> see how they can help, but it's worth trying. >> > > Ok, here is the log. This time the system did not freeze completely, I could > still move the mouse cursor, grab the qemu window and move that around, too. > I could not type anything, though I could press Alt+Ctrl+F1 and got a black > screen and a not blinking (frozen) console cursor. > One core was killed, the surviving core was able to run X and service some interrupts. Can you try the attached patch (on top of the previous debug patch)? In addition, please enable pae mode (CONFIG_HIGHMEM64G) to see if the cpu has trouble switching from pae mode in the guest to non-pae mode in the host. -- error compiling committee.c: too many arguments to function [-- Attachment #2: kvm-more-debug.patch --] [-- Type: text/x-patch, Size: 776 bytes --] Index: linux-2.6/drivers/kvm/debug.c =================================================================== --- linux-2.6.orig/drivers/kvm/debug.c +++ linux-2.6/drivers/kvm/debug.c @@ -997,6 +997,12 @@ void vmcs_dump(struct kvm_vcpu *vcpu) vcpu_printf(vcpu, "GUEST_GDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_GDTR_LIMIT)); vcpu_printf(vcpu, "GUEST_IDTR_LIMIT 0x%x\n", vmcs_read32(GUEST_IDTR_LIMIT)); + + vcpu_printf(vcpu, "VM_EXIT_CONTROLS 0x%x\n", vmcs_read32(VM_EXIT_CONTROLS)); + vcpu_printf(vcpu, "EXCEPTION_BITMAP 0x%x\n", vmcs_read32(EXCEPTION_BITMAP)); + vcpu_printf(vcpu, "HOST_RIP 0x%lx\n", vmcs_readl(HOST_RIP)); + vcpu_printf(vcpu, "HOST_RSP 0x%lx\n", vmcs_readl(HOST_RSP)); + vcpu_printf(vcpu, "***********************************************************\n"); } [-- Attachment #3: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #4: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <455326C3.90601-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <455326C3.90601-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-09 13:29 ` Hesse, Christian [not found] ` <200611091429.57097.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 2006-11-10 8:09 ` Hesse, Christian 1 sibling, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-09 13:29 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1.1: Type: text/plain, Size: 1028 bytes --] On Thursday 09 November 2006 14:01, you wrote: > Hesse, Christian wrote: > > On Wednesday 08 November 2006 09:28, Avi Kivity wrote: > >> Okay. Please try to apply the two patches I posted yesterday. I don't > >> see how they can help, but it's worth trying. > > > > Ok, here is the log. This time the system did not freeze completely, I > > could still move the mouse cursor, grab the qemu window and move that > > around, too. I could not type anything, though I could press Alt+Ctrl+F1 > > and got a black screen and a not blinking (frozen) console cursor. > > One core was killed, the surviving core was able to run X and service > some interrupts. > > Can you try the attached patch (on top of the previous debug patch)? In > addition, please enable pae mode (CONFIG_HIGHMEM64G) to see if the cpu > has trouble switching from pae mode in the guest to non-pae mode in the > host. The attached patch is with your last patch but without pae mode. I will recompile my kernel now. -- Regards, Chris [-- Attachment #1.1.2: kvm-qemu.log --] [-- Type: text/x-log, Size: 9102 bytes --] *** vcpu_setup begin ************************ vmcs_dump ************************ HOST_CR0 0x0 HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x0 HOST_IDTR_BASE 0x0 HOST_CS_SELECTOR 0x0 HOST_DS_SELECTOR 0x0 HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 *** vcpu_setup begin GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) ************************ vmcs_dump ************************ HOST_CR0 0x0 HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x21ad5000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x8bf2000 HOST_TR_BASE 0xb17fb340 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 HOST_GDTR_BASE 0xb18ff000 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 HOST_LDTR_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b HOST_IDTR_BASE 0x0 GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 HOST_CS_SELECTOR 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 HOST_DS_SELECTOR 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf099e129 HOST_RSP 0x0 *********************************************************** HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x21ad5000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x8bf2000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf099e129 HOST_RSP 0x0 *********************************************************** *** pre launch ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x21ad5000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17f3340 HOST_GDTR_BASE 0xb1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x8bf2000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 *** pre launch GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 ************************ vmcs_dump ************************ GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_CR0 0x80050033 HOST_RIP 0xf099e129 HOST_RSP 0x0 HOST_CR3 0x21ad5000 *********************************************************** HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17f3340 HOST_GDTR_BASE 0xb1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a9000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x8bf2000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf099e129 HOST_RSP 0x0 *********************************************************** [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611091429.57097.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611091429.57097.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-09 14:03 ` Hesse, Christian [not found] ` <200611091503.25231.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-09 14:03 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1.1: Type: text/plain, Size: 513 bytes --] On Thursday 09 November 2006 14:29, Hesse, Christian wrote: > On Thursday 09 November 2006 14:01, you wrote: > > Can you try the attached patch (on top of the previous debug patch)? In > > addition, please enable pae mode (CONFIG_HIGHMEM64G) to see if the cpu > > has trouble switching from pae mode in the guest to non-pae mode in the > > host. > > The attached patch is with your last patch but without pae mode. I will > recompile my kernel now. And this one is in pae mode. -- Regards, Chris [-- Attachment #1.1.2: kvm-qemu.log --] [-- Type: text/x-log, Size: 9194 bytes --] SysRq : Changing Loglevel Loglevel set to 9 SysRq : Changing Loglevel Loglevel set to 9 *** vcpu_setup begin ************************ vmcs_dump ************************ HOST_CR0 0x0 HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x0 HOST_IDTR_BASE 0x0 HOST_CS_SELECTOR 0x0 HOST_DS_SELECTOR 0x0 HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 *** vcpu_setup begin GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 ************************ vmcs_dump ************************ GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 HOST_CR0 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x0 HOST_IDTR_BASE 0x0 *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x2bcbe000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05ab000 HOST_CS_SELECTOR 0x0 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x0 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x13931000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 HOST_ES_SELECTOR 0x0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 HOST_GS_SELECTOR 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 HOST_SS_SELECTOR 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_RSP 0x0 *********************************************************** GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x2bcbe000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05ab000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x13931000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_RSP 0x0 *********************************************************** *** pre launch ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x2bcbe000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05ab000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x13931000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 *** pre launch GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff ************************ vmcs_dump ************************ GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_CR0 0x80050033 HOST_RSP 0x0 *********************************************************** HOST_CR3 0x2bcbe000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05ab000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x13931000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_RSP 0x0 *********************************************************** [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611091503.25231.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611091503.25231.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-09 14:27 ` Avi Kivity 0 siblings, 0 replies; 25+ messages in thread From: Avi Kivity @ 2006-11-09 14:27 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hesse, Christian wrote: > HOST_CR4 0x2690 > *********************************************************** > *** pre launch > ************************ vmcs_dump ************************ > HOST_CR4 0x2690 > GUEST_CR4 0x2021 > This doesn't look like pae mode. Bit 5 of cr4 should be set. This is true for GUEST_CR4 (always so for kvm) but not for HOST_CR4. One way of checking is grep Hugepagesize /proc/meminfo 2MB means pae, 4MB is non-pae. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <455326C3.90601-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 2006-11-09 13:29 ` Hesse, Christian @ 2006-11-10 8:09 ` Hesse, Christian [not found] ` <200611100909.32168.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 1 sibling, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-10 8:09 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1.1: Type: text/plain, Size: 1995 bytes --] On Thursday 09 November 2006 14:01, Avi Kivity wrote: > Hesse, Christian wrote: > > On Wednesday 08 November 2006 09:28, Avi Kivity wrote: > >> Okay. Please try to apply the two patches I posted yesterday. I don't > >> see how they can help, but it's worth trying. > > > > Ok, here is the log. This time the system did not freeze completely, I > > could still move the mouse cursor, grab the qemu window and move that > > around, too. I could not type anything, though I could press Alt+Ctrl+F1 > > and got a black screen and a not blinking (frozen) console cursor. > > One core was killed, the surviving core was able to run X and service > some interrupts. > > Can you try the attached patch (on top of the previous debug patch)? In > addition, please enable pae mode (CONFIG_HIGHMEM64G) to see if the cpu > has trouble switching from pae mode in the guest to non-pae mode in the > host. You are right this was with CONFIG_HIGHMEM4G, not CONFIG_HIGHMEM*6*4G. Changed that in the config an reran the test. eworm@revo:~$ grep Hugepagesize /proc/meminfo eworm@revo:~$ cat /proc/meminfo MemTotal: 1024372 kB MemFree: 618724 kB Buffers: 52 kB Cached: 180756 kB SwapCached: 0 kB Active: 222764 kB Inactive: 89972 kB HighTotal: 121408 kB HighFree: 248 kB LowTotal: 902964 kB LowFree: 618476 kB SwapTotal: 2040244 kB SwapFree: 2040244 kB Dirty: 4 kB Writeback: 0 kB AnonPages: 131968 kB Mapped: 51216 kB Slab: 25620 kB PageTables: 3224 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 2552428 kB Committed_AS: 838332 kB VmallocTotal: 118776 kB VmallocUsed: 9768 kB VmallocChunk: 108660 kB eworm@revo:~$ gzip -cd /proc/config.gz | grep HIGHMEM # CONFIG_NOHIGHMEM is not set # CONFIG_HIGHMEM4G is not set CONFIG_HIGHMEM64G=y CONFIG_HIGHMEM=y -- Regards, Chris [-- Attachment #1.1.2: kvm-qemu.log --] [-- Type: text/x-log, Size: 9102 bytes --] *** vcpu_setup begin ************************ vmcs_dump ************************ HOST_CR0 0x0 HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x0 HOST_IDTR_BASE 0x0 HOST_CS_SELECTOR 0x0 HOST_DS_SELECTOR 0x0 HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 *** vcpu_setup begin GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 ************************ vmcs_dump ************************ GUEST_ES_LIMIT 0x0 HOST_CR0 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 HOST_CR3 0x0 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x19b6200 HOST_CR4 0x26b0 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05af000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_TR_BASE 0xc17f3940 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 HOST_GDTR_BASE 0xc1804000 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x2733c000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 HOST_LDTR_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 HOST_IDTR_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_CS_SELECTOR 0x0 HOST_RIP 0xf919e209 HOST_DS_SELECTOR 0x0 HOST_RSP 0x0 *********************************************************** HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x19b6200 HOST_CR4 0x26b0 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05af000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x2733c000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_RSP 0x0 *********************************************************** *** pre launch ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x19b6200 HOST_CR4 0x26b0 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05af000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x2733c000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 *** pre launch GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 ************************ vmcs_dump ************************ GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 HOST_CR0 0x80050033 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_RSP 0x0 *********************************************************** HOST_CR3 0x19b6200 HOST_CR4 0x26b0 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xc17f3940 HOST_GDTR_BASE 0xc1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xc05af000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x2733c000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x18850000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf919e209 HOST_RSP 0x0 *********************************************************** [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611100909.32168.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611100909.32168.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-10 15:51 ` Avi Kivity [not found] ` <45549FF0.8070207-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-10 15:51 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hesse, Christian wrote: > You are right this was with CONFIG_HIGHMEM4G, not CONFIG_HIGHMEM*6*4G. Changed > that in the config an reran the test. > > eworm@revo:~$ grep Hugepagesize /proc/meminfo > You don't have hugetlbfs compiled in. No matter. > *** pre launch > ************************ vmcs_dump ************************ > HOST_CR0 0x80050033 > HOST_CR3 0x19b6200 > HOST_CR4 0x26b0 > Now we're in pae mode. > GUEST_TR_BASE 0x18850000 > This looks suspicious. When I get back to work, I'll see if the TR_BASE really is a problem. I'll also send you a userspace test program to start the guest directly in 32-bit mode, maybe that will tell us something. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic. ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <45549FF0.8070207-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <45549FF0.8070207-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-14 10:41 ` Avi Kivity [not found] ` <45599D57.2090001-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Avi Kivity @ 2006-11-14 10:41 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Avi Kivity wrote: > > Now we're in pae mode. > >> GUEST_TR_BASE 0x18850000 >> > > This looks suspicious. It's actually correct. > > When I get back to work, I'll see if the TR_BASE really is a problem. > I'll also send you a userspace test program to start the guest > directly in 32-bit mode, maybe that will tell us something. > > Please unpack the attached user.tar.gz, and: cd user make kvmctl test/test32.flat sudo ./kvmctl -32 test/test32.flat (with the kvm module loaded) the test program tries to execute directly in 32-bit mode, skipping 16-bit. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <45599D57.2090001-atKUWr5tajBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <45599D57.2090001-atKUWr5tajBWk0Htik3J/w@public.gmane.org> @ 2006-11-14 10:55 ` Avi Kivity 2006-11-16 13:03 ` Hesse, Christian 1 sibling, 0 replies; 25+ messages in thread From: Avi Kivity @ 2006-11-14 10:55 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1: Type: text/plain, Size: 160 bytes --] Avi Kivity wrote: > > Please unpack the attached user.tar.gz, and: > > Now really attached. -- error compiling committee.c: too many arguments to function [-- Attachment #2: user.tar.gz --] [-- Type: application/x-gzip, Size: 163840 bytes --] [-- Attachment #3: Type: text/plain, Size: 373 bytes --] ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 [-- Attachment #4: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <45599D57.2090001-atKUWr5tajBWk0Htik3J/w@public.gmane.org> 2006-11-14 10:55 ` Avi Kivity @ 2006-11-16 13:03 ` Hesse, Christian [not found] ` <200611161403.13461.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 1 sibling, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-16 13:03 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1.1: Type: text/plain, Size: 734 bytes --] On Tuesday 14 November 2006 11:41, Avi Kivity wrote: > Avi Kivity wrote: > > Now we're in pae mode. > > > >> GUEST_TR_BASE 0x18850000 > > > > This looks suspicious. > > It's actually correct. > > > When I get back to work, I'll see if the TR_BASE really is a problem. > > I'll also send you a userspace test program to start the guest > > directly in 32-bit mode, maybe that will tell us something. > > Please unpack the attached user.tar.gz, and: > > cd user > make kvmctl test/test32.flat > sudo ./kvmctl -32 test/test32.flat > > (with the kvm module loaded) > > the test program tries to execute directly in 32-bit mode, skipping 16-bit. It did crash again. The log is attached. -- Regards, Christian [-- Attachment #1.1.2: kvm-qemu.log --] [-- Type: text/x-log, Size: 9136 bytes --] *** vcpu_setup begin ************************ vmcs_dump ************************ HOST_CR0 0x0 HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x0 HOST_IDTR_BASE 0x0 HOST_CS_SELECTOR 0x0 HOST_DS_SELECTOR 0x0 HOST_ES_SELECTOR 0x0 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 *** vcpu_setup begin GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 ************************ vmcs_dump ************************ GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 HOST_CR0 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** msrs: 1 vmwrite error: reg 2012 value 0 (err 12) vmwrite error: reg 401c value 0 (err 12) HOST_CR3 0x0 HOST_CR4 0x0 HOST_TR_SELECTOR 0x0 *** vcpu_setup end ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x3264a000 HOST_CR4 0x2690 HOST_TR_BASE 0xb17fb340 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a7000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x1a26d000 GUEST_CR4 0x2021 HOST_GDTR_BASE 0xb18ff000 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 HOST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 HOST_IDTR_BASE 0x0 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x7ffd000 GUEST_CS_LIMIT 0xffff HOST_CS_SELECTOR 0x0 GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff HOST_DS_SELECTOR 0x0 GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf01c8129 HOST_RSP 0x0 HOST_ES_SELECTOR 0x0 *********************************************************** HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x0 VM_ENTRY_CONTROLS 0x0 GUEST_CR0 0x0 GUEST_CR3 0x0 GUEST_CR4 0x0 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x0 GUEST_RFLAGS 0x0 GUEST_RIP 0x0 GUEST_CS_SELECTOR 0x0 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0x0 GUEST_DS_AR_BYTES 0x0 GUEST_ES_AR_BYTES 0x0 GUEST_FS_AR_BYTES 0x0 GUEST_GS_AR_BYTES 0x0 GUEST_SS_AR_BYTES 0x0 GUEST_LDTR_AR_BYTES 0x0 GUEST_TR_AR_BYTES 0x0 GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0x0 GUEST_DS_LIMIT 0x0 GUEST_ES_LIMIT 0x0 GUEST_FS_LIMIT 0x0 GUEST_GS_LIMIT 0x0 GUEST_SS_LIMIT 0x0 GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x0 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x0 EXCEPTION_BITMAP 0x0 HOST_RIP 0x0 HOST_RSP 0x0 *********************************************************** *** pre launch ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x3264a000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17f3340 HOST_GDTR_BASE 0xb1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a7000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 msrs: 1 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 vmwrite error: reg 2012 value 0 (err 12) HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0x80010037 GUEST_CR3 0x1a26d000 GUEST_CR4 0x2020 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x2 GUEST_RIP 0x100000 GUEST_CS_SELECTOR 0x8 GUEST_DS_SELECTOR 0x10 GUEST_ES_SELECTOR 0x10 vmwrite error: reg 401c value 0 (err 12) GUEST_FS_SELECTOR 0x10 GUEST_GS_SELECTOR 0x10 GUEST_SS_SELECTOR 0x10 GUEST_TR_SELECTOR 0x18 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xc09b GUEST_DS_AR_BYTES 0xc093 GUEST_ES_AR_BYTES 0xc093 GUEST_FS_AR_BYTES 0xc093 GUEST_GS_AR_BYTES 0xc093 GUEST_SS_AR_BYTES 0xc093 GUEST_LDTR_AR_BYTES 0x10000 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0x0 *** vcpu_setup end GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 ************************ vmcs_dump ************************ GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0xffffffff GUEST_DS_LIMIT 0xffffffff GUEST_ES_LIMIT 0xffffffff GUEST_FS_LIMIT 0xffffffff GUEST_GS_LIMIT 0xffffffff GUEST_SS_LIMIT 0xffffffff GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x2710 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 HOST_CR0 0x80050033 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0x4000 HOST_RIP 0xf01c8129 HOST_RSP 0x0 *********************************************************** HOST_CR3 0x3264a000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17fb340 HOST_GDTR_BASE 0xb18ff000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a7000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x33 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0xe0010031 GUEST_CR3 0x1a26d000 GUEST_CR4 0x2021 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x23002 GUEST_RIP 0xfff0 GUEST_CS_SELECTOR 0xf000 GUEST_DS_SELECTOR 0x0 GUEST_ES_SELECTOR 0x0 GUEST_FS_SELECTOR 0x0 GUEST_GS_SELECTOR 0x0 GUEST_SS_SELECTOR 0x0 GUEST_TR_SELECTOR 0x0 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xf3 GUEST_DS_AR_BYTES 0xf3 GUEST_ES_AR_BYTES 0xf3 GUEST_FS_AR_BYTES 0xf3 GUEST_GS_AR_BYTES 0xf3 GUEST_SS_AR_BYTES 0xf3 GUEST_LDTR_AR_BYTES 0x82 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0xf0000 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x7ffd000 GUEST_CS_LIMIT 0xffff GUEST_DS_LIMIT 0xffff GUEST_ES_LIMIT 0xffff GUEST_FS_LIMIT 0xffff GUEST_GS_LIMIT 0xffff GUEST_SS_LIMIT 0xffff GUEST_LDTR_LIMIT 0xffff GUEST_TR_LIMIT 0x2088 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0xffff GUEST_IDTR_LIMIT 0xffff VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0xffffffff HOST_RIP 0xf01c8129 HOST_RSP 0x0 *********************************************************** *** pre launch ************************ vmcs_dump ************************ HOST_CR0 0x80050033 HOST_CR3 0x3264a000 HOST_CR4 0x2690 HOST_TR_SELECTOR 0x80 HOST_TR_BASE 0xb17f3340 HOST_GDTR_BASE 0xb1804000 HOST_LDTR_SELECTOR 0x80 HOST_IDTR_BASE 0xb05a7000 HOST_CS_SELECTOR 0x60 HOST_DS_SELECTOR 0x68 HOST_ES_SELECTOR 0x68 HOST_FS_SELECTOR 0x0 HOST_GS_SELECTOR 0x0 HOST_SS_SELECTOR 0x68 VM_ENTRY_CONTROLS 0x11ff GUEST_CR0 0x80010037 GUEST_CR3 0x1a26d000 GUEST_CR4 0x2020 GUEST_SYSENTER_ESP 0x0 GUEST_SYSENTER_EIP 0x0 GUEST_IA32_DEBUGCTL 0x0 GUEST_DR7 0x400 GUEST_RFLAGS 0x2 GUEST_RIP 0x100000 GUEST_CS_SELECTOR 0x8 GUEST_DS_SELECTOR 0x10 GUEST_ES_SELECTOR 0x10 GUEST_FS_SELECTOR 0x10 GUEST_GS_SELECTOR 0x10 GUEST_SS_SELECTOR 0x10 GUEST_TR_SELECTOR 0x18 GUEST_LDTR_SELECTOR 0x0 GUEST_CS_AR_BYTES 0xc09b GUEST_DS_AR_BYTES 0xc093 GUEST_ES_AR_BYTES 0xc093 GUEST_FS_AR_BYTES 0xc093 GUEST_GS_AR_BYTES 0xc093 GUEST_SS_AR_BYTES 0xc093 GUEST_LDTR_AR_BYTES 0x10000 GUEST_TR_AR_BYTES 0x8b GUEST_CS_BASE 0x0 GUEST_DS_BASE 0x0 GUEST_ES_BASE 0x0 GUEST_FS_BASE 0x0 GUEST_GS_BASE 0x0 GUEST_SS_BASE 0x0 GUEST_LDTR_BASE 0x0 GUEST_TR_BASE 0x0 GUEST_CS_LIMIT 0xffffffff GUEST_DS_LIMIT 0xffffffff GUEST_ES_LIMIT 0xffffffff GUEST_FS_LIMIT 0xffffffff GUEST_GS_LIMIT 0xffffffff GUEST_SS_LIMIT 0xffffffff GUEST_LDTR_LIMIT 0x0 GUEST_TR_LIMIT 0x2710 GUEST_GDTR_BASE 0x0 GUEST_IDTR_BASE 0x0 GUEST_GDTR_LIMIT 0x0 GUEST_IDTR_LIMIT 0x0 VM_EXIT_CONTROLS 0x36dff EXCEPTION_BITMAP 0x4000 HOST_RIP 0xf01c8129 HOST_RSP 0x0 *********************************************************** [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 347 bytes --] ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611161403.13461.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611161403.13461.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-18 10:16 ` Hesse, Christian [not found] ` <200611181116.07278.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> 0 siblings, 1 reply; 25+ messages in thread From: Hesse, Christian @ 2006-11-18 10:16 UTC (permalink / raw) To: Avi Kivity; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f [-- Attachment #1.1: Type: text/plain, Size: 1631 bytes --] On Thursday 16 November 2006 14:03, Hesse, Christian wrote: > It did crash again. The log is attached. I don't know if I already mentioned it, but I think it could be interesting: When I reboot the notebook after a crash it starts up normally until X server ist started, then it freezes again. Looks like the second core still has any problem with its interrupts... root@revo:~# cat /proc/interrupts CPU0 CPU1 0: 57707101 2 IO-APIC-edge timer 1: 26901 0 IO-APIC-edge i8042 8: 521165 0 IO-APIC-edge rtc 9: 46288 1 IO-APIC-level acpi 12: 509781 0 IO-APIC-edge i8042 14: 267769 0 IO-APIC-edge ide0 16: 714844 0 IO-APIC-level ipw3945 17: 4899673 2306254 IO-APIC-level uhci_hcd:usb5, i915@pci:0000:00:02.0, eth0 18: 439507 0 IO-APIC-level uhci_hcd:usb4 19: 0 0 IO-APIC-level uhci_hcd:usb3 20: 0 0 IO-APIC-level yenta 21: 2 0 IO-APIC-level ohci1394 22: 2 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2 23: 1100203 0 IO-APIC-level sdhci:slot0, HDA Intel NMI: 0 0 LOC: 57706935 57669244 ERR: 1 MIS: 0 root@revo:~# lspci | grep 00:02.0 00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03) The second power cycle works without problems though. Do you think that is helpful in any way? -- Regards, Christian [-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --] [-- Attachment #2: Type: text/plain, Size: 347 bytes --] ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV [-- Attachment #3: Type: text/plain, Size: 186 bytes --] _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <200611181116.07278.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>]
* Re: [PATCH] KVM: fix calculation of initial value of rdx register [not found] ` <200611181116.07278.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org> @ 2006-11-19 8:22 ` Avi Kivity 0 siblings, 0 replies; 25+ messages in thread From: Avi Kivity @ 2006-11-19 8:22 UTC (permalink / raw) To: Hesse, Christian; +Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f Hesse, Christian wrote: > On Thursday 16 November 2006 14:03, Hesse, Christian wrote: > >> It did crash again. The log is attached. >> > > I don't know if I already mentioned it, but I think it could be interesting: > When I reboot the notebook after a crash it starts up normally until X server > ist started, then it freezes again. Looks like the second core still has any > problem with its interrupts... > > Very strange. Something to try: boot into runlevel 3 (no X) # bind all processes to cpu 0 for i in /proc/[1-9]*/task/*; do taskset -p 1 ${i##*/}; done # bind all interrupts to cpu 0 pkill -9 irqbalance for i in /proc/irq/*/smp_affinity; do echo 1 > $i; done # (may give some errors) # run kvm with vnc (don't require X) ./qemu ... -vnc 1 > root@revo:~# cat /proc/interrupts > CPU0 CPU1 > 0: 57707101 2 IO-APIC-edge timer > 1: 26901 0 IO-APIC-edge i8042 > 8: 521165 0 IO-APIC-edge rtc > 9: 46288 1 IO-APIC-level acpi > 12: 509781 0 IO-APIC-edge i8042 > 14: 267769 0 IO-APIC-edge ide0 > 16: 714844 0 IO-APIC-level ipw3945 > 17: 4899673 2306254 IO-APIC-level uhci_hcd:usb5, > i915@pci:0000:00:02.0, eth0 > 18: 439507 0 IO-APIC-level uhci_hcd:usb4 > 19: 0 0 IO-APIC-level uhci_hcd:usb3 > 20: 0 0 IO-APIC-level yenta > 21: 2 0 IO-APIC-level ohci1394 > 22: 2 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2 > 23: 1100203 0 IO-APIC-level sdhci:slot0, HDA Intel > NMI: 0 0 > LOC: 57706935 57669244 > ERR: 1 > MIS: 0 > root@revo:~# lspci | grep 00:02.0 > 00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS/940GML > Express Integrated Graphics Controller (rev 03) > > The second power cycle works without problems though. Do you think that is > helpful in any way? > -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2006-11-19 8:22 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-06 13:15 [PATCH] KVM: fix calculation of initial value of rdx register Avi Kivity
2006-11-06 18:47 ` Hesse, Christian
[not found] ` <200611061947.47165.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-07 8:14 ` Avi Kivity
[not found] ` <4550407F.6030007-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-07 11:55 ` Hesse, Christian
[not found] ` <200611071255.59831.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-07 12:31 ` Avi Kivity
[not found] ` <45507C84.70504-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-07 13:04 ` Hesse, Christian
[not found] ` <200611071404.38825.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-07 13:25 ` Avi Kivity
[not found] ` <4550893A.1000304-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-07 13:46 ` Hesse, Christian
[not found] ` <200611071446.17870.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-07 14:11 ` Avi Kivity
[not found] ` <4550941E.4070409-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-08 8:04 ` Hesse, Christian
[not found] ` <200611080904.27777.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-08 8:11 ` Avi Kivity
[not found] ` <4551914D.70303-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-08 8:24 ` Hesse, Christian
[not found] ` <200611080924.59607.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-08 8:28 ` Avi Kivity
[not found] ` <45519512.3050606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-09 12:10 ` Hesse, Christian
[not found] ` <200611091310.25066.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-09 13:01 ` Avi Kivity
[not found] ` <455326C3.90601-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-09 13:29 ` Hesse, Christian
[not found] ` <200611091429.57097.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-09 14:03 ` Hesse, Christian
[not found] ` <200611091503.25231.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-09 14:27 ` Avi Kivity
2006-11-10 8:09 ` Hesse, Christian
[not found] ` <200611100909.32168.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-10 15:51 ` Avi Kivity
[not found] ` <45549FF0.8070207-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-14 10:41 ` Avi Kivity
[not found] ` <45599D57.2090001-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2006-11-14 10:55 ` Avi Kivity
2006-11-16 13:03 ` Hesse, Christian
[not found] ` <200611161403.13461.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-18 10:16 ` Hesse, Christian
[not found] ` <200611181116.07278.mail-8oMOrB1mGocUSW6y5lq3GQ@public.gmane.org>
2006-11-19 8:22 ` Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox