From patchwork Tue Feb 11 21:28:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 319418 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 7174B2C0078 for ; Wed, 12 Feb 2014 08:29:16 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753106AbaBKV24 (ORCPT ); Tue, 11 Feb 2014 16:28:56 -0500 Received: from mail-pa0-f53.google.com ([209.85.220.53]:57395 "EHLO mail-pa0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751986AbaBKV2y (ORCPT ); Tue, 11 Feb 2014 16:28:54 -0500 Received: by mail-pa0-f53.google.com with SMTP id lj1so8230233pab.12 for ; Tue, 11 Feb 2014 13:28:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:subject:from:to:cc:date:in-reply-to:references :content-type:content-transfer-encoding:mime-version; bh=qNaT294i56l+SLFcMnjXL4AZE3PWXaYIGc3M6AdshMg=; b=TiAc6JTRYU94AbaP1FIgC9mbr2y2Mo0e5niBAPrvh6eY+WZk0+wy/Qn4VkamQDFGxM E+sL4wuF6bj/03v+hAJecJAtM1vEfv4ujoEfujqY3rIM5BOh4H1n75poQRGx57VBm6qG O2ZUKCBYyu+pWyTCm39etGcvJnQnmotV0tR5IpOIQtEv+xA7Y8KBCTqFPns+Xb8hHpVG 1+qeB44xnstG4y7K6KoFsHxM+9p86HNQASN7eunLNfeFobYwWPZLlF1AFOyexfC8IlMs DOupvxcx2nXxIdUGNMY6JM75WdXtiYlPsvv0HUs9ogV+kbZewG5un78VlP/3K/jVWvh3 FXLg== X-Received: by 10.68.34.37 with SMTP id w5mr12889001pbi.159.1392154133508; Tue, 11 Feb 2014 13:28:53 -0800 (PST) Received: from [172.19.242.230] ([172.19.242.230]) by mx.google.com with ESMTPSA id dr1sm56268813pbc.18.2014.02.11.13.28.52 for (version=SSLv3 cipher=RC4-SHA bits=128/128); Tue, 11 Feb 2014 13:28:53 -0800 (PST) Message-ID: <1392154132.6615.91.camel@edumazet-glaptop2.roam.corp.google.com> Subject: Re: 3.14-mw regression: rtl8169 WARNING: DMA-API: exceeded 7 overlapping mappings of pfn 55ebe From: Eric Dumazet To: Sander Eikelenboom Cc: Dan Williams , Konrad Rzeszutek Wilk , Wei Liu , Francois Romieu , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Date: Tue, 11 Feb 2014 13:28:52 -0800 In-Reply-To: <1434499348.20140211205617@eikelenboom.it> References: <1859471893.20140126115521@eikelenboom.it> <20140127000305.GA14236@electric-eye.fr.zoreil.com> <84816226.20140206123631@eikelenboom.it> <942972114.20140206140909@eikelenboom.it> <1434499348.20140211205617@eikelenboom.it> X-Mailer: Evolution 3.2.3-0ubuntu6 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Tue, 2014-02-11 at 20:56 +0100, Sander Eikelenboom wrote: > Hi Dan, > > FYI just tested and put Xen out of the equation (booting baremetal) and it still persists. > > I tried something else .. don't know if it gives you anymore insights, but it's worth the try: > > diff --git a/lib/dma-debug.c b/lib/dma-debug.c > index 2defd13..0fe5b75 100644 > --- a/lib/dma-debug.c > +++ b/lib/dma-debug.c > @@ -474,11 +474,11 @@ static int active_pfn_set_overlap(unsigned long pfn, int overlap) > return overlap; > } > > -static void active_pfn_inc_overlap(unsigned long pfn) > +static void active_pfn_inc_overlap(struct dma_debug_entry *ent) > { > - int overlap = active_pfn_read_overlap(pfn); > + int overlap = active_pfn_read_overlap(ent->pfn); > > - overlap = active_pfn_set_overlap(pfn, ++overlap); > + overlap = active_pfn_set_overlap(ent->pfn, ++overlap); > > /* If we overflowed the overlap counter then we're potentially > * leaking dma-mappings. Otherwise, if maps and unmaps are > @@ -486,15 +486,43 @@ static void active_pfn_inc_overlap(unsigned long pfn) > * debug_dma_assert_idle() as the pfn may be marked idle > * prematurely. > */ > + > WARN_ONCE(overlap > ACTIVE_PFN_MAX_OVERLAP, > "DMA-API: exceeded %d overlapping mappings of pfn %lx\n", > - ACTIVE_PFN_MAX_OVERLAP, pfn); > + ACTIVE_PFN_MAX_OVERLAP, ent->pfn); > + > + if(overlap > ACTIVE_PFN_MAX_OVERLAP){ > + > + dev_info(ent->dev, "DMA-API: exceeded %d overlapping mappings of pfn %lx .. start dump\n", ACTIVE_PFN_MAX_OVERLAP, ent->pfn); > + int idx; > + > + for (idx = 0; idx < HASH_SIZE; idx++) { > + struct hash_bucket *bucket = &dma_entry_hash[idx]; > + struct dma_debug_entry *entry; > + unsigned long flags; > + > + list_for_each_entry(entry, &bucket->list, list) { > + if (entry->pfn == ent->pfn) { > + dev_info(entry->dev, "%s idx %d P=%Lx N=%lx D=%Lx L=%Lx %s %s\n", > + type2name[entry->type], idx, > + phys_addr(entry), entry->pfn, > + entry->dev_addr, entry->size, > + dir2name[entry->direction], > + maperr2str[entry->map_err_type]); > + } > + } > + } > + dev_info(ent->dev, "DMA-API: exceeded %d overlapping mappings of pfn %lx .. end of dump\n", ACTIVE_PFN_MAX_OVERLAP, ent->pfn); > + } > } > > > @@ -505,10 +533,10 @@ static int active_pfn_insert(struct dma_debug_entry *entry) > > spin_lock_irqsave(&radix_lock, flags); > rc = radix_tree_insert(&dma_active_pfn, entry->pfn, entry); > - if (rc == -EEXIST) > - active_pfn_inc_overlap(entry->pfn); > + if (rc == -EEXIST){ > + active_pfn_inc_overlap(entry); > + } > spin_unlock_irqrestore(&radix_lock, flags); > - > return rc; > } > > > This results in: > [ 27.708678] r8169 0000:0a:00.0 eth1: link down > [ 27.712102] r8169 0000:0a:00.0 eth1: link down > [ 28.015340] r8169 0000:0b:00.0 eth0: link down > [ 28.015368] r8169 0000:0b:00.0 eth0: link down > [ 29.654844] r8169 0000:0b:00.0 eth0: link up > [ 30.278542] r8169 0000:0a:00.0 eth1: link up > [ 60.829503] EXT4-fs (dm-2): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 69.708979] EXT4-fs (dm-42): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 76.128678] EXT4-fs (dm-43): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 82.922836] EXT4-fs (dm-44): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 89.232889] EXT4-fs (dm-45): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 95.359859] EXT4-fs (dm-46): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 101.638559] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: barrier=1,errors=remount-ro > [ 218.073407] ------------[ cut here ]------------ > [ 218.080983] WARNING: CPU: 5 PID: 0 at lib/dma-debug.c:492 add_dma_entry+0xf1/0x210() > [ 218.088550] DMA-API: exceeded 7 overlapping mappings of pfn 3c421 > [ 218.095988] Modules linked in: > [ 218.103270] CPU: 5 PID: 0 Comm: swapper/5 Tainted: G W 3.14.0-rc2-20140211-pcireset-net-btrevert-xenblock-dmadebug5+ #1 > [ 218.110712] Hardware name: MSI MS-7640/890FXA-GD70 (MS-7640) , BIOS V1.8B1 09/13/2010 > [ 218.118134] 0000000000000009 ffff88003fd437b8 ffffffff81b809c4 ffff88003e308000 > [ 218.125556] ffff88003fd43808 ffff88003fd437f8 ffffffff810c985c 0000000000000000 > [ 218.132917] 00000000ffffffef 0000000000000036 ffff88003d9d3c00 0000000000000282 > [ 218.140154] Call Trace: > [ 218.147193] [] dump_stack+0x46/0x58 > [ 218.154271] [] warn_slowpath_common+0x8c/0xc0 > [ 218.161293] [] warn_slowpath_fmt+0x46/0x50 > [ 218.168227] [] ? active_pfn_read_overlap+0x3a/0x70 > [ 218.175116] [] add_dma_entry+0xf1/0x210 > [ 218.181865] [] debug_dma_map_page+0x126/0x150 > [ 218.188484] [] rtl8169_start_xmit+0x21b/0xa20 > [ 218.195042] [] ? dev_queue_xmit_nit+0x1d7/0x260 > [ 218.201553] [] ? dev_queue_xmit_nit+0x1ef/0x260 > [ 218.207965] [] ? dev_queue_xmit_nit+0x5/0x260 > [ 218.214290] [] dev_hard_start_xmit+0x37f/0x590 > [ 218.220481] [] sch_direct_xmit+0xfe/0x280 > [ 218.226529] [] __dev_queue_xmit+0x24f/0x660 > [ 218.232521] [] ? __dev_queue_xmit+0x5/0x660 > [ 218.238439] [] ? ip_output+0x59/0xf0 > [ 218.244272] [] dev_queue_xmit+0x10/0x20 > [ 218.250043] [] ip_finish_output+0x2cb/0x670 > [ 218.255682] [] ? ip_output+0x59/0xf0 > [ 218.261168] [] ip_output+0x59/0xf0 > [ 218.266559] [] ip_forward_finish+0x76/0x1a0 > [ 218.271883] [] ip_forward+0x1ab/0x440 > [ 218.277148] [] ip_rcv_finish+0x150/0x660 > [ 218.282373] [] ip_rcv+0x22b/0x370 > [ 218.287436] [] ? packet_rcv_spkt+0x47/0x190 > [ 218.292372] [] __netif_receive_skb_core+0x722/0x8f0 > [ 218.297328] [] ? __netif_receive_skb_core+0x125/0x8f0 > [ 218.302304] [] ? getnstimeofday+0xe/0x30 > [ 218.307296] [] ? __netdev_alloc_frag+0x175/0x1b0 > [ 218.312166] [] __netif_receive_skb+0x21/0x70 > [ 218.316904] [] netif_receive_skb_internal+0x23/0xf0 > [ 218.321596] [] napi_gro_receive+0x8d/0x100 > [ 218.326219] [] rtl8169_poll+0x2d3/0x680 > [ 218.330754] [] ? update_wall_time+0x356/0x690 > [ 218.335208] [] net_rx_action+0x18a/0x2c0 > [ 218.339595] [] ? __do_softirq+0xc1/0x300 > [ 218.343890] [] __do_softirq+0x137/0x300 > [ 218.348085] [] irq_exit+0xaa/0xd0 > [ 218.352203] [] do_IRQ+0x67/0x110 > [ 218.356225] [] common_interrupt+0x72/0x72 > [ 218.360156] [] ? native_safe_halt+0x6/0x10 > [ 218.364087] [] ? trace_hardirqs_on+0xd/0x10 > [ 218.367935] [] default_idle+0x32/0xd0 > [ 218.371691] [] amd_e400_idle+0x4e/0x140 > [ 218.375360] [] arch_cpu_idle+0x36/0x40 > [ 218.378921] [] cpu_startup_entry+0xa1/0x2a0 > [ 218.382508] [] start_secondary+0x1af/0x210 > [ 218.386133] ---[ end trace 0e12f271209e2c18 ]--- > [ 218.389769] r8169 0000:0b:00.0: DMA-API: exceeded 7 overlapping mappings of pfn 3c421 .. start dump > [ 218.393566] r8169 0000:0b:00.0: single idx 563 P=3c421100 N=3c421 D=c66100 L=36 DMA_TO_DEVICE dma map error checked > [ 218.397379] r8169 0000:0b:00.0: single idx 563 P=3c4212c0 N=3c421 D=c672c0 L=36 DMA_TO_DEVICE dma map error checked > [ 218.401094] r8169 0000:0b:00.0: single idx 564 P=3c421480 N=3c421 D=c68480 L=36 DMA_TO_DEVICE dma map error checked > [ 218.404730] r8169 0000:0b:00.0: single idx 564 P=3c421640 N=3c421 D=c69640 L=36 DMA_TO_DEVICE dma map error checked > [ 218.408310] r8169 0000:0b:00.0: single idx 565 P=3c421800 N=3c421 D=c6a800 L=36 DMA_TO_DEVICE dma map error checked > [ 218.411762] r8169 0000:0b:00.0: single idx 565 P=3c4219c0 N=3c421 D=c6b9c0 L=36 DMA_TO_DEVICE dma map error checked > [ 218.415075] r8169 0000:0b:00.0: single idx 566 P=3c421b80 N=3c421 D=c6cb80 L=9b DMA_TO_DEVICE dma map error checked > [ 218.418305] r8169 0000:0b:00.0: single idx 566 P=3c421dc0 N=3c421 D=c6ddc0 L=36 DMA_TO_DEVICE dma map error checked > [ 218.421502] r8169 0000:0b:00.0: single idx 567 P=3c421f80 N=3c421 D=c6ef80 L=36 DMA_TO_DEVICE dma map error not checked > [ 218.424677] r8169 0000:0b:00.0: DMA-API: exceeded 7 overlapping mappings of pfn 3c421 .. end of dump > [ 218.429050] r8169 0000:0b:00.0: DMA-API: exceeded 7 overlapping mappings of pfn 3c423 .. start dump > [ 218.432225] r8169 0000:0b:00.0: single idx 571 P=3c423040 N=3c423 D=c76040 L=36 DMA_TO_DEVICE dma map error checked > [ 218.435408] r8169 0000:0b:00.0: single idx 571 P=3c423200 N=3c423 D=c77200 L=36 DMA_TO_DEVICE dma map error checked > [ 218.438578] r8169 0000:0b:00.0: single idx 572 P=3c4233c0 N=3c423 D=c783c0 L=36 DMA_TO_DEVICE dma map error checked > [ 218.441695] r8169 0000:0b:00.0: single idx 572 P=3c423580 N=3c423 D=c79580 L=7b DMA_TO_DEVICE dma map error checked > [ 218.444783] r8169 0000:0b:00.0: single idx 573 P=3c423780 N=3c423 D=c7a780 L=9b DMA_TO_DEVICE dma map error checked > [ 218.447825] r8169 0000:0b:00.0: single idx 573 P=3c4239c0 N=3c423 D=c7b9c0 L=6b DMA_TO_DEVICE dma map error checked > [ 218.450844] r8169 0000:0b:00.0: single idx 574 P=3c423bc0 N=3c423 D=c7cbc0 L=7b DMA_TO_DEVICE dma map error checked > [ 218.453814] r8169 0000:0b:00.0: single idx 574 P=3c423dc0 N=3c423 D=c7ddc0 L=7b DMA_TO_DEVICE dma map error checked > [ 218.456793] r8169 0000:0b:00.0: single idx 575 P=3c423fc0 N=3c423 D=c7efc0 L=7b DMA_TO_DEVICE dma map error not checked > [ 218.459772] r8169 0000:0b:00.0: DMA-API: exceeded 7 overlapping mappings of pfn 3c423 .. end of dump > [ 218.473504] r8169 0000:0b:00.0: DMA-API: exceeded 7 overlapping mappings of pfn 3c716 .. start dump > [ 218.475662] r8169 0000:0b:00.0: single idx 586 P=3c7160c0 N=3c716 D=c940c0 L=36 DMA_TO_DEVICE dma map error checked > [ 218.477874] r8169 0000:0b:00.0: single idx 586 P=3c716280 N=3c716 D=c95280 L=36 DMA_TO_DEVICE dma map error checked > [ 218.480075] r8169 0000:0b:00.0: single idx 587 P=3c716440 N=3c716 D=c96440 L=36 DMA_TO_DEVICE dma map error checked > [ 218.482245] r8169 0000:0b:00.0: single idx 587 P=3c716600 N=3c716 D=c97600 L=36 DMA_TO_DEVICE dma map error checked > [ 218.484390] r8169 0000:0b:00.0: single idx 588 P=3c7167c0 N=3c716 D=c987c0 L=42 DMA_TO_DEVICE dma map error checked > [ 218.486510] r8169 0000:0b:00.0: single idx 588 P=3c7169c0 N=3c716 D=c999c0 L=36 DMA_TO_DEVICE dma map error checked > [ 218.488603] r8169 0000:0b:00.0: single idx 589 P=3c716b80 N=3c716 D=c9ab80 L=42 DMA_TO_DEVICE dma map error checked > [ 218.490682] r8169 0000:0b:00.0: single idx 589 P=3c716d80 N=3c716 D=c9bd80 L=42 DMA_TO_DEVICE dma map error checked > [ 218.492735] r8169 0000:0b:00.0: single idx 590 P=3c716f80 N=3c716 D=c9cf80 L=42 DMA_TO_DEVICE dma map error not checked > [ 218.494788] r8169 0000:0b:00.0: DMA-API: exceeded 7 overlapping mappings of pfn 3c716 .. end of dump > > -- > Sander > Incoming frames might be taken out of order-3 pages. With regular Ethernet frames, this is 21 frames per order-3 pages. ACTIVE_PFN_MAX_OVERLAP seems too small. Alternative would be to user order-0 only pages if CONFIG_DMA_API_DEBUG is set. Not sure if it works if PAGE_SIZE=66536 .... --- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index f589c9af8cbf..1b9995adfd29 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -1924,7 +1924,11 @@ static inline void __skb_queue_purge(struct sk_buff_head *list) kfree_skb(skb); } +#if defined(CONFIG_DMA_API_DEBUG) +#define NETDEV_FRAG_PAGE_MAX_ORDER 0 +#else #define NETDEV_FRAG_PAGE_MAX_ORDER get_order(32768) +#endif #define NETDEV_FRAG_PAGE_MAX_SIZE (PAGE_SIZE << NETDEV_FRAG_PAGE_MAX_ORDER) #define NETDEV_PAGECNT_MAX_BIAS NETDEV_FRAG_PAGE_MAX_SIZE