From patchwork Fri Nov 23 16:56:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Radulescu X-Patchwork-Id: 1002476 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="lxayNycg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 431jC26pTjz9s7T for ; Sat, 24 Nov 2018 03:56:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2633136AbeKXDlr (ORCPT ); Fri, 23 Nov 2018 22:41:47 -0500 Received: from mail-eopbgr10064.outbound.protection.outlook.com ([40.107.1.64]:22029 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2633124AbeKXDln (ORCPT ); Fri, 23 Nov 2018 22:41:43 -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=KQbvSvK7jy00Tj0+GwvQ2Q/4dBe0bDXAesvUEytDK3E=; b=lxayNycgCKZQapCWlcSh6cDe1hxphdpn6RNyYGatAryIAemPIJ0jTXyCx0CJTqyuSYJigptnhgNie68yhIq1mAUDvaswROy2EASOUIeSW6t3Y6tvA4fv3cDM4y5zR1XsjQVzmOkQhLEuyVd5JDMPCAkYvH6AOpLyvAA7c6qLF+k= Received: from AM0PR04MB4994.eurprd04.prod.outlook.com (20.177.40.15) by AM0PR04MB5041.eurprd04.prod.outlook.com (20.177.40.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.27; Fri, 23 Nov 2018 16:56:33 +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:33 +0000 From: Ioana Ciocoi Radulescu To: "netdev@vger.kernel.org" , "davem@davemloft.net" CC: Ioana Ciornei Subject: [PATCH net-next 2/8] dpaa2-eth: Allow XDP header adjustments Thread-Topic: [PATCH net-next 2/8] dpaa2-eth: Allow XDP header adjustments Thread-Index: AQHUg018br1o5C0Y7U2XO/1/SeuD6g== Date: Fri, 23 Nov 2018 16:56:32 +0000 Message-ID: <1542992186-26028-3-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; AM0PR04MB5041; 6:N2VFG/854cYEjISzaxfm8NZlbmjNm58ycGF6VfecwjjsUDDK1zQz7i1/iqSMZnz/EFxvkvIlbzqh8hgvLfOOIZWmA/3Ar49Safct8xWzFoNV9jBvZgO0TwWpK4Rt/u3nUZNCJiNUJWprrVFXZWWdR3LSa5v+3ufTpsHGinE8PkPfM0imWn+F1MNFOA2m8B7KqqUd/NcLw0Nyq2N4UwQt5FwM1UO697I5CjOe49uU0ivsOUy134RCFugEZLLWx0W36c+zrIj1l9V5in35z6U9SCbN9Ljc63QMKGn3kd1t3b3yAZ9dxkb08UUsLfowmOVL+WBJqIffzpIjBhDLtIKFRiCG8RAlUbrsGjneM90QS7nhPtQ3t7gl/8ZXQNyfTlz902tu5uCUROrn1u4jR6mdyPDKTLouLmXuC5e4n44jsdadEFy6jtMBwy61OtCneOOaKX40lyPOt2Cc5ZbjqUpn0Q==; 5:NAeCFbNYdqr/0HO0ACPtPrSp6dV8vXSz1Ko0fhsZCmiLLheLw9XhxxNvPR4yuP1LZLbZqyZq2M11k+A248PeGdzJ9sRaHVuz1eT1T9vxkUFoX8Z4PjUrs/O5L9J1qZLgJonY0qpBbTPQOzSBKHgQFn0Y1Fxoi8X2qwCuKJ7/0Ws=; 7:bBXy82G0ugATRxbQO4zIvTSiCcBeRApikoU0aMVZRqYg/PjqR6xJeCQAD2JQATWY8gfTNxfMe21EsqpyKlUshkfJ1JmyXULJV7PRX/Zc2InS/M7SqZ2553H8G2r8n2kwkpcOL5hzTAOZ0nABzTgIjA== x-ms-office365-filtering-correlation-id: c3821053-b0e0-4abb-ac30-08d651649f18 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:AM0PR04MB5041; x-ms-traffictypediagnostic: AM0PR04MB5041: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(185117386973197); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231442)(944501410)(52105112)(93006095)(93001095)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:AM0PR04MB5041; BCL:0; PCL:0; RULEID:; SRVR:AM0PR04MB5041; x-forefront-prvs: 086597191B x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(376002)(396003)(39860400002)(366004)(189003)(199004)(68736007)(8676002)(66066001)(81166006)(2616005)(446003)(11346002)(486006)(476003)(2906002)(3846002)(7736002)(6116002)(305945005)(25786009)(110136005)(6486002)(81156014)(14444005)(53936002)(316002)(6512007)(478600001)(8936002)(2900100001)(71200400001)(71190400001)(4326008)(5660300001)(86362001)(256004)(186003)(106356001)(52116002)(76176011)(386003)(6436002)(97736004)(102836004)(2501003)(6506007)(105586002)(36756003)(99286004)(26005)(14454004)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR04MB5041; 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: 3DL5qQWJFvQk7S+qa9+LoMXQuuvEDDHGRzW3yqedT9ovU9mkLMP5rj2LgGLkgdISJrEl86YkKuzseGhRl1ThBiRVyqOhejur3cHzQGCujHoCLF7tI3rW4qlhCT+KzlklP0tambZ38Ux1P/40JZTzhytc1yp2h0BEq/Viq//jdi3z6AQ9/MknEmsqjB/gW2pI93k9nW5XOk349XZxgg3P0v+IJPmow2UewaOrCdL2lGHjpwEQ5WJiHIgVTT2gbrx33qjddwm1DyIuPra2ylv4FUkOVS3+YIQ061vxdzq3TGVHcANILDTB7Xm1qkBk2c9AH5UMadbANcims4j4rhIagkmqWi7UJcpZKQW9XUmZBeQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3821053-b0e0-4abb-ac30-08d651649f18 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2018 16:56:32.9621 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5041 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Reserve XDP_PACKET_HEADROOM bytes in Rx buffers to allow XDP programs to increase frame header size. Signed-off-by: Ioana Radulescu --- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 43 ++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index 5340ac9..5be3008 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -216,11 +216,15 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv, xdp.data = vaddr + dpaa2_fd_get_offset(fd); xdp.data_end = xdp.data + dpaa2_fd_get_len(fd); - xdp.data_hard_start = xdp.data; + xdp.data_hard_start = xdp.data - XDP_PACKET_HEADROOM; xdp_set_data_meta_invalid(&xdp); xdp_act = bpf_prog_run_xdp(xdp_prog, &xdp); + /* xdp.data pointer may have changed */ + dpaa2_fd_set_offset(fd, xdp.data - vaddr); + dpaa2_fd_set_len(fd, xdp.data_end - xdp.data); + switch (xdp_act) { case XDP_PASS: break; @@ -1480,7 +1484,7 @@ static bool xdp_mtu_valid(struct dpaa2_eth_priv *priv, int mtu) mfl = DPAA2_ETH_L2_MAX_FRM(mtu); linear_mfl = DPAA2_ETH_RX_BUF_SIZE - DPAA2_ETH_RX_HWA_SIZE - - dpaa2_eth_rx_head_room(priv); + dpaa2_eth_rx_head_room(priv) - XDP_PACKET_HEADROOM; return (mfl <= linear_mfl); } @@ -1528,6 +1532,32 @@ static int dpaa2_eth_change_mtu(struct net_device *dev, int new_mtu) return 0; } +static int update_rx_buffer_headroom(struct dpaa2_eth_priv *priv, bool has_xdp) +{ + struct dpni_buffer_layout buf_layout = {0}; + int err; + + err = dpni_get_buffer_layout(priv->mc_io, 0, priv->mc_token, + DPNI_QUEUE_RX, &buf_layout); + if (err) { + netdev_err(priv->net_dev, "dpni_get_buffer_layout failed\n"); + return err; + } + + /* Reserve extra headroom for XDP header size changes */ + buf_layout.data_head_room = dpaa2_eth_rx_head_room(priv) + + (has_xdp ? XDP_PACKET_HEADROOM : 0); + buf_layout.options = DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM; + err = dpni_set_buffer_layout(priv->mc_io, 0, priv->mc_token, + DPNI_QUEUE_RX, &buf_layout); + if (err) { + netdev_err(priv->net_dev, "dpni_set_buffer_layout failed\n"); + return err; + } + + return 0; +} + static int setup_xdp(struct net_device *dev, struct bpf_prog *prog) { struct dpaa2_eth_priv *priv = netdev_priv(dev); @@ -1553,11 +1583,18 @@ static int setup_xdp(struct net_device *dev, struct bpf_prog *prog) if (up) dpaa2_eth_stop(dev); - /* While in xdp mode, enforce a maximum Rx frame size based on MTU */ + /* While in xdp mode, enforce a maximum Rx frame size based on MTU. + * Also, when switching between xdp/non-xdp modes we need to reconfigure + * our Rx buffer layout. Buffer pool was drained on dpaa2_eth_stop, + * so we are sure no old format buffers will be used from now on. + */ if (update_settings) { err = set_rx_mfl(priv, dev->mtu, !!prog); if (err) goto out_err; + err = update_rx_buffer_headroom(priv, !!prog); + if (err) + goto out_err; } old = xchg(&priv->xdp_prog, prog);