Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp5575801ybp; Tue, 8 Oct 2019 05:14:11 -0700 (PDT) X-Google-Smtp-Source: APXvYqzbp5XWkqsszSyx7284TW5MIZVM91qgIE7x3+4LHC4a4DNnKpmUnAfIEHVcRgZKzYIvUQ6V X-Received: by 2002:a50:ed8d:: with SMTP id h13mr20140591edr.35.1570536851086; Tue, 08 Oct 2019 05:14:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570536851; cv=none; d=google.com; s=arc-20160816; b=PjxsawB23aE9b30cAQMAeUWBqWK1QeiarpG41y7yjjK/+f2JNT7IkHzKQj9VD11efR XsCFYmB0Fi6ldlMWLUpgEH4a2IKJw5QWi4Mwo3eWWfCzn4bZvkz05Ddyfvxm6s7nfD3U 7YmiSDxH5+mJwg2VcPqTXm3/Wm9TtE6WssFZrAFtt2OyO8cSnmYrgL9RJ1fUijKaMhnm nolqYBod8NsMk/KcMVv7Cnam3M+X3NrDyyzGLinDVoQQX4nX7IpQcYLJJCk3wbUxfYJ6 GOG6FAaECJCWeQLC2khsL4rhVaiChreFR9tN4QlLIdTdp6/s+lbB/MI+Vu8bPJYms3Mb pgXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:reply-to:references:in-reply-to :message-id:date:subject:cc:to:from; bh=p+6snwO6Tl5BjBzd59uSOYMzzdSSY9Z/PXeu162OSQw=; b=p+xP7x5JeDjBZb0lVvANjRgib3+8r1K34cK+uLfLFnnCQRGkS9s1GK+pfUPCRHi8n+ qKebPlKcHBuCG4G0woTZJlBY7QZW/aOkTey0xPNMWk9DtlsG7/g6IJuVu54ggh+hZ//t KdwAHd+OIEEDW6svBE7ziAKO1d5XNHdeRS5hE0GuT940nvDDvWF375TCHzC52HuVxWlI UaFQaNPSlpX7ROpreBeDjLjL2Yg225WVHGIeX1k9dP92jR/5dxSUHKaaT8ucepKLhjt9 0yq6omBNGuGVeCddMrkKs34jHxZtVUn106jsWrac4ECTGKoQX9xe0b2eq1YLlSMMag83 xQxg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 17si7193170ejt.431.2019.10.08.05.13.47; Tue, 08 Oct 2019 05:14:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731078AbfJHMLU (ORCPT + 99 others); Tue, 8 Oct 2019 08:11:20 -0400 Received: from inva020.nxp.com ([92.121.34.13]:54118 "EHLO inva020.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731061AbfJHMLS (ORCPT ); Tue, 8 Oct 2019 08:11:18 -0400 Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 30DD41A00FC; Tue, 8 Oct 2019 14:11:16 +0200 (CEST) Received: from inva024.eu-rdc02.nxp.com (inva024.eu-rdc02.nxp.com [134.27.226.22]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 245011A002E; Tue, 8 Oct 2019 14:11:16 +0200 (CEST) Received: from fsr-fed2164-101.ea.freescale.net (fsr-fed2164-101.ea.freescale.net [10.171.82.91]) by inva024.eu-rdc02.nxp.com (Postfix) with ESMTP id CEC0E2060B; Tue, 8 Oct 2019 14:11:15 +0200 (CEST) From: Madalin Bucur To: davem@davemloft.net, netdev@vger.kernel.org Cc: roy.pledge@nxp.com, laurentiu.tudor@nxp.com, linux-kernel@vger.kernel.org, Madalin Bucur Subject: [PATCH 10/20] dpaa_eth: avoid timestamp read on error paths Date: Tue, 8 Oct 2019 15:10:31 +0300 Message-Id: <1570536641-25104-11-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1570536641-25104-1-git-send-email-madalin.bucur@nxp.com> References: <1570536641-25104-1-git-send-email-madalin.bucur@nxp.com> Reply-to: madalin.bucur@nxp.com X-Virus-Scanned: ClamAV using ClamSMTP Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The dpaa_cleanup_tx_fd() function is called by the frame transmit confirmation callback but also on several error paths. This function is reading the transmit timestamp value. Avoid reading an invalid timestamp value on the error paths. Fixes: 4664856e9ca2 ("dpaa_eth: add support for hardware timestamping") Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index c3f19485739b..14ebdb10fcd4 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -1571,13 +1571,15 @@ static int dpaa_eth_refill_bpools(struct dpaa_priv *priv) * Skb freeing is not handled here. * * This function may be called on error paths in the Tx function, so guard - * against cases when not all fd relevant fields were filled in. + * against cases when not all fd relevant fields were filled in. To avoid + * reading the invalid transmission timestamp for the error paths set ts to + * false. * * Return the skb backpointer, since for S/G frames the buffer containing it * gets freed here. */ static struct sk_buff *dpaa_cleanup_tx_fd(const struct dpaa_priv *priv, - const struct qm_fd *fd) + const struct qm_fd *fd, bool ts) { const enum dma_data_direction dma_dir = DMA_TO_DEVICE; struct device *dev = priv->net_dev->dev.parent; @@ -1619,7 +1621,8 @@ static struct sk_buff *dpaa_cleanup_tx_fd(const struct dpaa_priv *priv, } /* DMA unmapping is required before accessing the HW provided info */ - if (priv->tx_tstamp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) { + if (ts && priv->tx_tstamp && + skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) { memset(&shhwtstamps, 0, sizeof(shhwtstamps)); if (!fman_port_get_tstamp(priv->mac_dev->port[TX], (void *)skbh, @@ -2085,7 +2088,7 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev) if (likely(dpaa_xmit(priv, percpu_stats, queue_mapping, &fd) == 0)) return NETDEV_TX_OK; - dpaa_cleanup_tx_fd(priv, &fd); + dpaa_cleanup_tx_fd(priv, &fd, false); skb_to_fd_failed: enomem: percpu_stats->tx_errors++; @@ -2131,7 +2134,7 @@ static void dpaa_tx_error(struct net_device *net_dev, percpu_priv->stats.tx_errors++; - skb = dpaa_cleanup_tx_fd(priv, fd); + skb = dpaa_cleanup_tx_fd(priv, fd, false); dev_kfree_skb(skb); } @@ -2171,7 +2174,7 @@ static void dpaa_tx_conf(struct net_device *net_dev, percpu_priv->tx_confirm++; - skb = dpaa_cleanup_tx_fd(priv, fd); + skb = dpaa_cleanup_tx_fd(priv, fd, true); consume_skb(skb); } @@ -2398,7 +2401,7 @@ static void egress_ern(struct qman_portal *portal, percpu_priv->stats.tx_fifo_errors++; count_ern(percpu_priv, msg); - skb = dpaa_cleanup_tx_fd(priv, fd); + skb = dpaa_cleanup_tx_fd(priv, fd, false); dev_kfree_skb_any(skb); } -- 2.1.0