800917b5a2
- Update to Xen 4.1.2_rc2 c/s 23152 - bnc#716695 - domUs using tap devices will not start updated multi-xvdp.patch - Upstream patches from Jan 23803-intel-pmu-models.patch 23800-x86_64-guest-addr-range.patch 23795-intel-ich10-quirk.patch 23804-x86-IPI-counts.patch - bnc#706106 - Inconsistent reporting of VM names during migration xend-migration-domname-fix.patch - bnc#712823 - L3:Xen guest does not start reliable when rebooted xend-vcpu-affinity-fix.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=143
83 lines
2.4 KiB
Diff
83 lines
2.4 KiB
Diff
References: bnc#683580
|
|
|
|
# HG changeset patch
|
|
# User Jan Beulich <jbeulich@novell.com>
|
|
# Date 1314443678 -3600
|
|
# Node ID e17f70940d1f57fe04dde3bf4e243f75c89f0d0e
|
|
# Parent 4705eca37c9fac9d13867a856bdcfa8b7bad56c6
|
|
x86: work around certain Intel BIOSes causing (transient) hangs during boot
|
|
|
|
They apparently leave the USB legacy emulation bits set in ICH10's
|
|
SMI Control and Enable register, but fail to handle the resulting SMIs
|
|
gracefully. The hangs can apparently extend indefinitely, but are
|
|
commonly observed to last between a few seconds and a minute.
|
|
|
|
This assumes that only ICH10-based systems on Intel main boards with
|
|
Intel BIOS may be affected. Until Intel comes up with a more precise
|
|
identification of affected BIOSes, all Intel ones on Intel boards
|
|
will get this workaround applied.
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
|
|
|
Index: xen-4.1.2-testing/xen/arch/x86/dmi_scan.c
|
|
===================================================================
|
|
--- xen-4.1.2-testing.orig/xen/arch/x86/dmi_scan.c
|
|
+++ xen-4.1.2-testing/xen/arch/x86/dmi_scan.c
|
|
@@ -10,6 +10,8 @@
|
|
#include <asm/system.h>
|
|
#include <xen/dmi.h>
|
|
#include <xen/efi.h>
|
|
+#include <xen/pci.h>
|
|
+#include <xen/pci_regs.h>
|
|
|
|
#define bt_ioremap(b,l) ((void *)__acpi_map_table(b,l))
|
|
#define bt_iounmap(b,l) ((void)0)
|
|
@@ -278,6 +280,28 @@ static __init int broken_toshiba_keyboar
|
|
return 0;
|
|
}
|
|
|
|
+static int __init ich10_bios_quirk(struct dmi_system_id *d)
|
|
+{
|
|
+ u32 port, smictl;
|
|
+
|
|
+ if ( pci_conf_read16(0, 0x1f, 0, PCI_VENDOR_ID) != 0x8086 )
|
|
+ return 0;
|
|
+
|
|
+ switch ( pci_conf_read16(0, 0x1f, 0, PCI_DEVICE_ID) ) {
|
|
+ case 0x3a14:
|
|
+ case 0x3a16:
|
|
+ case 0x3a18:
|
|
+ case 0x3a1a:
|
|
+ port = (pci_conf_read16(0, 0x1f, 0, 0x40) & 0xff80) + 0x30;
|
|
+ smictl = inl(port);
|
|
+ /* turn off LEGACY_USB{,2}_EN if enabled */
|
|
+ if ( smictl & 0x20008 )
|
|
+ outl(smictl & ~0x20008, port);
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
|
|
#ifdef CONFIG_ACPI_SLEEP
|
|
static __init int reset_videomode_after_s3(struct dmi_blacklist *d)
|
|
@@ -363,6 +387,18 @@ static __initdata struct dmi_blacklist d
|
|
} },
|
|
#endif
|
|
|
|
+ { ich10_bios_quirk, "Intel board & BIOS",
|
|
+ /*
|
|
+ * BIOS leaves legacy USB emulation enabled while
|
|
+ * SMM can't properly handle it.
|
|
+ */
|
|
+ {
|
|
+ MATCH(DMI_BOARD_VENDOR, "Intel Corp"),
|
|
+ MATCH(DMI_BIOS_VENDOR, "Intel Corp"),
|
|
+ NO_MATCH, NO_MATCH
|
|
+ }
|
|
+ },
|
|
+
|
|
#ifdef CONFIG_ACPI_BOOT
|
|
/*
|
|
* If your system is blacklisted here, but you find that acpi=force
|