From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Mattson Subject: [kvm-unit-tests PATCH] x86: Test disabled local APIC Date: Mon, 14 Nov 2016 10:14:03 -0800 Message-ID: <1479147243-26864-1-git-send-email-jmattson@google.com> References: Cc: Jim Mattson To: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , kvm@vger.kernel.org Return-path: Received: from mail-pg0-f48.google.com ([74.125.83.48]:36863 "EHLO mail-pg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932174AbcKNSWl (ORCPT ); Mon, 14 Nov 2016 13:22:41 -0500 Received: by mail-pg0-f48.google.com with SMTP id f188so56551742pgc.3 for ; Mon, 14 Nov 2016 10:22:41 -0800 (PST) In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: This test disables and re-enables the local APIC and ensures that CPUID.1H:EDX.APIC[bit 9] mirrors IA32_APIC_BASE[11]. Signed-off-by: Jim Mattson --- x86/apic.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/x86/apic.c b/x86/apic.c index eff9a11..39c7fd1 100644 --- a/x86/apic.c +++ b/x86/apic.c @@ -104,6 +104,28 @@ void test_enable_x2apic(void) } } +static void test_apic_disable(void) +{ + u64 orig_apicbase = rdmsr(MSR_IA32_APICBASE); + + report_prefix_push("apic_disable"); + + report("Local apic enabled", orig_apicbase & APIC_EN); + report("CPUID.1H:EDX.APIC[bit 9] is set", cpuid(1).d & (1 << 9)); + + wrmsr(MSR_IA32_APICBASE, orig_apicbase & ~(APIC_EN | APIC_EXTD)); + report("Local apic disabled", !(rdmsr(MSR_IA32_APICBASE) & APIC_EN)); + report("CPUID.1H:EDX.APIC[bit 9] is clear", !(cpuid(1).d & (1 << 9))); + + wrmsr(MSR_IA32_APICBASE, orig_apicbase & ~APIC_EXTD); + wrmsr(MSR_IA32_APICBASE, orig_apicbase); + apic_write(APIC_SPIV, 0x1ff); + report("Local apic enabled", rdmsr(MSR_IA32_APICBASE) & APIC_EN); + report("CPUID.1H:EDX.APIC[bit 9] is set", cpuid(1).d & (1 << 9)); + + report_prefix_pop(); +} + #define ALTERNATE_APIC_BASE 0x42000000 static void test_apicbase(void) @@ -398,6 +420,7 @@ int main() mask_pic_interrupts(); test_apic_id(); + test_apic_disable(); test_enable_x2apic(); test_apicbase(); -- 2.8.0.rc3.226.g39d4020