[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] x86_64 eth0 e1000_clean_tx_irq tx hang
* Kamble, Nitin A (nitin.a.kamble@xxxxxxxxx) wrote: > > - limiting to 2G works fine, sounds like something with swiotlb > > I noticed it too and exactly same. I also notice this in the dom0 dmesg. After spending hours trying to find something -- anything -- wrong with irq delivery and e1000 hung tx unit, I went back to my original hunch, which was swiotlb related. When TSO is enabled, some debugging showed this: swiotlb_map_page: returns d586a000 dma_map_page: returns ffffffffd586a000 Indeed. a43: e8 00 00 00 00 callq a48 <dma_map_page+0xc8> a44: R_X86_64_PC32 swiotlb_map_page+0xfffffffffffffffc a48: 48 63 d8 movslq %eax,%rbx Whoops. Prototype mismatch. And had we been paying attention: /home/chrisw/hg/xen/xen-unstable/linux-2.6.16-rc2-xen0/arch/x86_64/kernel/../../i386/kernel/pci-dma-xen.c:107: warning: implicit declaration of function âswiotlb_map_pageâ /home/chrisw/hg/xen/xen-unstable/linux-2.6.16-rc2-xen0/arch/x86_64/kernel/../../i386/kernel/pci-dma-xen.c: In function âdma_unmap_pageâ: /home/chrisw/hg/xen/xen-unstable/linux-2.6.16-rc2-xen0/arch/x86_64/kernel/../../i386/kernel/pci-dma-xen.c:125: warning: implicit declaration of function âswiotlb_unmap_pageâ Here's a quick patch that fixes the issue (not ready to apply to -unstable, since it's a file that's not in sparse tree). Nitin, this should fix your problem as well. I'll work on a proper patch later this evening or tomorrow morning. thanks, -chris -- --- linux-2.6.16-rc2/include/asm-x86_64/swiotlb.h 2006-02-15 21:42:24.000000000 -0500 +++ linux-2.6.16-rc2-xen0/include/asm-x86_64/swiotlb.h 2006-02-15 21:19:15.000000000 -0500 @@ -38,6 +38,11 @@ extern void swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents, int direction); extern int swiotlb_dma_mapping_error(dma_addr_t dma_addr); +extern dma_addr_t swiotlb_map_page(struct device *hwdev, struct page *page, + unsigned long offset, size_t size, + enum dma_data_direction direction); +extern void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dma_address, + size_t size, enum dma_data_direction direction); extern void swiotlb_free_coherent (struct device *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle); extern int swiotlb_dma_supported(struct device *hwdev, u64 mask); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |