[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.