From patchwork Mon Mar 25 13:06:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Ciornei X-Patchwork-Id: 1064298 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="fCfVh2vS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44SZK06Pjtz9sQr for ; Tue, 26 Mar 2019 00:06:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731296AbfCYNG1 (ORCPT ); Mon, 25 Mar 2019 09:06:27 -0400 Received: from mail-eopbgr30070.outbound.protection.outlook.com ([40.107.3.70]:34179 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731076AbfCYNG0 (ORCPT ); Mon, 25 Mar 2019 09:06:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WC2N4bzVajf+AlNLLh/tcUCUTpx0Ud8EwjH4o7Wwugg=; b=fCfVh2vSoP0h7gDk+JDA+3rwfPhHkfMMrn/yaPOojWnK2ZGITq78p09qAlIWDMtF9ph1zOdbTU9OPYcshxErtj9kHwEE851AOh4zQQLqPx/pG1/wZGi0V5ZzIERxd8umhEmqDjiV9kXd3eV3loPvfoviRCFPAerzfB7wbp2V2kU= Received: from VI1PR0402MB2800.eurprd04.prod.outlook.com (10.172.255.18) by VI1PR0402MB3439.eurprd04.prod.outlook.com (52.134.3.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Mon, 25 Mar 2019 13:06:23 +0000 Received: from VI1PR0402MB2800.eurprd04.prod.outlook.com ([fe80::f808:5ebf:a573:3ea1]) by VI1PR0402MB2800.eurprd04.prod.outlook.com ([fe80::f808:5ebf:a573:3ea1%8]) with mapi id 15.20.1730.019; Mon, 25 Mar 2019 13:06:23 +0000 From: Ioana Ciornei To: "davem@davemloft.net" CC: "netdev@vger.kernel.org" , Ioana Ciocoi Radulescu , Ioana Ciornei Subject: [PATCH net] dpaa2-eth: fix race condition with bql frame accounting Thread-Topic: [PATCH net] dpaa2-eth: fix race condition with bql frame accounting Thread-Index: AQHU4wuLa5ow3Hx4Qk6rvpSHgYoJUw== Date: Mon, 25 Mar 2019 13:06:22 +0000 Message-ID: <1553519146-31375-1-git-send-email-ioana.ciornei@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR08CA0099.eurprd08.prod.outlook.com (2603:10a6:800:d3::25) To VI1PR0402MB2800.eurprd04.prod.outlook.com (2603:10a6:800:ad::18) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ioana.ciornei@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 1.9.1 x-originating-ip: [212.146.100.6] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 237dcd11-3321-4c74-1cfe-08d6b122adec x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR0402MB3439; x-ms-traffictypediagnostic: VI1PR0402MB3439: x-microsoft-antispam-prvs: x-forefront-prvs: 0987ACA2E2 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(396003)(376002)(136003)(366004)(39860400002)(189003)(199004)(50226002)(66066001)(6486002)(99286004)(2501003)(7736002)(86362001)(6436002)(97736004)(256004)(6506007)(386003)(52116002)(8936002)(5660300002)(478600001)(2616005)(44832011)(486006)(14444005)(476003)(25786009)(6512007)(305945005)(53936002)(5640700003)(36756003)(14454004)(316002)(71200400001)(4326008)(54906003)(6916009)(2906002)(3846002)(81156014)(81166006)(1730700003)(6116002)(8676002)(26005)(68736007)(2351001)(102836004)(106356001)(71190400001)(186003)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0402MB3439; H:VI1PR0402MB2800.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: t5wcNw7mNqs0/eQfR5+lpPrs462Y1T83GisFWubb0vwB3WhaO+1LBSHPjJMH+bKbalaGmED3gjZNTRtorPKB4rNfDk7WiNn9lXIW0A//wypWb5RjseWWSeBvWQb3qXPuOz0fGQocp5zU2J/z3itEg9kGN0ecBzrsNc6ZtcYdnk3bWopZyUqmWbmfMjvsPpzpkhAAQNzLd9bmxZcZTeNbFTbEnI0HOT8PEYnpgVd+I9cfdUMi7o0ggJm3lNidpe6XTiY3RPB3D97BZ6fygD5Q0bUp3+bQT34pYaDX7OzVr3YtZkj1Rw4MocLgDFd0fFhHvpCiE6I/0L+1Ia9IKahKt6hRFVL8rQH2oPbyxYvXtB4EXJDq/zEMJw00tpfPXbPgnY3VDi9kIcMzIEn6DQQLvrc++u76aUEVX9orqHQzY4w= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 237dcd11-3321-4c74-1cfe-08d6b122adec X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Mar 2019 13:06:22.8894 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3439 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org It might happen that Tx conf acknowledges a frame before it was subscribed in bql, as subscribing was previously done after the enqueue operation. This patch moves the netdev_tx_sent_queue call before the actual frame enqueue, so that this can never happen. Fixes: 569dac6 ("dpaa2-eth: bql support") Signed-off-by: Ioana Ciornei --- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index 1a68052..dc339dc 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -815,6 +815,14 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, struct net_device *net_dev) */ queue_mapping = skb_get_queue_mapping(skb); fq = &priv->fq[queue_mapping]; + + fd_len = dpaa2_fd_get_len(&fd); + nq = netdev_get_tx_queue(net_dev, queue_mapping); + netdev_tx_sent_queue(nq, fd_len); + + /* Everything that happens after this enqueues might race with + * the Tx confirmation callback for this frame + */ for (i = 0; i < DPAA2_ETH_ENQUEUE_RETRIES; i++) { err = priv->enqueue(priv, fq, &fd, 0); if (err != -EBUSY) @@ -825,13 +833,10 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, struct net_device *net_dev) percpu_stats->tx_errors++; /* Clean up everything, including freeing the skb */ free_tx_fd(priv, fq, &fd, false); + netdev_tx_completed_queue(nq, 1, fd_len); } else { - fd_len = dpaa2_fd_get_len(&fd); percpu_stats->tx_packets++; percpu_stats->tx_bytes += fd_len; - - nq = netdev_get_tx_queue(net_dev, queue_mapping); - netdev_tx_sent_queue(nq, fd_len); } return NETDEV_TX_OK;