WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] vtd: Reinstate ACPI DMAR on system shutdo

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] vtd: Reinstate ACPI DMAR on system shutdown or S3/S4/S5.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Dec 2010 05:35:19 -0800
Delivery-date: Thu, 23 Dec 2010 05:48:28 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1292582803 0
# Node ID f2dba7ff082833775f51c73ec9470b2921caec2d
# Parent  5f10b4c2c24bf51303e35504e848d01fbf9ffd63
vtd: Reinstate ACPI DMAR on system shutdown or S3/S4/S5.

Signed-off-by: Keir Fraser <keir@xxxxxxx>
---
 xen/arch/x86/acpi/power.c          |    4 +++-
 xen/arch/x86/shutdown.c            |    2 ++
 xen/arch/x86/tboot.c               |    9 ++-------
 xen/common/kexec.c                 |    9 +--------
 xen/drivers/passthrough/vtd/dmar.c |   31 +++++++++++++++++++++++++++++++
 xen/include/xen/acpi.h             |    3 +++
 6 files changed, 42 insertions(+), 16 deletions(-)

diff -r 5f10b4c2c24b -r f2dba7ff0828 xen/arch/x86/acpi/power.c
--- a/xen/arch/x86/acpi/power.c Fri Dec 17 09:54:22 2010 +0000
+++ b/xen/arch/x86/acpi/power.c Fri Dec 17 10:46:43 2010 +0000
@@ -12,7 +12,6 @@
 
 #include <xen/config.h>
 #include <asm/io.h>
-#include <asm/acpi.h>
 #include <xen/acpi.h>
 #include <xen/errno.h>
 #include <xen/iocap.h>
@@ -140,6 +139,8 @@ static int enter_state(u32 state)
 
     freeze_domains();
 
+    acpi_dmar_reinstate();
+
     if ( (error = disable_nonboot_cpus()) )
         goto enable_cpu;
 
@@ -208,6 +209,7 @@ static int enter_state(u32 state)
     mtrr_aps_sync_begin();
     enable_nonboot_cpus();
     mtrr_aps_sync_end();
+    acpi_dmar_zap();
     thaw_domains();
     spin_unlock(&pm_lock);
     return error;
diff -r 5f10b4c2c24b -r f2dba7ff0828 xen/arch/x86/shutdown.c
--- a/xen/arch/x86/shutdown.c   Fri Dec 17 09:54:22 2010 +0000
+++ b/xen/arch/x86/shutdown.c   Fri Dec 17 10:46:43 2010 +0000
@@ -309,6 +309,8 @@ void machine_restart(unsigned int delay_
     console_start_sync();
     spin_debug_disable();
 
+    acpi_dmar_reinstate();
+
     local_irq_enable();
 
     /* Ensure we are the boot CPU. */
diff -r 5f10b4c2c24b -r f2dba7ff0828 xen/arch/x86/tboot.c
--- a/xen/arch/x86/tboot.c      Fri Dec 17 09:54:22 2010 +0000
+++ b/xen/arch/x86/tboot.c      Fri Dec 17 10:46:43 2010 +0000
@@ -5,6 +5,7 @@
 #include <xen/sched.h>
 #include <xen/domain_page.h>
 #include <xen/iommu.h>
+#include <xen/acpi.h>
 #include <asm/fixmap.h>
 #include <asm/page.h>
 #include <asm/processor.h>
@@ -475,13 +476,7 @@ int __init tboot_parse_dmar_table(acpi_t
 
     /* acpi_parse_dmar() zaps APCI DMAR signature in TXT heap table */
     /* but dom0 will read real table, so must zap it there too */
-    dmar_table = NULL;
-    acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table);
-    if ( dmar_table != NULL )
-    {
-        dmar_table->signature[0] = 'X';
-        dmar_table->checksum -= 'X'-'D';
-    }
+    acpi_dmar_zap();
 
     return rc;
 }
diff -r 5f10b4c2c24b -r f2dba7ff0828 xen/common/kexec.c
--- a/xen/common/kexec.c        Fri Dec 17 09:54:22 2010 +0000
+++ b/xen/common/kexec.c        Fri Dec 17 10:46:43 2010 +0000
@@ -203,20 +203,13 @@ crash_xen_info_t *kexec_crash_save_info(
     return out;
 }
 
-static int acpi_dmar_reinstate(struct acpi_table_header *table)
-{
-    table->signature[0] = 'D';
-    table->checksum += 'X'-'D';
-    return 0;
-}
-
 static void kexec_common_shutdown(void)
 {
     watchdog_disable();
     console_start_sync();
     spin_debug_disable();
     one_cpu_only();
-    acpi_table_parse(ACPI_SIG_DMAR, acpi_dmar_reinstate);
+    acpi_dmar_reinstate();
 }
 
 void kexec_crash(void)
diff -r 5f10b4c2c24b -r f2dba7ff0828 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c        Fri Dec 17 09:54:22 2010 +0000
+++ b/xen/drivers/passthrough/vtd/dmar.c        Fri Dec 17 10:46:43 2010 +0000
@@ -771,3 +771,34 @@ int __init acpi_dmar_init(void)
 {
     return parse_dmar_table(acpi_parse_dmar);
 }
+
+static struct acpi_table_header *get_dmar(void)
+{
+    struct acpi_table_header *dmar_table = NULL;
+    unsigned long flags;
+
+    /* Disabling IRQs avoids cross-CPU TLB flush in map_pages_to_xen(). */
+    local_irq_save(flags);
+    acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table);
+    local_irq_restore(flags);
+
+    return dmar_table;
+}
+
+void acpi_dmar_reinstate(void)
+{
+    struct acpi_table_header *dmar_table = get_dmar();
+    if ( dmar_table == NULL )
+        return;
+    dmar_table->signature[0] = 'D';
+    dmar_table->checksum += 'X'-'D';
+}
+
+void acpi_dmar_zap(void)
+{
+    struct acpi_table_header *dmar_table = get_dmar();
+    if ( dmar_table == NULL )
+        return;
+    dmar_table->signature[0] = 'X';
+    dmar_table->checksum -= 'X'-'D';
+}
diff -r 5f10b4c2c24b -r f2dba7ff0828 xen/include/xen/acpi.h
--- a/xen/include/xen/acpi.h    Fri Dec 17 09:54:22 2010 +0000
+++ b/xen/include/xen/acpi.h    Fri Dec 17 10:46:43 2010 +0000
@@ -444,4 +444,7 @@ extern int pnpacpi_disabled;
 
 void acpi_reboot(void);
 
+void acpi_dmar_zap(void);
+void acpi_dmar_reinstate(void);
+
 #endif /*_LINUX_ACPI_H*/

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] vtd: Reinstate ACPI DMAR on system shutdown or S3/S4/S5., Xen patchbot-unstable <=