Re: PCI Passthrough, error: The driver 'pci-stub' is occupying your device 0000:08:06.2

James Neave
2011-02-21T20:32:03Z

On Mon, Feb 14, 2011 at 5:48 PM, Alex Williamson
<alex.williamson@redhat.com> wrote:
> On Sat, 2011-02-12 at 16:04 +0000, James Neave wrote:
>> On Tue, Feb 8, 2011 at 10:17 AM, James Neave <roboj1m@gmail.com> wrote:
>> > On Tue, Feb 8, 2011 at 9:59 AM, Kenni Lund <kenni@kelu.dk> wrote:
>> >> 2011/2/7 Daniel P. Berrange <berrange@redhat.com>:
>> >>> 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

Hi,

Sorry about the slow reply, I hosed all of my PCs fiddling with
compiling the latest qemu, took me a while to put it all back together
again in between work!

I'm afraid I use virtmanager, although I guess using the "add pci
device" function is the same as -device pci-assign? It does seem to
add it to the command line that gets written out to the log files in
/var/log/libvirt/qemu.

Nevertheless, I've tried that and still not luck, the log output is
similar, with one extra line:

http://pastebin.com/MJ6aqjNq

Using raw in/out ioport access (sysfs - Input/output error)

Here's the dmesg output:
http://pastebin.com/AE1euUN1

I'm going to google that new line and consider trying the libvirt ppa
that accompanies the qemu-kvm ppa I'm using.

Many Thanks,

James.