From patchwork Thu Nov 26 18:08:11 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 549212 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 7CF2F1402A5 for ; Fri, 27 Nov 2015 05:10:25 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=semihalf-com.20150623.gappssmtp.com header.i=@semihalf-com.20150623.gappssmtp.com header.b=YryRbObt; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753416AbbKZSJd (ORCPT ); Thu, 26 Nov 2015 13:09:33 -0500 Received: from mail-lf0-f50.google.com ([209.85.215.50]:35177 "EHLO mail-lf0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753308AbbKZSI2 (ORCPT ); Thu, 26 Nov 2015 13:08:28 -0500 Received: by lfdl133 with SMTP id l133so105100762lfd.2 for ; Thu, 26 Nov 2015 10:08:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xk/83gMht/ZuImziGBecuEzMIA+FAjRqXcUYfikpwQQ=; b=YryRbObtY3E1JRl8RJdHVVXI7cLiH4XQLWqm0z0Y7mx2ijC/V1K1NbvDveSkkeog3Z ZLb6Sh8u2n1nvg3bvvC6XzTKq1rqFLamJCQ6FJ1l0C5XiAZUUAKO5VbnU0gT8srkx5w6 mVc1LB3kZCTVPwwq1lz5YKTEzGJvfpz/wUHye0pMIU6lb+ubXGlgrmLjMlQjB9Zs+0+q U5ZzbcaEbRODtYoQ7EzSQL8NK6T9tv4jEHdibtr854FRP8QuCwNHupHVHMosRv5dPM7e HXdo6xLGtSOAPxiCi6p8dJS8xIFHX4rv6FoTw4o0udFgccDJ/e/INqK/ncrqHirM8t/d 58zQ== 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=xk/83gMht/ZuImziGBecuEzMIA+FAjRqXcUYfikpwQQ=; b=ToyrNoc1CqzhbgTH4XS/JvQNwFg/yC9oSi077R8UFKGQ4fQjICqTBkf9JkLdbmpW4Y 4bjbA3wdrMMoqYnIRRcFLCPW20avohwJUx6FFEgsm50p2iKp52+CjMkjcsIDkQKQyrwP IufkIoiMEkUoIJM8ST3HTDsS2F6Z4JJR8GRGrcHIIagD4xEvLZaSimk99Ba7zLhXzEg5 ld4DE175BDrh8WEgtitiURuW19+AGvY+3ZpHpNqbDLgzbtyxmH1MfaxklyFkRYIFqBTr AKrHvDmTs8q2ZDxeTkl6juZ608tbtNX9Cb1QkBTqBcv1DahD5F2hbSN1UVX+8Vh2TkxJ BdbA== X-Gm-Message-State: ALoCoQkvHi5VLM36z/RsXjEjFP5A2bLOiqL2JgD7XFtBQBkpfzsN+K++HieqVnHDbbbZA25fv6NJ X-Received: by 10.25.79.17 with SMTP id d17mr18901370lfb.40.1448561307114; Thu, 26 Nov 2015 10:08:27 -0800 (PST) Received: from enkidu.semihalf.local ([80.82.22.190]) by smtp.gmail.com with ESMTPSA id a190sm4297654lfa.32.2015.11.26.10.08.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Nov 2015 10:08:26 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org Cc: davem@davemloft.net, linux@arm.linux.org.uk, sebastian.hesselbarth@gmail.com, andrew@lunn.ch, jason@lakedaemon.net, thomas.petazzoni@free-electrons.com, gregory.clement@free-electrons.com, simon.guinot@sequanux.org, nadavh@marvell.com, alior@marvell.com, xswang@marvell.com, myair@marvell.com, nitroshift@yahoo.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Subject: [PATCH v2 net 4/6] net: mvneta: fix error path for building skb Date: Thu, 26 Nov 2015 19:08:11 +0100 Message-Id: <1448561293-16431-5-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1448561293-16431-1-git-send-email-mw@semihalf.com> References: <1448561293-16431-1-git-send-email-mw@semihalf.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In the actual RX processing, there is same error path for both descriptor ring refilling and building skb fails. This is not correct, because after successful refill, the ring is already updated with newly allocated buffer. Then, in case of build_skb() fail, hitherto code left the original buffer unmapped. This patch fixes above situation by swapping error check of skb build with DMA-unmap of original buffer. Signed-off-by: Marcin Wojtas Cc: # v4.2+ Fixes a84e32894191 ("net: mvneta: fix refilling for Rx DMA buffers") Acked-by: Simon Guinot --- drivers/net/ethernet/marvell/mvneta.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index 0c3d923..62cf971 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -1580,12 +1580,16 @@ static int mvneta_rx(struct mvneta_port *pp, int rx_todo, } skb = build_skb(data, pp->frag_size > PAGE_SIZE ? 0 : pp->frag_size); - if (!skb) - goto err_drop_frame; + /* After refill old buffer has to be unmapped regardless + * the skb is successfully built or not. + */ dma_unmap_single(dev->dev.parent, phys_addr, MVNETA_RX_BUF_SIZE(pp->pkt_size), DMA_FROM_DEVICE); + if (!skb) + goto err_drop_frame; + rcvd_pkts++; rcvd_bytes += rx_bytes;