From patchwork Sat Aug 13 05:05:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iyappan Subramanian X-Patchwork-Id: 658932 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 3sB8nl3JFwz9sDG for ; Sat, 13 Aug 2016 15:04:59 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=apm.com header.i=@apm.com header.b=AvZUqqJl; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752637AbcHMFEz (ORCPT ); Sat, 13 Aug 2016 01:04:55 -0400 Received: from mail-pf0-f177.google.com ([209.85.192.177]:35855 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752428AbcHMFEx (ORCPT ); Sat, 13 Aug 2016 01:04:53 -0400 Received: by mail-pf0-f177.google.com with SMTP id h186so2048386pfg.3 for ; Fri, 12 Aug 2016 22:04:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apm.com; s=apm; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CyOpGvYw07WFDhUOvOn1lhPb06Ug7D3spAsfzwqb7qo=; b=AvZUqqJlZ4x0jBSY2wIjoB33JHCGUAv4jniFWkpsrdjBuSFyhcYj2+p7Wm498/gZqn dwdY5C2SA+1kqU6IuA7U40eiWvHBfF4Whx46NiUE6/f58dTdiSVnkpuVrmFr5xy5ed9W qEzJyt1BnBzvefoGALJZC5AtZ+txAs8XTfiFc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CyOpGvYw07WFDhUOvOn1lhPb06Ug7D3spAsfzwqb7qo=; b=WljaVS0YGWmEQ4dp4OXYl2G1EYLmwcOPgXYl5Zx9y6LJyA+TytdEfVR1hQL7zKdzdG R652Hvyz1c9GTL7+PN8WMqtFqnjBu4FCA30wUpMiGhhmAPbyhzLNbP4+Sw4CIVOn5urq phu6zehWAm3HKU74JYS7+kKuDcL3hLsFRU9DVltmipJ9004SbZ/wuGTZ5s18mk9bsi6q LgHNP1HxIIMuO+mwL7jAX7rG4PsCBUA4KM5nn72t5r/prXRep5hCvu+bN32Zr52X+Dr1 m76CwtZIaOA8GXQZyo8+mxS1bnHiayoIgtIbp239gqYxOuM4y4ygobNO81GlTTESSnJH kMIg== X-Gm-Message-State: AEkoouvFZEI3jTaiCDuf4NLyCCmwffrxqwlT8EZCTb1VKsgmvx5Lqpy9ZuUepQuAd11UEw0W X-Received: by 10.98.71.91 with SMTP id u88mr33419373pfa.145.1471064692210; Fri, 12 Aug 2016 22:04:52 -0700 (PDT) Received: from isubrama-dev.amcc.com ([206.80.4.98]) by smtp.gmail.com with ESMTPSA id o2sm16753965pfg.10.2016.08.12.22.04.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 12 Aug 2016 22:04:51 -0700 (PDT) From: Iyappan Subramanian To: davem@davemloft.net, netdev@vger.kernel.org, devicetree@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, patches@apm.com, linux@armlinux.org.uk, Iyappan Subramanian Subject: [PATCH net-next v2 02/12] drivers: net: xgene: fix: Add dma_unmap_single Date: Fri, 12 Aug 2016 22:05:38 -0700 Message-Id: <1471064748-28033-3-git-send-email-isubramanian@apm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1471064748-28033-1-git-send-email-isubramanian@apm.com> References: <1471064748-28033-1-git-send-email-isubramanian@apm.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In addition to xgene_enet_delete_bufpool() freeing skbs, their associated dma memory should also be unmapped. Signed-off-by: Iyappan Subramanian --- drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index ceeb3f4..c1fd33d 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c @@ -72,7 +72,6 @@ static int xgene_enet_refill_bufpool(struct xgene_enet_desc_ring *buf_pool, skb = netdev_alloc_skb_ip_align(ndev, len); if (unlikely(!skb)) return -ENOMEM; - buf_pool->rx_skb[tail] = skb; dma_addr = dma_map_single(dev, skb->data, len, DMA_FROM_DEVICE); if (dma_mapping_error(dev, dma_addr)) { @@ -81,6 +80,8 @@ static int xgene_enet_refill_bufpool(struct xgene_enet_desc_ring *buf_pool, return -EINVAL; } + buf_pool->rx_skb[tail] = skb; + raw_desc->m1 = cpu_to_le64(SET_VAL(DATAADDR, dma_addr) | SET_VAL(BUFDATALEN, bufdatalen) | SET_BIT(COHERENT)); @@ -102,12 +103,21 @@ static u8 xgene_enet_hdr_len(const void *data) static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool) { + struct device *dev = ndev_to_dev(buf_pool->ndev); + struct xgene_enet_raw_desc16 *raw_desc; + dma_addr_t dma_addr; int i; /* Free up the buffers held by hardware */ for (i = 0; i < buf_pool->slots; i++) { - if (buf_pool->rx_skb[i]) + if (buf_pool->rx_skb[i]) { dev_kfree_skb_any(buf_pool->rx_skb[i]); + + raw_desc = &buf_pool->raw_desc16[i]; + dma_addr = GET_VAL(DATAADDR, le64_to_cpu(raw_desc->m1)); + dma_unmap_single(dev, dma_addr, XGENE_ENET_MAX_MTU, + DMA_FROM_DEVICE); + } } }