0c76f22ef1
- bnc#633573 - System fail to boot after running several warm reboot tests 22749-vtd-workarounds.patch - Upstream patches from Jan 22744-ept-pod-locking.patch 22777-vtd-ats-fixes.patch 22781-pod-hap-logdirty.patch 22782-x86-emul-smsw.patch 22789-i386-no-x2apic.patch 22790-svm-resume-migrate-pirqs.patch 22816-x86-pirq-drop-priv-check.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=94
89 lines
2.8 KiB
Diff
89 lines
2.8 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir@xen.org>
|
|
# Date 1292414185 0
|
|
# Node ID fcc91cb3efcb83823b7e9c74ee3c97c4a9c0b7d5
|
|
# Parent d4b373ec948bed71b8683e09e41c6afc99f1edb6
|
|
x86: x2apic pre-enabled but intr-remapping is not enabled
|
|
References: bnc#656369, bnc#658704
|
|
|
|
Make it aligned with Linux kernel.
|
|
|
|
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
|
|
|
|
Removed unnecessary bits from the original patch, and removed
|
|
intremap_enabled() with its only caller gone.
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
|
|
|
Index: xen-4.0.2-testing/xen/arch/x86/apic.c
|
|
===================================================================
|
|
--- xen-4.0.2-testing.orig/xen/arch/x86/apic.c
|
|
+++ xen-4.0.2-testing/xen/arch/x86/apic.c
|
|
@@ -964,15 +964,6 @@ void x2apic_setup(void)
|
|
rdmsr(MSR_IA32_APICBASE, lo, hi);
|
|
if ( lo & MSR_IA32_APICBASE_EXTD )
|
|
{
|
|
- /*
|
|
- * Interrupt remapping should be also enabled by BIOS when
|
|
- * x2APIC is already enabled by BIOS, otherwise it's a BIOS
|
|
- * bug
|
|
- */
|
|
- if ( !intremap_enabled() )
|
|
- panic("Interrupt remapping is not enabled by BIOS while "
|
|
- "x2APIC is already enabled by BIOS!\n");
|
|
-
|
|
printk("x2APIC mode is already enabled by BIOS.\n");
|
|
x2apic_enabled = 1;
|
|
}
|
|
@@ -1015,6 +1006,10 @@ void x2apic_setup(void)
|
|
|
|
if ( iommu_enable_IR() )
|
|
{
|
|
+ if ( x2apic_enabled )
|
|
+ panic("Interrupt remapping could not be enabled while "
|
|
+ "x2APIC is already enabled by BIOS!\n");
|
|
+
|
|
printk("Would not enable x2APIC due to interrupt remapping "
|
|
"cannot be enabled.\n");
|
|
goto restore_out;
|
|
Index: xen-4.0.2-testing/xen/drivers/passthrough/vtd/intremap.c
|
|
===================================================================
|
|
--- xen-4.0.2-testing.orig/xen/drivers/passthrough/vtd/intremap.c
|
|
+++ xen-4.0.2-testing/xen/drivers/passthrough/vtd/intremap.c
|
|
@@ -892,23 +892,3 @@ void iommu_disable_IR(void)
|
|
for_each_drhd_unit ( drhd )
|
|
disable_qinval(drhd->iommu);
|
|
}
|
|
-
|
|
-/*
|
|
- * Check if interrupt remapping is enabled or not
|
|
- * return 1: enabled
|
|
- * return 0: not enabled
|
|
- */
|
|
-int intremap_enabled(void)
|
|
-{
|
|
- struct acpi_drhd_unit *drhd;
|
|
- u32 sts;
|
|
-
|
|
- for_each_drhd_unit ( drhd )
|
|
- {
|
|
- sts = dmar_readl(drhd->iommu->reg, DMAR_GSTS_REG);
|
|
- if ( !(sts & DMA_GSTS_IRES) )
|
|
- return 0;
|
|
- }
|
|
-
|
|
- return 1;
|
|
-}
|
|
Index: xen-4.0.2-testing/xen/include/xen/iommu.h
|
|
===================================================================
|
|
--- xen-4.0.2-testing.orig/xen/include/xen/iommu.h
|
|
+++ xen-4.0.2-testing/xen/include/xen/iommu.h
|
|
@@ -62,7 +62,6 @@ int iommu_setup(void);
|
|
int iommu_supports_eim(void);
|
|
int iommu_enable_IR(void);
|
|
void iommu_disable_IR(void);
|
|
-int intremap_enabled(void);
|
|
|
|
int iommu_add_device(struct pci_dev *pdev);
|
|
int iommu_remove_device(struct pci_dev *pdev);
|