[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] PCI passthrough (pci-attach) to HVM guests bug (BAR64 addresses are bogus)
Hey, With Xen 4.5 (today's staging), when I boot a guest and then do pci-attach the BARs values are corrupt. For example, with this guest config: kernel="hvmloader" builder="hvm" serial="pty" memory = 2048 name = "XTT" usb=1 usbdevice='tablet' vcpus=2 vga="stdvga" vif = [ 'mac=00:0f:4b:00:00:63,bridge=xenbr0' ] disk= ['file:/root/root_image.iso,hdc:cdrom,r'] vnc=1 vnclisten="0.0.0.0" boot = "dc" And with this PCI card: 5:00.0 VGA compatible controller: NVIDIA Corporation GF104GLM [Quadro 4000M] (rev a1) (prog-if 00 [VGA controller]) Subsystem: Gigabyte Technology Co., Ltd Device 34fc Flags: fast devsel, IRQ 20 Memory at fc000000 (32-bit, non-prefetchable) [size=32M] Memory at d0000000 (64-bit, prefetchable) [size=128M] Memory at d8000000 (64-bit, prefetchable) [size=64M] which in dom0 is reported as: 4064] pci 0000:05:00.0: [10de:0e3b] type 00 class 0x030000 [ 22.834087] pci 0000:05:00.0: reg 0x10: [mem 0xfc000000-0xfdffffff] [ 22.834109] pci 0000:05:00.0: reg 0x14: [mem 0xd0000000-0xd7ffffff 64bit pref] [ 22.834131] pci 0000:05:00.0: reg 0x1c: [mem 0xd8000000-0xdbffffff 64bit pref] [ 22.834144] pci 0000:05:00.0: reg 0x24: [io 0xc000-0xc07f] [ 22.834157] pci 0000:05:00.0: reg 0x30: [mem 0xfe000000-0xfe07ffff pref] When I assign said card (xl pci-attach XTT 05:00.0) the guest gives me: ... 498525] pci 0000:00:04.0: [10de:0e3b] type 00 class 0x030000 [ 152.508612] pci 0000:00:04.0: reg 0x10: [mem 0x00000000-0x01ffffff] [ 152.518320] pci 0000:00:04.0: reg 0x14: [mem 0x00000000-0x07ffffff 64bit preff ] [ 152.529301] pci 0000:00:04.0: reg 0x1c: [mem 0x00000000-0x03ffffff 64bit preff ] [ 152.540095] pci 0000:00:04.0: reg 0x24: [io 0x0000-0x007f] [ 152.548497] pci 0000:00:04.0: reg 0x30: [mem 0x00000000-0x0007ffff pref] [ 152.561018] vgaarb: device added: PCI:0000:00:04.0,decodes=io+mem,owns=none,llocks=none [ 152.572965] pci 0000:00:04.0: BAR 1: no space for [mem size 0x08000000 64bit pref] [ 152.583917] pci 0000:00:04.0: BAR 1: failed to assign [mem size 0x08000000 64 bit pref] [ 152.595528] pci 0000:00:04.0: BAR 3: assigned [mem 0xf4000000-0xf7ffffff 64bi t pref] If I boot the guest with: pci=["05:00.0"] it works fine: # dmesg | grep 05.0 [ 0.000000] pcpu-alloc: [0] 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 [ 0.905008] pci 0000:00:03.0: reg 0x10: [mem 0xef000000-0xefffffff pref] [ 0.944101] pci 0000:00:05.0: [10de:0e3b] type 00 class 0x030000 [ 0.953013] pci 0000:00:05.0: reg 0x10: [mem 0xec000000-0xedffffff] [ 0.967016] pci 0000:00:05.0: reg 0x14: [mem 0xe0000000-0xe7ffffff 64bit pref] [ 0.973016] pci 0000:00:05.0: reg 0x1c: [mem 0xe8000000-0xebffffff 64bit pref] [ 0.981015] pci 0000:00:05.0: reg 0x24: [io 0xc200-0xc27f] [ 0.988016] pci 0000:00:05.0: reg 0x30: [mem 0xf0000000-0xf007ffff pref] [ 0.995083] vgaarb: device added: PCI:0000:00:05.0,decodes=io+mem,owns=io+mem,locks=none [ 0.997000] vgaarb: bridge control possible 0000:00:05.0 [ 3.952023] nouveau [ DEVICE][0000:00:05.0] BOOT0 : 0x0c4d80a1 [ 3.952025] nouveau [ DEVICE][0000:00:05.0] Chipset: GF104 (NVC4) [ 3.952027] nouveau [ DEVICE][0000:00:05.0] Family : NVC0 [ 3.952072] nouveau [ VBIOS][0000:00:05.0] checking PRAMIN for image... [ 3.952079] nouveau [ VBIOS][0000:00:05.0] ... signature not found [ 3.952080] nouveau [ VBIOS][0000:00:05.0] checking PROM for image... [ 4.096446] nouveau [ VBIOS][0000:00:05.0] ... appears to be valid [ 4.104012] nouveau [ VBIOS][0000:00:05.0] using image from PROM [ 4.111214] nouveau [ VBIOS][0000:00:05.0] BIT signature found [ 4.118054] nouveau [ VBIOS][0000:00:05.0] version 70.04.13.00.01 [ 4.125248] nouveau [ DEVINIT][0000:00:05.0] adaptor not initialised [ 4.131629] nouveau [ VBIOS][0000:00:05.0] running init tables [ 4.227827] nouveau [ PMC][0000:00:05.0] MSI interrupts enabled [ 4.234296] nouveau [ PFB][0000:00:05.0] RAM type: GDDR5 [ 4.240176] nouveau [ PFB][0000:00:05.0] RAM size: 1024 MiB [ 4.245878] nouveau [ PFB][0000:00:05.0] ZCOMP: 0 tags [ 4.255523] nouveau [ VOLT][0000:00:05.0] GPU voltage: 875000uv [ 4.291146] nouveau [ PTHERM][0000:00:05.0] FAN control: PWM [ 4.296582] nouveau [ PTHERM][0000:00:05.0] fan management: automatic [ 4.302668] nouveau [ PTHERM][0000:00:05.0] internal sensor: yes [ 4.309465] nouveau [ CLK][0000:00:05.0] 03: core 50 MHz memory 135 MHz [ 4.317854] nouveau [ CLK][0000:00:05.0] 07: core 405 MHz memory 324 MHz [ 4.326655] nouveau [ CLK][0000:00:05.0] 0c: core 405 MHz memory 1800 MHz [ 4.333742] nouveau [ CLK][0000:00:05.0] 0f: core 715 MHz memory 1800 MHz [ 4.341362] nouveau [ CLK][0000:00:05.0] --: core 50 MHz memory 135 MHz [ 4.749977] nouveau 0000:00:05.0: fb0: nouveaufb frame buffer device [ 4.756172] nouveau 0000:00:05.0: registered panic notifier [ 4.765041] [drm] Initialized nouveau 1.2.0 20120801 for 0000:00:05.0 on minor 0 # lspci -s 00:05.0 -v 00:05.0 VGA compatible controller: nVidia Corporation Device 0e3b (rev a1) (prog-if 00 [VGA controller]) Subsystem: Giga-byte Technology Device 34fc Physical Slot: 5 Flags: bus master, fast devsel, latency 0, IRQ 67 Memory at ec000000 (32-bit, non-prefetchable) [size=32M] Memory at e0000000 (64-bit, prefetchable) [size=128M] Memory at e8000000 (64-bit, prefetchable) [size=64M] I/O ports at c200 [size=128] Expansion ROM at f0000000 [disabled] [size=512K] Interesting observation: a) It does NOT make a different if I use qemu-traditinal or qemu-xen. In both cases I get the same BAR bogus numbers. b) qemu-xen logging is not that great. When I used qemu-trad I discovered: m-command: hot insert pass-through pci dev register_real_device: Assigning real physical device 05:00.0 ... register_real_device: Disable MSI translation via per device option register_real_device: Disable power management pt_iomul_init: Error: pt_iomul_init can't open file /dev/xen/pci_iomul: No such file or directory: 0x5:0x0.0x0 pt_register_regions: IO region registered (size=0x02000000 base_addr=0xfc000000) pt_register_regions: IO region registered (size=0x08000000 base_addr=0xd000000c) pt_register_regions: IO region registered (size=0x04000000 base_addr=0xd800000c) pt_register_regions: IO region registered (size=0x00000080 base_addr=0x0000c001) pt_register_regions: Expansion ROM registered (size=0x00080000 base_addr=0xfe000000) pci_intx: intx=1 register_real_device: Real physical device 05:00.0 registered successfuly! IRQ type = INTx generate a sci for PHP. deassert due to disable GPE bit. ACPI:debug: write addr=0xb044, val=0x20. ACPI:debug: write addr=0xb045, val=0x0. ACPI:debug: write addr=0xb044, val=0x20. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x21. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x22. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x23. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x24. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x25. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x26. ACPI:debug: write addr=0xb045, val=0x89. ACPI:debug: write addr=0xb044, val=0x27. ACPI:debug: write addr=0xb045, val=0x89. pt_iomem_map: e_phys=f2000000 maddr=fc000000 type=0 len=33554432 index=0 first_map=1 pt_iomem_map: e_phys=f4000000 maddr=d8000000 type=8 len=67108864 index=3 first_map=1 pt_ioport_map: e_phys=1000 pio_base=c000 len=128 index=5 first_map=1 pt_msgctrl_reg_write: setup msi for dev 20 pt_msi_setup: pt_msi_setup requested pirq = 87 pt_msi_setup: msi mapped with pirq 57 pt_msi_update: Update msi with pirq 57 gvec 0 gflags 3057 pci_intx: intx=1 pt_msi_disable: Unbind msi with pirq 57, gvec 0 pt_msi_disable: Unmap msi with pirq 57 Ideas which commit id I ought to look at? _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |