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-devel

Re: [Xen-devel] [PATCH] VT-d: improve RMRR validity checking

To: Alex Williamson <alex.williamson@xxxxxx>
Subject: Re: [Xen-devel] [PATCH] VT-d: improve RMRR validity checking
From: Weidong Han <weidong.han@xxxxxxxxx>
Date: Thu, 11 Mar 2010 16:30:05 +0800
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Noboru Iwamatsu <n_iwamatsu@xxxxxxxxxxxxxx>, "Cihula, Joseph" <joseph.cihula@xxxxxxxxx>, "Kay, Allen M" <allen.m.kay@xxxxxxxxx>, "linux@xxxxxxxxxxxxxx" <linux@xxxxxxxxxxxxxx>, "keir.fraser@xxxxxxxxxxxxx" <keir.fraser@xxxxxxxxxxxxx>
Delivery-date: Thu, 11 Mar 2010 00:30:52 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1268283150.3015.69.camel@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <C77E162B.6FE6%keir.fraser@xxxxxxxxxxxxx> <4B59098B.6000108@xxxxxxxxx> <4B590FA4.4000008@xxxxxxxxxxxxxx> <4B59132B.40607@xxxxxxxxx> <4B59188C.50901@xxxxxxxxxxxxxx> <4B59660F.4000909@xxxxxxxxx> <7162ab21003091339i4adb8669safd5e074607386a2@xxxxxxxxxxxxxx> <4B9706B3.3050903@xxxxxxxxx> <1268191101.3015.30.camel@xxxxxxxxxx> <4B9711CF.7030908@xxxxxxxxx> <1268192253.3015.37.camel@xxxxxxxxxx> <4B971F57.9000903@xxxxxxxxx> <1268196438.3015.56.camel@xxxxxxxxxx> <4B974438.3050806@xxxxxxxxx> <1268229408.14039.151.camel@xxxxxxxxxx> <1268244414.14039.206.camel@xxxxxxxxxx> <4B985150.1000001@xxxxxxxxx> <1268274721.3015.64.camel@xxxxxxxxxx> <4B986736.9000204@xxxxxxxxx> <1268283150.3015.69.camel@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.21 (Windows/20090302)
Alex Williamson wrote:
On Thu, 2010-03-11 at 11:44 +0800, Weidong Han wrote:
good suggestion to check the device type. I cooked a new patch. It skips checking IOAPIC and HPET. pls have a try.

I like this approach better, but the patch doesn't work as is.  The
problem is acpi_scope is getting incremented as a structure instead of
by length bytes.  It either needs to be cast on the increment, or maybe
cast on use like this:

Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>

diff -r 132ac04cbdba xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c        Tue Mar 09 18:18:19 2010 +0000
+++ b/xen/drivers/passthrough/vtd/dmar.c        Wed Mar 10 21:46:49 2010 -0700
@@ -407,9 +407,15 @@
     {
         u8 b, d, f;
         int i, invalid_cnt = 0;
+        void *p;
- for ( i = 0; i < dmaru->scope.devices_cnt; i++ )
+        for ( i = 0, p = dev_scope_start; i < dmaru->scope.devices_cnt;
+              i++, p += ((struct acpi_dev_scope *)p)->length )
         {
+            if ( ((struct acpi_dev_scope *)p)->dev_type == ACPI_DEV_IOAPIC ||
+                 ((struct acpi_dev_scope *)p)->dev_type == ACPI_DEV_MSI_HPET )
+                continue;
+
             b = PCI_BUS(dmaru->scope.devices[i]);
             d = PCI_SLOT(dmaru->scope.devices[i]);
             f = PCI_FUNC(dmaru->scope.devices[i]);

Acked-by: Weidong Han <weidong.han@xxxxxxxxx>

Regards,
Weidong

diff -r cadf1bae9ee2 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c    Thu Feb 25 18:26:45 2010 +0800
+++ b/xen/drivers/passthrough/vtd/dmar.c    Thu Mar 11 19:39:45 2010 +0800
@@ -407,9 +407,15 @@ acpi_parse_one_drhd(struct acpi_dmar_ent
     {
         u8 b, d, f;
         int i, invalid_cnt = 0;
+        struct acpi_dev_scope *acpi_scope = dev_scope_start;

         for ( i = 0; i < dmaru->scope.devices_cnt; i++ )
         {
+            acpi_scope += (i == 0) ? 0 : acpi_scope->length;
+            if ( acpi_scope->dev_type == ACPI_DEV_IOAPIC ||
+                 acpi_scope->dev_type == ACPI_DEV_MSI_HPET )
+                continue;
+
             b = PCI_BUS(dmaru->scope.devices[i]);
             d = PCI_SLOT(dmaru->scope.devices[i]);
             f = PCI_FUNC(dmaru->scope.devices[i]);






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