From patchwork Tue Mar 4 16:46:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Soren Brinkmann X-Patchwork-Id: 326400 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 F24502C00BD for ; Wed, 5 Mar 2014 03:47:28 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755898AbaCDQrH (ORCPT ); Tue, 4 Mar 2014 11:47:07 -0500 Received: from mail-ie0-f180.google.com ([209.85.223.180]:63600 "EHLO mail-ie0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755413AbaCDQqz (ORCPT ); Tue, 4 Mar 2014 11:46:55 -0500 Received: by mail-ie0-f180.google.com with SMTP id as1so3293227iec.39 for ; Tue, 04 Mar 2014 08:46:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=zaiw3ZiqGee+hyM1R0Ci7xyAyKYgVUans1tsJIClOZA=; b=NUBq4tppIsq/PlzF4wUNNrsSbjadEMTnZNbQwhH2bl3ZL4JOrTiEFziYtAg3ar+N/M SqR3TqzfAmrypIb7XtyI7HFfbxt2RZQSyGbfQxOufayUaHD6ygMm+gSUv/nYdj8ZrkNi dtYvxWO60BVZi1Btgm9ToMZQ3jZQe8SnOjXZ0bX+UHRVPzOlEn0VAzpwkqJ3aidf9dWT z+2yDVlLDCFBT0suFFOOfut/D88ozb3DfetHl7pxUV4icHM59aeKAihOBVyhWT6EzQD7 u23pMzrRaXn7OGmMB7AHlXOUnK0JYxPsZZ9UCgokS2k7qQvLpPDRkUsKrizNr2JJ5vA2 WlZg== X-Received: by 10.43.131.2 with SMTP id ho2mr303677icc.75.1393951615181; Tue, 04 Mar 2014 08:46:55 -0800 (PST) Received: from localhost ([149.199.62.254]) by mx.google.com with ESMTPSA id ro10sm51527781igb.6.2014.03.04.08.46.53 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 04 Mar 2014 08:46:54 -0800 (PST) From: Soren Brinkmann To: Nicolas Ferre Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Vinod Koul , Dan Williams , "David S. Miller" , Michal Simek , Ben Hutchings , Soren Brinkmann Subject: [PATCH v3 2/2] net: macb: DMA-unmap full rx-buffer Date: Tue, 4 Mar 2014 08:46:40 -0800 Message-Id: <1393951600-26039-2-git-send-email-soren.brinkmann@xilinx.com> X-Mailer: git-send-email 1.9.0.1.g4196000 In-Reply-To: <1393951600-26039-1-git-send-email-soren.brinkmann@xilinx.com> References: <1393951600-26039-1-git-send-email-soren.brinkmann@xilinx.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When allocating RX buffers a fixed size is used, while freeing is based on actually received bytes, resulting in the following kernel warning when CONFIG_DMA_API_DEBUG is enabled: WARNING: CPU: 0 PID: 0 at lib/dma-debug.c:1051 check_unmap+0x258/0x894() macb e000b000.ethernet: DMA-API: device driver frees DMA memory with different size [device address=0x000000002d170040] [map size=1536 bytes] [unmap size=60 bytes] Modules linked in: CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.14.0-rc3-xilinx-00220-g49f84081ce4f #65 [] (unwind_backtrace) from [] (show_stack+0x10/0x14) [] (show_stack) from [] (dump_stack+0x7c/0xc8) [] (dump_stack) from [] (warn_slowpath_common+0x60/0x84) [] (warn_slowpath_common) from [] (warn_slowpath_fmt+0x2c/0x3c) [] (warn_slowpath_fmt) from [] (check_unmap+0x258/0x894) [] (check_unmap) from [] (debug_dma_unmap_page+0x64/0x70) [] (debug_dma_unmap_page) from [] (gem_rx+0x118/0x170) [] (gem_rx) from [] (macb_poll+0x24/0x94) [] (macb_poll) from [] (net_rx_action+0x6c/0x188) [] (net_rx_action) from [] (__do_softirq+0x108/0x280) [] (__do_softirq) from [] (irq_exit+0x84/0xf8) [] (irq_exit) from [] (handle_IRQ+0x68/0x8c) [] (handle_IRQ) from [] (gic_handle_irq+0x3c/0x60) [] (gic_handle_irq) from [] (__irq_svc+0x44/0x78) Exception stack(0xc056df20 to 0xc056df68) df20: 00000001 c0577430 00000000 c0577430 04ce8e0d 00000002 edfce238 00000000 df40: 04e20f78 00000002 c05981f4 00000000 00000008 c056df68 c0064008 c02d7658 df60: 20000013 ffffffff [] (__irq_svc) from [] (cpuidle_enter_state+0x54/0xf8) [] (cpuidle_enter_state) from [] (cpuidle_idle_call+0xe0/0x138) [] (cpuidle_idle_call) from [] (arch_cpu_idle+0x8/0x3c) [] (arch_cpu_idle) from [] (cpu_startup_entry+0xbc/0x124) [] (cpu_startup_entry) from [] (start_kernel+0x350/0x3b0) ---[ end trace d5fdc38641bd3a11 ]--- Mapped at: [] debug_dma_map_page+0x48/0x11c [] gem_rx_refill+0x154/0x1f8 [] macb_open+0x270/0x3e0 [] __dev_open+0x7c/0xfc [] __dev_change_flags+0x8c/0x140 Fixing this by passing the same size which is passed during mapping the memory to the unmap function as well. Signed-off-by: Soren Brinkmann Reviewed-by: Ben Hutchings --- v3: - no changes v2: - no changes Signed-off-by: Soren Brinkmann --- drivers/net/ethernet/cadence/macb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index 1f03e2041e86..d0c38e01e99f 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c @@ -730,7 +730,7 @@ static int gem_rx(struct macb *bp, int budget) skb_put(skb, len); addr = MACB_BF(RX_WADDR, MACB_BFEXT(RX_WADDR, addr)); dma_unmap_single(&bp->pdev->dev, addr, - len, DMA_FROM_DEVICE); + bp->rx_buffer_size, DMA_FROM_DEVICE); skb->protocol = eth_type_trans(skb, bp->dev); skb_checksum_none_assert(skb);