[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1 of 2] x86/x2apic: Sandy-Bridge BT98 Erratum
>>> On 26.04.13 at 20:11, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote: > +/* Xeon E5 Family processors (Sandy-Bridge) suffer from erratum BT98, which > + * affects Stepping C-1, but is reported fixed in Stepping C-2. > + * > + * This causes system instability when using x2apic and VT-d queued > + * invalidation. The workaround is to disable x2apic and VT-d. > + */ > +static void __init smb_bt98_erratum(void) snb_bt98_erratum() perhaps? And is this really limited to just one specific product line (usually the same microarchitecture gets used for multiple ones, and then the BT98 reference would become confusing)? > +{ > + const struct cpuinfo_x86 *c = &boot_cpu_data; > + > + if (!(c->x86_vendor == X86_VENDOR_INTEL && > + c->x86 == 6 && > + c->x86_model == 0x2d && > + c->x86_mask == 0x6)) > + return; > + > + printk(KERN_WARNING > + "Disabling x2apic due to Sandy-Bridge BT98 erratum\n"); > + > + clear_bit(X86_FEATURE_X2APIC, boot_cpu_data.x86_capability); > + x2apic_enabled = 0; > + Up here it's fine. > + /* If the BIOS started us in x2apic mode, switch back to xapic. */ > + if (apic_boot_mode == APIC_MODE_X2APIC) { > + uint64_t msr; > + > + rdmsrl(MSR_IA32_APICBASE, msr); > + msr &= ~(MSR_IA32_APICBASE_ENABLE|MSR_IA32_APICBASE_EXTD); > + wrmsrl(MSR_IA32_APICBASE, msr); > + msr |= MSR_IA32_APICBASE_ENABLE; > + wrmsrl(MSR_IA32_APICBASE, msr); > + > + apic_boot_mode = APIC_MODE_XAPIC; > + } But how good are our chances that this won't cause subsequent problems? The BIOS may e.g. have assigned APIC IDs wider than what xAPIC can deal with. I think we ought to consider denying to boot in that case altogether. How does Linux deal with the erratum? > +} > + > void __init generic_apic_probe(void) > { > int i, changed; > > record_boot_APIC_mode(); > > + /* Must be before check_x2apic_preenabled() */ Indentation (in case you need to resubmit anyway). > + smb_bt98_erratum(); Perhaps worth moving into check_x2apic_preenabled() instead, keeping x2apic related code as much as possible in x2apic.c? > + > check_x2apic_preenabled(); > cmdline_apic = changed = (genapic != NULL); > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |