Re: PCI device assignment over KVM

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

 



On Wednesday 06 May 2009 08:42:37 Tong Liu wrote:
> Hi Sheng,
>
> I have installed latest KVM-85 release and the "Failed to assign irq"
> error goes away.
> However my device kernel driver on guest OS (RHEL5u2) can't query my
> card successfully. Our developer said there is memory mapping error
> during KVM device assignment.

Could your developer elaborate it? 

> I am providing all the steps I have done and captures the output as
> pictures here.
> Can you help take a look and see if really my device is not supported by
> KVM yet?

Every other things looks fine. I think the key point should be that "memory 
mapping error".

-- 
regards
Yang, Sheng

>
> Step 1: Before device assignment, /proc/interrupts has my device which
> is not sharing IRQ with others due to MSI-x enabled
> Picture 1.jpg. Even though dmesg shows it is using IRQ 18 during boot
> but /proc shows IRQ 58, etc, I guess it is changed to that number by
> MSI-X after boot.
>
> Step 2: Unbinding my device 0000:01:00.0 from host and start kvm guest
> Picture 2.jpg, some phy mem error reported but I am assuming it is not
> critical
>
> At this moment, /proc/interrupts on local machine is changed. My device
> is disppeared and another entry is created: "kvm_assigned_intx_device"
> as picture 3.jpg shown
>
> And dmesg didn't show obvious errors too, it shows pci device assigned.
> Picture 4.jpg
>
> Log into guest OS(RHEL5u2), run dmesg, it shows errors about my device
> which means it is not passed successfully.
> Picture 5.jpg
>
>
> I tried other device 0000:06:00.1 which is OK.
>
> Regards
> Tong
>
>
> -----Original Message-----
> From: Sheng Yang [mailto:sheng@xxxxxxxxxxxxxxx]
> Sent: Monday, May 04, 2009 9:35 PM
> To: Tong Liu
> Subject: Re: PCI device assignment over KVM
>
> On Tuesday 05 May 2009 12:06:09 Tong Liu wrote:
> > BTW, as you mentioned, after boot up, 06:00.0 got IRQ 56 because it's
> > MSI enabled.
> > And 01:00.0 is using IRQ18, actually they are not sharing IRQ with any
> >
> > others.
> > (Even though 06:00.0 was using IRQ 18 with 01:00.0 during boot but it
> > is converted to 56 after boot up, so nothing shared)
> >
> > Why is KVM still trying to enable 01:00.0 INTx (dmesg error I put in
> > the first email) if 01:00.0 is not sharing IRQ with any other after
>
> boot?
>
> You can use "cat /proc/interrupts" to know if there are other IRQ
> handler for IRQ 18. Also lspci -v.
>
> If you are sure that there is no sharing interrupt for IRQ 18, you may
> need to look into INTx enabling part of KVM
> (virt/kvm/kvm_main.c:kvm_vm_ioctl_assign_irq()) to know what's happening
> exactly.
>
> And please try latest KVM and qemu-kvm as well(or kvm-85 release). The
> your dmesg show that the version of your KVM is old - no thing like
> "failed to enable INTx device!" in current code now. We rework the
> framework two monthes ago.
>
> --
> regards
> Yang, Sheng
>
> > Thanks
> > Tong
> >
> >
> > -----Original Message-----
> > From: Sheng Yang [mailto:sheng@xxxxxxxxxxxxxxx]
> > Sent: Monday, May 04, 2009 6:26 PM
> > To: Tong Liu
> > Subject: Re: PCI device assignment over KVM
> >
> > On Tuesday 05 May 2009 05:32:32 Tong Liu wrote:
> > > Hi Sheng,
> > >
> > > My system has VT-d support and I want to assign one PCI-E card to
> > > guest OS.
> > > I have an issue with PCI device assignment over KVM.
> > > I am using latest kernerl 2.6.30-rc4.
> > >
> > > Here are the steps I have done:
> > >
> > > 1. Unbind PCI device 01:00.0 from host using steps documented on KVM
> > >
> > > webiste.
> > > http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM
> > > 2. Then run the following command: qemu-system-x86_64 -m 4096 -boot
> > > c -net none -hda vdisk.img -pcidevice host=01:00.0 It reports
>
> errors:
> > > Assign_irq: deassign: Invalid argument Failed to assign irq for
> > > "01:00.0": Input/output error Perhaps you are assigning a device
> > > that shares an IRQ with another device?
> > > Failed to deassign device "01:00.0" : Invalid argument
> > >
> > > In dmesg it shows the following error:
> > > pci-stub 0000:01:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
> > > assign device: host bdf = 1:0:0
> > > kvm: failed to enable INTx device!
> > > pci-stub 0000:01:00.0: PCI INT A disabled
> > > kvm_vm_ioctl_deassign_device: device hasn't been assigned before, so
> > >
> > > cannot be deassigned
> > >
> > > Info for my device 0000:01:00.0:
> > > lspci -t:
> > >
> > > -[0000:00]-+-00.0
> > >            +-05.0-[0000:01]----00.0
> > >
> > > +-09.0-[0000:02-07]--+-00.0-[0000:03-06]--+-00.0-[0000:04]--
> >
> > +-01.0-[0000:05]--
> >
> > > \-02.0-[0000:06]--+-00.0
> > >
> > > \-00.1
> > >
> > >            |                    \-00.3-[0000:07]--
> > >
> > > lspci -v:
> > >
> > > 01:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX IB QDR,
> > > PCIe 2.0 5GT/s] (rev a0)
> > >         Subsystem: Mellanox Technologies Unknown device 0005
> > >         Flags: fast devsel, IRQ 18
> > >         Memory at 99300000 (64-bit, non-prefetchable) [size=1M]
> > >         Memory at 98000000 (64-bit, prefetchable) [size=8M]
> > >         Capabilities: [40] Power Management version 3
> > >         Capabilities: [48] Vital Product Data
> > >         Capabilities: [9c] MSI-X: Enable+ Mask- TabSize=256
> > >         Capabilities: [60] Express Endpoint IRQ 0
> > >         Capabilities: [100] Unknown (14)
> > >
> > > After running unbind and trying device assignment, MSI-X of it
> > > changed
> > >
> > > to Enable-. I don't know why.
> > >
> > >
> > > If I run dmesg | grep IRQ after server boot, i can see the following
> > >
> > > (my device is sharing IRQ with another device):
> > > mlx4_core 0000:01:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
> > > e1000e 0000:06:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
> > >
> > > However lspci -v shows different thing, 01:00.0 and 06:00.0 are
> > > using different IRQ, I am not sure which one is correct?
> > >
> > > 01:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX IB QDR,
> > > PCIe 2.0 5GT/s] (rev a0)
> > >         Subsystem: Mellanox Technologies Unknown device 0005
> > >         Flags: bus master, fast devsel, latency 0, IRQ 18
> > >         Memory at 99300000 (64-bit, non-prefetchable) [size=1M]
> > >         Memory at 98000000 (64-bit, prefetchable) [size=8M]
> > >         Capabilities: [40] Power Management version 3
> > >         Capabilities: [48] Vital Product Data
> > >         Capabilities: [9c] MSI-X: Enable+ Mask- TabSize=256
> > >         Capabilities: [60] Express Endpoint IRQ 0
> > >         Capabilities: [100] Unknown (14)
> >
> > Hi Tong
> >
> > I found your card don't support MSI, so you got interrupt sharing
> > trouble.
> >
> > The way we avoid to share interrupt with host is convert MSI to INTx,
> > not MSI- X(which is mostly impossible to convert to INTx). So for you
> > card, you need to avoid sharing interrupt in the host. Try different
> > slot should be work. For the same reason, 06:00.0 can work because it
> > support MSI, then no need to avoid interrupt sharing.
> >
> > After you boot up, 06:00.0 got IRQ 56 because it's MSI enabled, so 56
> > is a MSI vector. If you unload e1000e driver, you would see the
> > default interrupt setting, and I think it would be 18. You can also
> > tell the one sharing interrupt from your dmesg - kernel would complain
> >
> > the sharing with some other interrupt handler(not sure if need some
>
> debug option).
>
> > You can also find the conflict one from lspci to check the IRQ number.
> >
> > Another thing is, it's better to post the thread to mailing list
> > rather than try to contact the developer directly. In this way most
> > people see you problem can try to help, which is more efficient.
> >
> > --
> > regards
> > Yang, Sheng
> >
> > > 06:00.0 Ethernet controller: Intel Corporation 80003ES2LAN Gigabit
> > > Ethernet Controller (Copper) (rev 01)
> > >         Subsystem: Intel Corporation Unknown device 34d4
> > >         Flags: bus master, fast devsel, latency 0, IRQ 56
> > >         Memory at 99020000 (32-bit, non-prefetchable) [size=128K]
> > >         Memory at 98c00000 (32-bit, non-prefetchable) [size=4M]
> > >         I/O ports at 2020 [size=32]
> > >         Capabilities: [c8] Power Management version 2
> > >         Capabilities: [d0] Message Signalled Interrupts: 64bit+
> > > Queue=0/0 Enable                           +
> > >         Capabilities: [e0] Express Endpoint IRQ 0
> > >         Capabilities: [100] Advanced Error Reporting
> > >         Capabilities: [140] Device Serial Number
> > > 2a-99-6b-ff-ff-17-15-00
> > >
> > > BTW, I can assign 06:00.0 to guest OS but only having issue with my
> > > PCI device 01:00.0 which I need to do.
> > > My device has MSI-X enabled but why KVM still reports IRQ error?
> > >
> > > Regards
> > > Tong


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux