|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] Merge
# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxx>
# Date 1295625899 0
# Node ID ca64bd257a6fb0818bb0fa5e559c5220eafd80fa
# Parent e9277ab439472bbcf5717c82155361e6f97afa3a
# Parent 1637fdbfc21e2c732eca29136943a568f8f341cd
Merge
---
xen/arch/x86/apic.c | 16 ++++++++++++++++
xen/arch/x86/hvm/svm/svm.c | 2 +-
xen/arch/x86/x86_32/domain_page.c | 2 ++
xen/drivers/passthrough/vtd/quirks.c | 10 ++++++++--
4 files changed, 27 insertions(+), 3 deletions(-)
diff -r e9277ab43947 -r ca64bd257a6f xen/arch/x86/apic.c
--- a/xen/arch/x86/apic.c Fri Jan 21 15:37:36 2011 +0000
+++ b/xen/arch/x86/apic.c Fri Jan 21 16:04:59 2011 +0000
@@ -961,6 +961,22 @@ void __init x2apic_bsp_setup(void)
if ( !cpu_has_x2apic )
return;
+#ifdef __i386__
+ clear_bit(X86_FEATURE_X2APIC, boot_cpu_data.x86_capability);
+ if ( x2apic_enabled )
+ {
+ uint64_t msr_content;
+ rdmsrl(MSR_IA32_APICBASE, msr_content);
+ msr_content &= ~(MSR_IA32_APICBASE_ENABLE | MSR_IA32_APICBASE_EXTD);
+ wrmsrl(MSR_IA32_APICBASE, msr_content);
+ msr_content |= MSR_IA32_APICBASE_ENABLE;
+ wrmsrl(MSR_IA32_APICBASE, msr_content);
+ x2apic_enabled = 0;
+ }
+ printk("x2APIC disabled permanently on x86_32.\n");
+ return;
+#endif
+
if ( !opt_x2apic )
{
if ( !x2apic_enabled )
diff -r e9277ab43947 -r ca64bd257a6f xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Fri Jan 21 15:37:36 2011 +0000
+++ b/xen/arch/x86/hvm/svm/svm.c Fri Jan 21 16:04:59 2011 +0000
@@ -705,7 +705,7 @@ static void svm_do_resume(struct vcpu *v
{
v->arch.hvm_svm.launch_core = smp_processor_id();
hvm_migrate_timers(v);
-
+ hvm_migrate_pirqs(v);
/* Migrating to another ASID domain. Request a new ASID. */
hvm_asid_flush_vcpu(v);
}
diff -r e9277ab43947 -r ca64bd257a6f xen/arch/x86/x86_32/domain_page.c
--- a/xen/arch/x86/x86_32/domain_page.c Fri Jan 21 15:37:36 2011 +0000
+++ b/xen/arch/x86/x86_32/domain_page.c Fri Jan 21 16:04:59 2011 +0000
@@ -53,6 +53,8 @@ void *map_domain_page(unsigned long mfn)
perfc_incr(map_domain_page_count);
v = mapcache_current_vcpu();
+ /* Prevent vcpu pointer being used before initialize. */
+ ASSERT((unsigned long)v != 0xfffff000);
dcache = &v->domain->arch.mapcache;
vcache = &v->arch.mapcache;
diff -r e9277ab43947 -r ca64bd257a6f xen/drivers/passthrough/vtd/quirks.c
--- a/xen/drivers/passthrough/vtd/quirks.c Fri Jan 21 15:37:36 2011 +0000
+++ b/xen/drivers/passthrough/vtd/quirks.c Fri Jan 21 16:04:59 2011 +0000
@@ -217,10 +217,15 @@ static void snb_vtd_ops_postamble(struct
/*
* call before VT-d translation enable and IOTLB flush operations.
*/
+
+static int snb_igd_quirk;
+boolean_param("snb_igd_quirk", snb_igd_quirk);
+
void vtd_ops_preamble_quirk(struct iommu* iommu)
{
cantiga_vtd_ops_preamble(iommu);
- snb_vtd_ops_preamble(iommu);
+ if ( snb_igd_quirk )
+ snb_vtd_ops_preamble(iommu);
}
/*
@@ -228,7 +233,8 @@ void vtd_ops_preamble_quirk(struct iommu
*/
void vtd_ops_postamble_quirk(struct iommu* iommu)
{
- snb_vtd_ops_postamble(iommu);
+ if ( snb_igd_quirk )
+ snb_vtd_ops_postamble(iommu);
}
/* initialize platform identification flags */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
|
|
|
|