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: Weidong Han <weidong.han@xxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] VT-d: improve RMRR validity checking
From: Alex Williamson <alex.williamson@xxxxxx>
Date: Wed, 10 Mar 2010 21:52:30 -0700
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: Wed, 10 Mar 2010 20:53:16 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4B986736.9000204@xxxxxxxxx>
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>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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]);


> 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