debug overlap overflow From: Dan Williams --- drivers/net/ethernet/realtek/r8169.c | 6 ++++++ lib/dma-debug.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 91a67ae8f17b..3bb2c1e000be 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -5809,6 +5809,9 @@ static void rtl8169_unmap_tx_skb(struct device *d, struct ring_info *tx_skb, { unsigned int len = tx_skb->len; + trace_printk("%s %s: unmap addr: %#llx len: %u\n", + dev_driver_string(d), dev_name(d), + (unsigned long long) le64_to_cpu(desc->addr), len); dma_unmap_single(d, le64_to_cpu(desc->addr), len, DMA_TO_DEVICE); desc->opts1 = 0x00; @@ -5999,6 +6002,9 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, len = skb_headlen(skb); mapping = dma_map_single(d, skb->data, len, DMA_TO_DEVICE); + trace_printk("%s %s: map addr: %p dma: %#llx len: %d\n", + dev_driver_string(d), dev_name(d), + skb->data, (unsigned long long) mapping, len); if (unlikely(dma_mapping_error(d, mapping))) { if (net_ratelimit()) netif_err(tp, drv, dev, "Failed to map TX DMA!\n"); diff --git a/lib/dma-debug.c b/lib/dma-debug.c index 2defd1308b04..7b22c8f5928e 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c @@ -486,9 +486,10 @@ 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); + if (WARN_ONCE(overlap > ACTIVE_PFN_MAX_OVERLAP, + "DMA-API: exceeded %d overlapping mappings of pfn %lx\n", + ACTIVE_PFN_MAX_OVERLAP, pfn)) + ftrace_dump(DUMP_ALL); } static int active_pfn_dec_overlap(unsigned long pfn)