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-4.0-testing] vtd: Reinstate ACPI DMAR on system shu

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-4.0-testing] vtd: Reinstate ACPI DMAR on system shutdown or S3/S4/S5.
From: "Xen patchbot-4.0-testing" <patchbot-4.0-testing@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Dec 2010 11:35:27 -0800
Delivery-date: Thu, 23 Dec 2010 11:37:52 -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 1292582910 0
# Node ID b05fa0652463d322c125acdb945341e953616e59
# Parent  eebc0881bdf7dc37e07102101d76c47892623b37
vtd: Reinstate ACPI DMAR on system shutdown or S3/S4/S5.

Signed-off-by: Keir Fraser <keir@xxxxxxx>
xen-unstable changeset:   22570:f2dba7ff0828
xen-unstable date:        Fri Dec 17 10:46:43 2010 +0000
---
 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 eebc0881bdf7 -r b05fa0652463 xen/arch/x86/acpi/power.c
--- a/xen/arch/x86/acpi/power.c Thu Dec 16 20:18:11 2010 +0000
+++ b/xen/arch/x86/acpi/power.c Fri Dec 17 10:48:30 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>
@@ -159,6 +158,8 @@ static int enter_state(u32 state)
 
     freeze_domains();
 
+    acpi_dmar_reinstate();
+
     disable_nonboot_cpus();
     if ( num_online_cpus() != 1 )
     {
@@ -229,6 +230,7 @@ static int enter_state(u32 state)
     cpufreq_add_cpu(0);
     microcode_resume_cpu(0);
     enable_nonboot_cpus();
+    acpi_dmar_zap();
     thaw_domains();
     spin_unlock(&pm_lock);
     return error;
diff -r eebc0881bdf7 -r b05fa0652463 xen/arch/x86/shutdown.c
--- a/xen/arch/x86/shutdown.c   Thu Dec 16 20:18:11 2010 +0000
+++ b/xen/arch/x86/shutdown.c   Fri Dec 17 10:48:30 2010 +0000
@@ -307,6 +307,8 @@ void machine_restart(unsigned int delay_
     watchdog_disable();
     console_start_sync();
     spin_debug_disable();
+
+    acpi_dmar_reinstate();
 
     local_irq_enable();
 
diff -r eebc0881bdf7 -r b05fa0652463 xen/arch/x86/tboot.c
--- a/xen/arch/x86/tboot.c      Thu Dec 16 20:18:11 2010 +0000
+++ b/xen/arch/x86/tboot.c      Fri Dec 17 10:48:30 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>
@@ -479,13 +480,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 eebc0881bdf7 -r b05fa0652463 xen/common/kexec.c
--- a/xen/common/kexec.c        Thu Dec 16 20:18:11 2010 +0000
+++ b/xen/common/kexec.c        Fri Dec 17 10:48:30 2010 +0000
@@ -109,20 +109,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 eebc0881bdf7 -r b05fa0652463 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c        Thu Dec 16 20:18:11 2010 +0000
+++ b/xen/drivers/passthrough/vtd/dmar.c        Fri Dec 17 10:48:30 2010 +0000
@@ -768,3 +768,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 eebc0881bdf7 -r b05fa0652463 xen/include/xen/acpi.h
--- a/xen/include/xen/acpi.h    Thu Dec 16 20:18:11 2010 +0000
+++ b/xen/include/xen/acpi.h    Fri Dec 17 10:48:30 2010 +0000
@@ -421,4 +421,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-4.0-testing] vtd: Reinstate ACPI DMAR on system shutdown or S3/S4/S5., Xen patchbot-4.0-testing <=