Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> --- x86/apic.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/x86/apic.c b/x86/apic.c index de19724..dfaea35 100644 --- a/x86/apic.c +++ b/x86/apic.c @@ -66,7 +66,7 @@ static bool do_write_apicbase(u64 data) jmp_buf jmpbuf; int ret; if (set_exception_jmpbuf(GP_VECTOR, jmpbuf) == 0) { - wrmsr(MSR_IA32_APICBASE, data); + wrmsr(MSR_IA32_APICBASE, APIC_DEFAULT_PHYS_BASE | APIC_BSP | data); ret = 0; } else { ret = 1; @@ -77,36 +77,32 @@ static bool do_write_apicbase(u64 data) void test_enable_x2apic(void) { - u64 invalid_state = APIC_DEFAULT_PHYS_BASE | APIC_BSP | APIC_EXTD; - u64 apic_enabled = APIC_DEFAULT_PHYS_BASE | APIC_BSP | APIC_EN; - u64 x2apic_enabled = - APIC_DEFAULT_PHYS_BASE | APIC_BSP | APIC_EN | APIC_EXTD; - if (enable_x2apic()) { printf("x2apic enabled\n"); report("x2apic enabled to invalid state", - do_write_apicbase(invalid_state)); + do_write_apicbase(APIC_EXTD)); report("x2apic enabled to apic enabled", - do_write_apicbase(apic_enabled)); + do_write_apicbase(APIC_EN)); - wrmsr(MSR_IA32_APICBASE, APIC_DEFAULT_PHYS_BASE | APIC_BSP); + report("x2apic enabled to disabled state", + !do_write_apicbase(0)); report("disabled to invalid state", - do_write_apicbase(invalid_state)); + do_write_apicbase(APIC_EXTD)); report("disabled to x2apic enabled", - do_write_apicbase(x2apic_enabled)); + do_write_apicbase(APIC_EN | APIC_EXTD)); - wrmsr(MSR_IA32_APICBASE, apic_enabled); + wrmsr(MSR_IA32_APICBASE, APIC_EN); report("apic enabled to invalid state", - do_write_apicbase(invalid_state)); + do_write_apicbase(APIC_EXTD)); - wrmsr(MSR_IA32_APICBASE, x2apic_enabled); + wrmsr(MSR_IA32_APICBASE, APIC_EN | APIC_EXTD); apic_write(APIC_SPIV, 0x1ff); } else { printf("x2apic not detected\n"); report("enable unsupported x2apic", - do_write_apicbase(x2apic_enabled)); + do_write_apicbase(APIC_EN | APIC_EXTD)); } } -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html