[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: xen-swiotlb
Monday, August 16, 2010, 4:43:53 PM, you wrote: > On Sun, Aug 15, 2010 at 11:28:39PM +0200, Sander Eikelenboom wrote: >> Hi Konrad, >> >> After i have exhausted all kernel debug options without getting a pointer to >> my freezes, i have added some printk's to all functions in swiotlb-xen.c >> I see a lot of calls to xen_swiotlb_dma_mapping_error, which doesn't seem to >> be good ? > The driver looks to be actually testing the value, which is great. Some > of the older drivers (r8169) don't even do that. >> >> Although all the errors the device works fine (grabs video), but eventually >> the machine freezes, probably due to overwriting some mem it shouldn't. > Looking at the output, the physical addresses that DMA-ed are: > 0x1f2962dc0 > 0x1f24f2e68 > and they look to be called quite often. In fact, there looks to be a > loop that does something like this: > again: > p = kmalloc(..) > dma = pci_map_single(p) > pci_dma_mapping_error(dma); > /* get some data.. */ > /* parse the: (pipe 0x80000280): IN: c0 00 00 00 0c 00 01 00 */ > pci_unmap_sg(dma); > goto again; > As the virtual address sent to pci_map_single looks to be sequentially > increasing. > It might be: > a). the pci_dma_mapping_error is used incorrectly, ie, it is used > as !pci_dma_mapping_error, but I doubt that - the Linux kernel > has soo many exampples of how to proper use that. > b). The pci_dma_mapping_error implementation in Xen-SWIOTLB is busted, > but I can't see how. The logic is basically 'return !addr' so, if > you have addr = 0xf200000', you will get 0, which is the proper > return value. > c). the xhci driver does something similar to the pseudo-code I've > pointed out. It is missing a kfree somewhere. > Can you point me to the git tree for the xhci and I can take a look > there? Also could you send me yor debug patch - that will help in > finding the culprit. I suspect the xhci drivers, because usb2 (ohci/ehci) works fine, but it's all hard to find due to the freeze without debug output. And for linux, xen and pci-passthrough is still somewhat a corner case :( xhci-isoc patches required for webcams/videograbbers to work got merged in 2.6.36 merge window, together with xen-swiotlb. (isoc patch series by "Xu, Andiry" <Andiry.Xu@xxxxxxx> , maintainer of the complete xhci tree is Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx>) So what i have as domU kernel is: - from Linus tree 2.6.36-pre with latest commit 8357422d4bf33bc2c35884d4016c3fc9efbbc1d2 - pulled your devel/xen-pcifront-0.5 tree, and fixed the merge conflicts due to the pv on hvm patches, in the same way Jeremy did for his 2.6.36 branch. Conflicts: drivers/xen/events.c include/xen/events.h - Added a patch for xhci isoc that fixes another bug. (attached 0001-xHCI-update-ring-dequeue-pointer-when-process-missed.patch) - Added a patch that shows extra debug info for xhci from the author of the xhci-isoc pathes (attached isoc_length5.patch) - Changed some debug lines from dbg to warn level, (just enabling xhci-debug in kernel config floods the logs too fast, so i just enabled them in xhci-mem.c) (Attached a patch with all my changes to xhci*, including the 2 patches above applied.) - Added some printk's to swiotlb-xen.c to see which functions were used, and let some of them print the address as well, in the hope i could find some debug info there.(attached) Apart from fixing the xhci in the end, is there a way to prevent xen from freezing altogether without leaving a trace ? Even an Oops is much easier to debug than a freeze. Due to the nature of DMA that could perhaps be difficult, although there is an DMA API ... Had a fruitful LinuxCon ? -- Sander Attachment:
all-xhci-patches Attachment:
swiotlb-xen-debug-patch Attachment:
0001-xHCI-update-ring-dequeue-pointer-when-process-missed.patch Attachment:
isoc_length5.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |