[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1 of 7] APIC BUG: fix potential Protection Fault during shutdown
On 14/06/11 09:44, Jan Beulich wrote: >>>> On 13.06.11 at 19:02, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote: >> This is a rare case, but if the BIOS is set to uniprocessor, and Xen >> is booted with 'lapic x2apic', Xen will switch into x2apic mode, which >> will cause a protection fault when disabling the local APIC. This >> leads to a general protection fault as this code is also in the fault >> handler. >> >> When x2apic mode is enabled, the only tranlsation which does >> not result in a protection fault is to clear both the EN and EXTD >> bits, which is safe to do in all cases, even if you are in xapic >> mode rather than x2apic mode. >> >> The linux code from which this is derrived is protected by an >> if ( ! x2apic_mode ...) clause which is how they get away with it. >> >> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > Acked-by: Jan Beulich <jbeulich@xxxxxxxxxx> > > You may want to submit a similar patch to Linux (which is what > this code got derived from), so that in the future no-one will get > surprised that this is different in Xen and Linux. > > Otoh, interestingly this is being done only for x86-32 in Linux, and > I highly doubt any X2APIC capable machine would boot with APIC > disabled. > > Jan > As I said, it is an edge case and shouldn't occur under any normal circumstances, but given the nature of the fix, we might as well help the odd setups. I considered upstreaming it to Linux but I doubt It will be taken because there is no way to force their code to have a protection fault. ~Andrew >> diff -r 37c77bacb52a -r 076c3034c8c7 xen/arch/x86/apic.c >> --- a/xen/arch/x86/apic.c Mon May 23 17:38:28 2011 +0100 >> +++ b/xen/arch/x86/apic.c Mon Jun 13 17:45:43 2011 +0100 >> @@ -340,7 +340,8 @@ void disable_local_APIC(void) >> if (enabled_via_apicbase) { >> uint64_t msr_content; >> rdmsrl(MSR_IA32_APICBASE, msr_content); >> - wrmsrl(MSR_IA32_APICBASE, msr_content & ~MSR_IA32_APICBASE_ENABLE); >> + wrmsrl(MSR_IA32_APICBASE, msr_content & >> + ~(MSR_IA32_APICBASE_ENABLE|MSR_IA32_APICBASE_EXTD)); >> } >> } >> >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@xxxxxxxxxxxxxxxxxxx >> http://lists.xensource.com/xen-devel > > -- Andrew Cooper - Dom0 Kernel Engineer, Citrix XenServer T: +44 (0)1223 225 900, http://www.citrix.com _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |