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-3.4-testing] x86/hvm: don't pass through port 0x80

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-3.4-testing] x86/hvm: don't pass through port 0x80 in a few special cases
From: "Xen patchbot-3.4-testing" <patchbot-3.4-testing@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 16 Jun 2009 06:45:38 -0700
Delivery-date: Tue, 16 Jun 2009 06:48:06 -0700
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.fraser@xxxxxxxxxx>
# Date 1245158974 -3600
# Node ID 77bf68bae18499d4e04dcd29cfc281f6c3c322c9
# Parent  203f80e56c84369be01eea92db99be347c82b59e
x86/hvm: don't pass through port 0x80 in a few special cases

In a recent commit (99f85a28a78e96d28907fe036e1671a218fee597), KVM
disabled the passthrough of this port due to known problems on certain
HP laptops (see
http://lkml.indiana.edu/hypermail/linux/kernel/0712.3/0872.html
and http://lkml.indiana.edu/hypermail/linux/kernel/0801.0/2388.html).

For Xen, don't do this globally, but rather based on a DMI black list.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
xen-unstable changeset:   19767:cb6f8a34b59a
xen-unstable date:        Tue Jun 16 13:52:13 2009 +0100
---
 xen/arch/x86/hvm/Makefile |    1 
 xen/arch/x86/hvm/hvm.c    |    5 +-
 xen/arch/x86/hvm/quirks.c |   93 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 98 insertions(+), 1 deletion(-)

diff -r 203f80e56c84 -r 77bf68bae184 xen/arch/x86/hvm/Makefile
--- a/xen/arch/x86/hvm/Makefile Tue Jun 16 14:28:15 2009 +0100
+++ b/xen/arch/x86/hvm/Makefile Tue Jun 16 14:29:34 2009 +0100
@@ -9,6 +9,7 @@ obj-y += irq.o
 obj-y += irq.o
 obj-y += mtrr.o
 obj-y += pmtimer.o
+obj-y += quirks.o
 obj-y += rtc.o
 obj-y += hpet.o
 obj-y += vpt.o
diff -r 203f80e56c84 -r 77bf68bae184 xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c    Tue Jun 16 14:28:15 2009 +0100
+++ b/xen/arch/x86/hvm/hvm.c    Tue Jun 16 14:29:34 2009 +0100
@@ -71,6 +71,8 @@ unsigned long __attribute__ ((__section_
 
 void hvm_enable(struct hvm_function_table *fns)
 {
+    extern int hvm_port80_allowed;
+
     BUG_ON(hvm_enabled);
     printk("HVM: %s enabled\n", fns->name);
 
@@ -79,7 +81,8 @@ void hvm_enable(struct hvm_function_tabl
      * often used for I/O delays, but the vmexits simply slow things down).
      */
     memset(hvm_io_bitmap, ~0, sizeof(hvm_io_bitmap));
-    __clear_bit(0x80, hvm_io_bitmap);
+    if ( hvm_port80_allowed )
+        __clear_bit(0x80, hvm_io_bitmap);
     __clear_bit(0xed, hvm_io_bitmap);
 
     hvm_funcs   = *fns;
diff -r 203f80e56c84 -r 77bf68bae184 xen/arch/x86/hvm/quirks.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/x86/hvm/quirks.c Tue Jun 16 14:29:34 2009 +0100
@@ -0,0 +1,93 @@
+/******************************************************************************
+ * x86/hvm/quirks.c
+ * 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#include <xen/config.h>
+#include <xen/types.h>
+#include <xen/init.h>
+#include <xen/lib.h>
+#include <xen/dmi.h>
+
+int hvm_port80_allowed = -1;
+boolean_param("hvm_port80", hvm_port80_allowed);
+
+static int __init dmi_hvm_deny_port80(/*const*/ struct dmi_system_id *id)
+{
+    printk(XENLOG_WARNING "%s: port 0x80 access %s allowed for HVM guests\n",
+           id->ident, hvm_port80_allowed > 0 ? "forcibly" : "not");
+
+    if ( hvm_port80_allowed < 0 )
+        hvm_port80_allowed = 0;
+
+    return 0;
+}
+
+static int __init check_port80(void)
+{
+    /*
+     * Quirk table for systems that misbehave (lock up, etc.) if port
+     * 0x80 is used:
+     */
+    static struct dmi_system_id __initdata hvm_no_port80_dmi_table[] =
+    {
+        {
+            .callback = dmi_hvm_deny_port80,
+            .ident    = "Compaq Presario V6000",
+            .matches  = {
+                DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
+                DMI_MATCH(DMI_BOARD_NAME,   "30B7")
+            }
+        },
+        {
+            .callback = dmi_hvm_deny_port80,
+            .ident    = "HP Pavilion dv9000z",
+            .matches  = {
+                DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
+                DMI_MATCH(DMI_BOARD_NAME,   "30B9")
+            }
+        },
+        {
+            .callback = dmi_hvm_deny_port80,
+            .ident    = "HP Pavilion dv6000",
+            .matches  = {
+                DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
+                DMI_MATCH(DMI_BOARD_NAME,   "30B8")
+            }
+        },
+        {
+            .callback = dmi_hvm_deny_port80,
+            .ident    = "HP Pavilion tx1000",
+            .matches  = {
+                DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
+                DMI_MATCH(DMI_BOARD_NAME,   "30BF")
+            }
+        },
+        {
+            .callback = dmi_hvm_deny_port80,
+            .ident    = "Presario F700",
+            .matches  = {
+                DMI_MATCH(DMI_BOARD_VENDOR, "Quanta"),
+                DMI_MATCH(DMI_BOARD_NAME,   "30D3")
+            }
+        },
+        { }
+    };
+
+    dmi_check_system(hvm_no_port80_dmi_table);
+
+    return 0;
+}
+__initcall(check_port80);

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-3.4-testing] x86/hvm: don't pass through port 0x80 in a few special cases, Xen patchbot-3.4-testing <=