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] iommuu/vt-d issues with LSI MegaSAS (PERC5i)

To: Weidong Han <weidong.han@xxxxxxxxx>
Subject: Re: [Xen-devel] iommuu/vt-d issues with LSI MegaSAS (PERC5i)
From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Date: Wed, 2 Jun 2010 10:49:06 -0400
Cc: "M. Nunberg" <mnunberg@xxxxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 02 Jun 2010 07:50:35 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4C0602AF.5040806@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: <1275143477.15573.19.camel@debmed> <4C05B299.60504@xxxxxxxxx> <20100602062624.GJ17817@xxxxxxxxxxx> <4C0602AF.5040806@xxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.19 (2009-01-05)
On Wed, Jun 02, 2010 at 03:05:19PM +0800, Weidong Han wrote:
> Pasi Kärkkäinen wrote:
>> On Wed, Jun 02, 2010 at 09:23:37AM +0800, Weidong Han wrote:
>>   
>>> This PCI-x card is not suitable for assignment. It contains an invisible
>>> device 05:08.0 (lspci cannot show it), but this invisible device won't
>>> be mapped by VT-d because VT-d engine doesn't know this device, so you
>>> can see the DMAR faults on it. One workaround is to hard code to map
>>> 05:08.0 when assign 05:0e.0. BTW, PCIe LSI card don't have this problem.
>>>
>>>     
>>
>> Note that this problem happens when booting up dom0..
>>   
> I see. all devices are assigned to dom0 in booting. It just needs to map  
> 05:08.0 as well when map 05:0e.0 in domain_context_mapping.

Hey Weidong,

Thank you the explanation. I am not that familiar with the VT-D chipset,
but it seems that this issue also appears with CardBus controllers:
http://lkml.org/lkml/2010/5/22/69 ?

For this device, the problem should also appear with the newer kernels
without using the Hypervisor and with CONFIG_DMAR enabled, right? 

Am I to understand that the workaround you are proposing is doing
something akin to this:


/*
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License v2.0 as published by
 * the Free Software Foundation
 *
 * This program is distributed in the hope that 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.
 */

#include <linux/module.h>
#include <linux/string.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/stat.h>
#include <linux/err.h>
#include <linux/ctype.h>
#include <linux/slab.h>
#include <linux/limits.h>
#include <linux/device.h>
#include <linux/pci.h>
#include <linux/device.h>

#include <linux/pci.h>

#include <xen/interface/xen.h>
#include <xen/interface/physdev.h>

#include <asm/xen/hypervisor.h>
#include <asm/xen/hypercall.h>

#define LSI_HACK  "0.1"

MODULE_AUTHOR("Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>");
MODULE_DESCRIPTION("lsi hack");
MODULE_LICENSE("GPL");
MODULE_VERSION(LSI_HACK);

static int __init lsi_hack_init(void)
{
        int r = 0;

        struct physdev_manage_pci manage_pci = {
                        .bus    = 0x5,
                        .devfn  = PCI_DEVFN(8,0),
                };
        r = HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_add,
                        &manage_pci);

        return r;
}

static void __exit lsi_hack_exit(void)
{
        int r = 0;
        struct physdev_manage_pci manage_pci;

        manage_pci.bus = 0x5;
        manage_pci.devfn = PCI_DEVFN(8,0);

        r = HYPERVISOR_physdev_op(PHYSDEVOP_manage_pci_remove,
                &manage_pci);
        if (r)
                printk(KERN_ERR "%s: %d\n", __FUNCTION__, r);
}

module_init(lsi_hack_init);
module_exit(lsi_hack_exit);

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