From patchwork Fri Nov 23 16:56:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Radulescu X-Patchwork-Id: 1002478 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="CZH50WJW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 431jC915zPz9s1c for ; Sat, 24 Nov 2018 03:56:53 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2633150AbeKXDlx (ORCPT ); Fri, 23 Nov 2018 22:41:53 -0500 Received: from mail-eopbgr140051.outbound.protection.outlook.com ([40.107.14.51]:16356 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2633116AbeKXDlw (ORCPT ); Fri, 23 Nov 2018 22:41:52 -0500 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=Dv/tM91oO5gUUbd08tkwmBWm5vgRkRe03RoRptbmK3w=; b=CZH50WJWXVkcFKOh1fpG5kiE+YVWEwigC4RGVGjlWy9uE3e3ISsFItHUa/pSflgDrVuGknrMi/3xZtu4myvCXI6J1KOndL3k4xFzBPX4Y8PqxJlSGahMheW0eX0c1uKkip/fbzS7Ol3ONnSXrHkQ9k6kAzeDRGKsYLtVmYunvgM= Received: from AM0PR04MB4994.eurprd04.prod.outlook.com (20.177.40.15) by AM0PR04MB5379.eurprd04.prod.outlook.com (20.178.115.211) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1339.28; Fri, 23 Nov 2018 16:56:34 +0000 Received: from AM0PR04MB4994.eurprd04.prod.outlook.com ([fe80::c426:6b56:b6d2:c8f2]) by AM0PR04MB4994.eurprd04.prod.outlook.com ([fe80::c426:6b56:b6d2:c8f2%3]) with mapi id 15.20.1339.030; Fri, 23 Nov 2018 16:56:34 +0000 From: Ioana Ciocoi Radulescu To: "netdev@vger.kernel.org" , "davem@davemloft.net" CC: Ioana Ciornei Subject: [PATCH net-next 4/8] dpaa2-eth: Release buffers back to pool on XDP_DROP Thread-Topic: [PATCH net-next 4/8] dpaa2-eth: Release buffers back to pool on XDP_DROP Thread-Index: AQHUg019ZXaBFF05aEqzk31P2ujhMw== Date: Fri, 23 Nov 2018 16:56:34 +0000 Message-ID: <1542992186-26028-5-git-send-email-ruxandra.radulescu@nxp.com> References: <1542992186-26028-1-git-send-email-ruxandra.radulescu@nxp.com> In-Reply-To: <1542992186-26028-1-git-send-email-ruxandra.radulescu@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR0802CA0024.eurprd08.prod.outlook.com (2603:10a6:800:aa::34) To AM0PR04MB4994.eurprd04.prod.outlook.com (2603:10a6:208:c7::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ruxandra.radulescu@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [86.34.165.90] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR04MB5379; 6:V1Kz+50ryzbSQ6FOIbWEzrTg471sYPhzaujohD7bYNX7t/Tg4odulTYL11lh8kogvyP9TLx3qzo95xH+9pjTwB607DXuF12tISDysRyEcEo1rwk1/zbELJiSv/aS2beHG+eZsh+/9wodFCPqVdmMZhUv27lZFAVX1gz5aIqPrv+ayGGThGa8gKSQJMEUG6Qyf9BSe2lxcAfVxPXQ8/H59dNdjI/NvImdY5T20VKPxgHsGnp8aZCAMXahBEwGHebQPUcmnvkfIg4N886km8kPfkEjATg5IIZys6FQPXmyHq1IHgfbitgC4qemhPAsViXyRyfy6cbarl8eefYYiRbauvPRjGPK3aNSrTtj6fcwLEI8DK/DJqHTTweQExUeScPebASVyGkBpOqo0rm9eov24SHVS5gcdG0yMRiS2UYtCG6Ty/gV0qLpYTlyDMkFk8h8vKNDGzo3ItCiWidxLJgcmw==; 5:+mo3GiQn/99Uiagw21OEOmSwEldLJfInurAuDtvHoICFIlGn9xwCqQIhYJzMkFuk7eLponRLSptFhfj7wbano3LScGhEFd4/OyNPrmlg39iRcAy28hBG7qFuYNi2TAX29NFwffAfe90nvrP8t6JtP9Y223+S0dwRHn+p8SJ+tTA=; 7:ggFTtoRAk1fnv3hDzXqLP2O9tyf9MKIvgl7Y8HzQmimujTGjOKdZffmD8DRaLdqI3Ql2byKrM5ovNkhI4j9OPZO3TkckVxECaxDzgi7ZXG+fGQ07XhyQ++dSKFcvIJZ13fletyVJvd6ZfldKYjQ/0A== x-ms-office365-filtering-correlation-id: 5a34ec43-03f9-45bf-1a09-08d651649fc9 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM0PR04MB5379; x-ms-traffictypediagnostic: AM0PR04MB5379: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231442)(944501410)(52105112)(3002001)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095); SRVR:AM0PR04MB5379; BCL:0; PCL:0; RULEID:; SRVR:AM0PR04MB5379; x-forefront-prvs: 086597191B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(376002)(366004)(346002)(136003)(39860400002)(189003)(199004)(6512007)(53936002)(5660300001)(2501003)(6436002)(86362001)(7736002)(305945005)(8676002)(106356001)(8936002)(81156014)(81166006)(105586002)(36756003)(66066001)(26005)(6486002)(71190400001)(99286004)(25786009)(110136005)(2900100001)(97736004)(478600001)(486006)(4326008)(3846002)(6116002)(186003)(316002)(6506007)(446003)(68736007)(2906002)(2616005)(476003)(102836004)(11346002)(256004)(386003)(14454004)(76176011)(52116002)(71200400001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR04MB5379; H:AM0PR04MB4994.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-microsoft-antispam-message-info: DuGpcXU2dtW767hcHwEk/zNlsT+8qrMVqlkIQpOKG1+116IpSy1S57sJcjIfaAJO89bTRZAUPWQ0NhiPwJFjE6KalohONNZLlsFeuFbrNL45eSayed/zWhFT67ZnqjJjXSca2lXp/QqoMslg5t3IZaeSM89QzWTExxV/vOGayqf750r/BFIUWUVFAT9aelTyoH2f0MehZgMZ92n1GlY04qQT0c2Ucc/p3SPU4uyBQLkJ61YlNIj00U88A5V8bfK5H2ZxprycnQqyAfuKpvupQldwu9zeAJ/08urofSONhvPxFWYOms59NvMZz1GWWnx1hgw7rbHQErP7GN+p7jfPgYfhwAq51eBnPripMSo8TuM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a34ec43-03f9-45bf-1a09-08d651649fc9 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2018 16:56:34.3371 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5379 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Instead of freeing the RX buffers, release them back into the pool. We wait for the maximum number of buffers supported by a single release command to accumulate before issuing the command. Also, don't unmap the Rx buffers at the beginning of the Rx routine anymore, since that would require remapping them before release. Instead, just do a DMA sync at first and only unmap if the frame is meant for the stack. Signed-off-by: Ioana Radulescu --- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 34 +++++++++++++++++++++--- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 ++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index 9ed4d8e..6256154 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -217,10 +217,34 @@ static void free_bufs(struct dpaa2_eth_priv *priv, u64 *buf_array, int count) } } +static void xdp_release_buf(struct dpaa2_eth_priv *priv, + struct dpaa2_eth_channel *ch, + dma_addr_t addr) +{ + int err; + + ch->xdp.drop_bufs[ch->xdp.drop_cnt++] = addr; + if (ch->xdp.drop_cnt < DPAA2_ETH_BUFS_PER_CMD) + return; + + while ((err = dpaa2_io_service_release(ch->dpio, priv->bpid, + ch->xdp.drop_bufs, + ch->xdp.drop_cnt)) == -EBUSY) + cpu_relax(); + + if (err) { + free_bufs(priv, ch->xdp.drop_bufs, ch->xdp.drop_cnt); + ch->buf_count -= ch->xdp.drop_cnt; + } + + ch->xdp.drop_cnt = 0; +} + static u32 run_xdp(struct dpaa2_eth_priv *priv, struct dpaa2_eth_channel *ch, struct dpaa2_fd *fd, void *vaddr) { + dma_addr_t addr = dpaa2_fd_get_addr(fd); struct bpf_prog *xdp_prog; struct xdp_buff xdp; u32 xdp_act = XDP_PASS; @@ -250,8 +274,7 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv, case XDP_ABORTED: trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act); case XDP_DROP: - ch->buf_count--; - free_rx_fd(priv, fd, vaddr); + xdp_release_buf(priv, ch, addr); break; } @@ -282,7 +305,8 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv, trace_dpaa2_rx_fd(priv->net_dev, fd); vaddr = dpaa2_iova_to_virt(priv->iommu_domain, addr); - dma_unmap_single(dev, addr, DPAA2_ETH_RX_BUF_SIZE, DMA_FROM_DEVICE); + dma_sync_single_for_cpu(dev, addr, DPAA2_ETH_RX_BUF_SIZE, + DMA_FROM_DEVICE); fas = dpaa2_get_fas(vaddr, false); prefetch(fas); @@ -297,10 +321,14 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv, if (xdp_act != XDP_PASS) return; + dma_unmap_single(dev, addr, DPAA2_ETH_RX_BUF_SIZE, + DMA_FROM_DEVICE); skb = build_linear_skb(ch, fd, vaddr); } else if (fd_format == dpaa2_fd_sg) { WARN_ON(priv->xdp_prog); + dma_unmap_single(dev, addr, DPAA2_ETH_RX_BUF_SIZE, + DMA_FROM_DEVICE); skb = build_frag_skb(priv, ch, buf_data); skb_free_frag(vaddr); percpu_extras->rx_sg_frames++; diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h index 2873a15..23cf9d9 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h @@ -285,6 +285,8 @@ struct dpaa2_eth_fq { struct dpaa2_eth_ch_xdp { struct bpf_prog *prog; + u64 drop_bufs[DPAA2_ETH_BUFS_PER_CMD]; + int drop_cnt; }; struct dpaa2_eth_channel {