From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: PCI passthrough issue Date: Wed, 2 Feb 2011 10:38:22 -0500 Message-ID: <20110202153822.GA31878@dumpdata.com> References: <4D47F9CF.2040107@jbfavre.org> <1296566401.13091.171.camel@zakaz.uk.xensource.com> <4D4814CE.5050303@jbfavre.org> <1296569931.13091.194.camel@zakaz.uk.xensource.com> <4D48234F.2020907@jbfavre.org> <4D4828D9.6090601@jbfavre.org> <1296577389.13091.288.camel@zakaz.uk.xensource.com> <20110201193743.GA18656@dumpdata.com> <4D4890CD.7080009@jbfavre.org> <1296639869.13091.332.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <1296639869.13091.332.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jean Baptiste Favre , Ian Campbell Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org > > Ping tests work whatever can be packet size. > > > > If I understood well what you explain to me, it's now clear that the > > problem is somewhat Xen related, isn't it ? > > It certainly seems that way. I'm not 100% sure that swiotlb=force will > have actually made the driver use the swiotlb, it may just have forced It should have. > the swiotlb to be allocated. Konrad? Both. It would allocate it and force all DMA operations to go through the bounce buffer. Let me take a look at the driver itself. Ah, so I had a similar card: 3c59x which hit the same type of failure way back in 2.6.31 time. It had the pci_dma_sync_single_for_cpu(.. PCI_DMA_FROMDEVICE) turned around so it would never copy properly. But in my tree (2.6.38) the sky driver looks to be doing just right.. It has PCI_DMA_FROMDEVICE.. Well this looks odd: 2330 skb = netdev_alloc_skb_ip_align(sky2->netdev, length); 2331 if (likely(skb)) { 2332 pci_dma_sync_single_for_cpu(sky2->hw->pdev, re->data_addr, 2333 length, PCI_DMA_FROMDEVICE); =======> skb_copy_from_linear_data(re->skb, skb->data, length); <==== 2335 skb->ip_summed = re->skb->ip_summed; 2336 skb->csum = re->skb->csum; 2337 pci_dma_sync_single_for_device(sky2->hw->pdev, re->data_addr, 2338 length, PCI_DMA_FROMDEVICE); 2339 re->skb->ip_summed = CHECKSUM_NONE; 2340 skb_put(skb, length); 2341 } It copies from skb->data (just allocated) to re->skb (seems that the re->skb->data has been earlier DMA-mapped). But there is no data in skb->data as we just allocated it? Shouldn't this be the other way around? Like this: diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 7d85a38..37c0631 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -2331,7 +2331,7 @@ static struct sk_buff *receive_copy(struct sky2_port *sky2, if (likely(skb)) { pci_dma_sync_single_for_cpu(sky2->hw->pdev, re->data_addr, length, PCI_DMA_FROMDEVICE); - skb_copy_from_linear_data(re->skb, skb->data, length); + skb_copy_from_linear_data(skb, re->skb->data, length); skb->ip_summed = re->skb->ip_summed; skb->csum = re->skb->csum; pci_dma_sync_single_for_device(sky2->hw->pdev, re->data_addr, > > > I'll be able to continue any tests you want tomorrow. > > Do you still need me to compile domU kernel with "CONFIG_DMA_API_DEBUG" > > enabled ? > > Yes please. > > > If so, what tools will I need to get debug informations ? > > Uh, Konrad? Here, try this patch. Run it under baremetal and Xen and we can compare the outputs .. but I think the issue here is not off mis-using the DMA API but rather a driver bug. /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License v2.0 as published by * the Free Software Foundation * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DUMP_DMA_FUN "0.1" MODULE_AUTHOR("Konrad Rzeszutek Wilk "); MODULE_DESCRIPTION("dump dma"); MODULE_LICENSE("GPL"); MODULE_VERSION(DUMP_DMA_FUN); static int __init dump_dma_init(void) { debug_dma_dump_mappings(NULL); return 0; } static void __exit dump_dma_exit(void) { } module_init(dump_dma_init); module_exit(dump_dma_exit); > > Ian. > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel