From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: PCI Passthrough, error: The driver 'pci-stub' is occupying your device 0000:08:06.2 Date: Mon, 14 Feb 2011 10:48:48 -0700 Message-ID: <1297705728.14733.50.camel@x201> References: <20110207132641.GD2665@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: James Neave Return-path: Received: from mx1.redhat.com ([209.132.183.28]:48861 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750757Ab1BNRsu (ORCPT ); Mon, 14 Feb 2011 12:48:50 -0500 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On Sat, 2011-02-12 at 16:04 +0000, James Neave wrote: > On Tue, Feb 8, 2011 at 10:17 AM, James Neave wrote: > > On Tue, Feb 8, 2011 at 9:59 AM, Kenni Lund wrote: > >> 2011/2/7 Daniel P. Berrange : > >>> On Sat, Feb 05, 2011 at 04:34:01PM +0000, James Neave wrote: > >>>> Hi, > >>>> > >>>> I'm trying to pass a NOVA-T-500 TV Tuner card through to a gust VM. > >>>> I'm getting the error "The driver 'pci-stub' is occupying your device > >>>> 0000:08:06.2" > >>> > >>> This is a rather misleading error message. It is *expected* that > >>> pci-stub will occupy the device. Unfortunately the rest of the > >>> error messages QEMU is printing aren't much help either, but > >>> ultimately something is returning -EBUSY in the PCI device assign > >>> step > >> > >> James, as far as I remember, I had the same issue when I set up my > >> system. Looking at my current (working) boot-script, apparently I've > >> added a 4th line which removes the pci-stub again as a > >> workaround....and it works: > >> > >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id > >> echo "0000:04:08.0" > /sys/bus/pci/drivers/ivtv/unbind > >> echo "0000:04:08.0" > /sys/bus/pci/drivers/pci-stub/bind > >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id > >> > >> Best regards > >> Kenni > >> > > > > Hi Kenni, > > > > Can I get a bit more information on "boot-script" please? Which file > > exaclty have you put this in? Did you write your own service script > > and put it in init.d? > > > > I've tried this: > > > > echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id > > echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind > > echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind > > > > I'll try it again with the fourth line added, manually before I start the VM. > > > > How come yours is 'echo "PCI" > /sys/bus/drivers/DRIVERNAME/unbind' > > and mine is echo "PCI" > /sys/bus/pci/devices/PCI/driver/unbind > > > > Obviously one looks up which driver is being used by the PCI id, but > > how do I look up which driver my PCI card is using? > > > > Thanks, > > > > James. > > > > Hi, > > OK, adding the fourth line does nothing, changing the second line to > "driver" rather than "device" does nothing, including in combination > with fourth line there/not there. Yep, the last line is just removing the id from pci-stub, it doesn't change anything about devices that are already bound to it. driver vs device are just different ways to get to the same thing. > So I'm still stuck, can anybody else help? > Perhaps point me to a guide on how to compile the latest qemu-kvm > against my kernel? I don't know why you're getting -EBUSY for this device, but maybe we can start from a clean slate and see if it helps. Here's what I would suggest: echo "0000:08:06.0" > /sys/bus/pci/devices/0000:08:06.0/driver/unbind echo "0000:08:06.1" > /sys/bus/pci/devices/0000:08:06.1/driver/unbind echo "0000:08:06.2" > /sys/bus/pci/devices/0000:08:06.2/driver/unbind echo "0000:08:0e.0" > /sys/bus/pci/devices/0000:08:0e.0/driver/unbind Note we have to knock out the firewire because it shares an interrupt with the ehci device you're trying to assign. We want to remove the USB controller entirely from the host. Your dmesg indicates the host is still seeing the device via the uhci ports, and isn't happy about it. You can ignore pci-stub for the moment, it's just a way to keep drivers from claiming the device, it's not required for device assignment. Now, instead of only trying to assign the ehci, let's move the whole usb controller to the guest: -device pci-assign,host=08:06.0,addr=5.0 \ -device pci-assign,host=08:06.1,addr=5.1 \ -device pci-assign,host=08:06.2,addr=5.2 (slot 5 on the guest is arbitrary, pick something else if you need to) If that works, then you can bind all those devices to pci-stub and it should still work. Alex