Port-xen archive

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

Re: PCI passthru with Xen 3.0, NetBSD 5.1 dom0, Linux domU



On Fri, Jun 03, 2011 at 02:33:09PM +0200, Julien Oster wrote:
> Hello,
> 
> I recently installed Xen on my NetBSD 5.1 server (now acting as dom0)
> and then Debian (wheezy) as domU. The server contains an Intel Atom
> CPU without HVM, so I used paravirtualization. I simply used the
> xenkernel33 and xentools33 packages and apart from some small problems
> at first (which had nothing to do with NetBSD, though), everything
> turned out fine.
> 
> Because my Atheros AR5008 WiFi PCI card doesn't really work under
> NetBSD, at least not in host mode (frequent timeouts, some devices
> don't associate at all, general flakyness), I decided to give it a try
> under Debian, using Xen PCI passthru.
> 
> This isn't supported with a NetBSD dom0 under Xen 3.3 so I had to
> downgrade to Xen 3.0. (After taking a quick look at the patch that
> enables PCI passthru in NetBSD with Xen 3.0, but it isn't really
> straightforward to adapt to 3.3. I *did* manage to horribly fake the
> PciDevice class, but got the exact same result as with an unfaked but
> patched class using 3.0 in the end.)
> 
> Downgrading also worked well. I didn't have to do much except
> replacing xenkernel33 and xentools33 with xenkernel3 and xentools3, as
> well as uncompressing the Linux kernel image (from vmlinuz to vmlinux,
> otherwise it wouldn't boot).
> 
> So, after setting everything up for PCI passthru
> (pciback.hide=(04:00.0) in the dom0 bootloader, pci = [...] in the
> domain config) I booted up the Debian domU and at first it seemed like
> a success.
> 
> Linux saw the Atheros network card and seemingly initialized it. This
> was evident by some kernel messages, automatic loading of the correct
> modules and the presence of the wlan0 network interface. I could also
> get the interface up with "ifconfig wlan0 up". However, when trying to
> scan for APs with "iwlist wlan0 scan", the kernel generated a lot of
> these messages:
> 
> [  341.696272] ath: Could not kill baseband RX
> [  341.875586] ath: Could not kill baseband RX
> [  341.940445] ath: Failed to stop TX DMA in 100 msec after killing last frame
> [  341.940535] ath: Failed to stop TX DMA!
> [  342.120306] ath: Could not kill baseband RX
> 
> And no result came back. Putting the device into monitor mode and
> listening with tcpdump gave no errors, but no packets either. There
> should have been a metric ton of beacons, at least.
> 
> So I think it's pretty clear that PCI passthru didn't really work in
> this case. The device is seen by domU kernel, but isn't operable.
> Without knowing anything about it, I suspect that either the device's
> registers (memory mapped only, it seems) aren't really accessed or
> that the device's interrupts aren't really seen by the domU kernel.
> 
> Any idea what could be wrong?

Did you set 'iommu=soft' in the Linux kernel? And are you using a kernel
older than 2.6.37 for this?
> 
> I attached the output of "pcictl pci4 dump -d 0" below, which shows
> the PCI configuration registers for that device. I have no experience
> with PCI from anything else than a user's viewpoint, but at first
> glance it seems that the device only uses one memory region and one
> IRQ line, so nothing special I guess?
> 
> Thanks,
> Julien
> 
> 
> PCI configuration registers:
>   Common header:
>     0x00: 0x0023168c 0x02b00216 0x02800001 0x00002010
> 
>     Vendor Name: Atheros Communications (0x168c)
>     Device ID: 0x0023
>     Command register: 0x0216
>       I/O space accesses: off
>       Memory space accesses: on
>       Bus mastering: on
>       Special cycles: off
>       MWI transactions: on
>       Palette snooping: off
>       Parity error checking: off
>       Address/data stepping: off
>       System error (SERR): off
>       Fast back-to-back transactions: on
>       Interrupt disable: off
>     Status register: 0x02b0
>       Capability List support: on
>       66 MHz capable: on
>       User Definable Features (UDF) support: off
>       Fast back-to-back capable: on
>       Data parity error detected: off
>       DEVSEL timing: medium (0x1)
>       Slave signaled Target Abort: off
>       Master received Target Abort: off
>       Master received Master Abort: off
>       Asserted System Error (SERR): off
>       Parity error detected: off
>     Class Name: network (0x02)
>     Subclass Name: miscellaneous (0x80)
>     Interface: 0x00
>     Revision ID: 0x01
>     BIST: 0x00
>     Header Type: 0x00 (0x00)
>     Latency Timer: 0x20
>     Cache Line Size: 0x10
> 
>   Type 0 ("normal" device) header:
>     0x10: 0x48100000 0x00000000 0x00000000 0x00000000
>     0x20: 0x00000000 0x00000000 0x00000000 0x00611737
>     0x30: 0x00000000 0x00000040 0x00000000 0x000001c2
> 
>     Base address register at 0x10
>       type: 32-bit nonprefetchable memory
>       base: 0x48100000, not sized
>     Base address register at 0x14
>       not implemented(?)
>     Base address register at 0x18
>       not implemented(?)
>     Base address register at 0x1c
>       not implemented(?)
>     Base address register at 0x20
>       not implemented(?)
>     Base address register at 0x24
>       not implemented(?)
>     Cardbus CIS Pointer: 0x00000000
>     Subsystem vendor ID: 0x1737
>     Subsystem ID: 0x0061
>     Expansion ROM Base Address: 0x00000000
>     Capability list pointer: 0x40
>     Reserved @ 0x38: 0x00000000
>     Maximum Latency: 0x00
>     Minimum Grant: 0x00
>     Interrupt pin: 0x01 (pin A)
>     Interrupt line: 0xc2
> 
>   Capability register at 0x40
>     type: 0x80 (unknown)
>   Capability register at 0x80
>     type: 0x00 (reserved)
> 
>   Device-dependent header:
>     0x40: 0x00008080 0x00000000 0x00000000 0x00000000
>     0x50: 0x00000000 0x00000000 0x00000000 0x00000000
>     0x60: 0x00000000 0x00000000 0x00000000 0x00000000
>     0x70: 0x00000000 0x00000000 0x00000000 0x00000000
>     0x80: 0x00000000 0x00000000 0x00000000 0x00000000
>     0x90: 0x00000000 0x00000000 0x00000000 0x00000000
>     0xa0: 0x00000000 0x00000000 0x00000000 0x00000000
>     0xb0: 0x00000000 0x00000000 0x00000000 0x00000000
>     0xc0: 0x00000000 0x00000000 0x00000000 0x00000000
>     0xd0: 0x00000000 0x00000000 0x00000000 0x00000000
>     0xe0: 0x00000000 0x00000000 0x00000000 0x00000000
>     0xf0: 0x00000000 0x00000000 0x00000000 0x00000000


Home | Main Index | Thread Index | Old Index