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/
Home Products Support Community News


[Xen-devel] pciback bug "secondary bus reset failed"

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] pciback bug "secondary bus reset failed"
From: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx>
Date: Mon, 24 May 2010 16:53:01 +0100
Delivery-date: Mon, 24 May 2010 08:56:11 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird (X11/20090817)

I'm trying to passthrough a PCI network card to a domU guest, but I'm hitting a bug that prevents the IRQ being unbound from dom0.

Here are the steps I am taking:

 * configure Xen to pass $pci (0000:06:00.0) through to guest VM
 * unbind from current driver in dom0 and rebind to pciback:

     echo -n $pci > /sys/bus/pci/devices/$pci/driver/unbind
     modprobe pciback
     echo -n $pci > /sys/bus/pci/drivers/pciback/new_slot
     echo -n $pci > /sys/bus/pci/drivers/pciback/bind

 * start guest VM

I then get the following on the dom0 console

  pciback 0000:06:00.0: secondary bus reset failed for device - all functions \
  need to be co-assigned - err: 6
  pciback 0000:06:00.0: FLR functionality not supported; attempts to use \
  secondary bus reset unsuccessful;
  pciback 0000:06:00.0: FLR not performed for device

I don't understand the above, but the upshot is that pirq_guest_unbind() does not get called. Later when the guest does an "ifconfig up" the IRQ gets sent to dom0 instead of the domU, and this causes the following to appear on the dom0 console:

  irq 21: nobody cared (try booting with the "irqpoll" option)
  Pid: 0, comm: swapper Tainted: G
   [<c0154517>] __report_bad_irq+0x27/0x90
   [<c015487c>] note_interrupt+0x2fc/0x330
   [<f009e92d>] ? usb_hcd_irq+0x4d/0xe0 [usbcore]
   [<c0153951>] ? handle_IRQ_event+0x31/0x90
   [<c0155204>] handle_level_irq+0xe4/0x110
   [<c0107733>] do_IRQ+0x43/0x90

I have ioapic_ack=old on the Xen command line. This causes Xen to EOI the interrupt straight away instead of waiting for a guest to EOI and forwarding that on to the IO APIC. If I remove this then since no guest handles the interrupt, all lower priority IRQs get blocked forever and I lose access to my hard disk!

Any help would be much appreciated.


Alex Zeffertt

Xen-devel mailing list