[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Machine hangs when doing pass-through of all the USB devices on a Lenovo T400 - With xen-unstable



On Sun, Jul 26, 2009 at 05:46:22PM +0300, Tom Rotenberg wrote:
> Hi,
> 
> Just to notify you all, i have tested the same scenario, on the latest
> xen-unstable, and i got the same result - the machine hangs. It looks
> like a major bug.
> Can someone please help me with this?

Hi Tom,

this is a bit of a stab in the dark, but could you try each
of the following patches _separately_ to see if they make any difference?

1)

Allow virtual functions to use the legacy interrupt pin of the
corresponding physical device.  This was already half-implemented, and I
wonder if this missing piece is causing problems.

Index: ioemu-remote/hw/pass-through.c
===================================================================
--- ioemu-remote.orig/hw/pass-through.c 2009-07-27 21:42:12.000000000 +1000
+++ ioemu-remote/hw/pass-through.c      2009-07-27 21:47:34.000000000 +1000
@@ -2617,13 +2617,7 @@ static uint32_t pt_status_reg_init(struc
 static uint32_t pt_irqpin_reg_init(struct pt_dev *ptdev,
         struct pt_reg_info_tbl *reg, uint32_t real_offset)
 {
-    int reg_field = 0;
-
-    /* set Interrupt Pin register to use INTA# if it has */
-    if (ptdev->dev.config[real_offset])
-        reg_field = 0x01;
-
-    return reg_field;
+    return ptdev->dev.config[real_offset];
 }
 
 /* initialize BAR */

2) Always use INTA everywhere. This should revert things to
   they way they were before the multi-function changes.


diff --git a/hw/pass-through.c b/hw/pass-through.c
index f3d033b..cddfe5c 100644
--- a/hw/pass-through.c
+++ b/hw/pass-through.c
@@ -4329,21 +4329,7 @@ int pt_init(PCIBus *e_bus)
  */
 static uint8_t pci_read_intx(struct pt_dev *ptdev)
 {
-    uint8_t r_val = pci_read_byte(ptdev->pci_dev, PCI_INTERRUPT_PIN);
-
-    PT_LOG("intx=%i\n", r_val);
-    if (r_val < 1 || r_val > 4)
-    {
-        PT_LOG("Interrupt pin read from hardware is out of range: "
-               "value=%i, acceptable range is 1 - 4\n", r_val);
-        r_val = 0;
-    }
-    else
-    {
-        r_val -= 1;
-    }
-
-    return r_val;
+    return 0;
 }
 
 /*


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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.