From patchwork Mon Nov 26 16:27:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Radulescu X-Patchwork-Id: 1003320 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="A9DcZiMf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433XQC5q2wz9s3C for ; Tue, 27 Nov 2018 03:27:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726922AbeK0DWV (ORCPT ); Mon, 26 Nov 2018 22:22:21 -0500 Received: from mail-eopbgr80084.outbound.protection.outlook.com ([40.107.8.84]:2992 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726459AbeK0DWV (ORCPT ); Mon, 26 Nov 2018 22:22:21 -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=nmxEvxzUW9k8ie8w9HX2lYK40ax5uObRAxT336ARgK0=; b=A9DcZiMfWXPoVFJp2xoxJ7cEXPlD+YygZNn6LBk9dSjQelX8r/nDNKwsCdl6YYoiImsyn+LUhBjHdNhp2Vktu2WMndGoMV65CF/a0NYf5U+TfUBaGwc6r39vxo4WjrI1l1gqeO+dW6YiVJr8hY+sC+gTgp/+3sXG+NTYaQhFngw= Received: from AM6PR04MB5000.eurprd04.prod.outlook.com (20.177.33.219) by AM6PR04MB4518.eurprd04.prod.outlook.com (20.176.242.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.19; Mon, 26 Nov 2018 16:27:37 +0000 Received: from AM6PR04MB5000.eurprd04.prod.outlook.com ([fe80::298c:e496:4be4:3244]) by AM6PR04MB5000.eurprd04.prod.outlook.com ([fe80::298c:e496:4be4:3244%5]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 16:27:37 +0000 From: Ioana Ciocoi Radulescu To: "netdev@vger.kernel.org" , "davem@davemloft.net" CC: Ioana Ciornei , "dsahern@gmail.com" , Camelia Alexandra Groza Subject: [PATCH v2 net-next 6/8] dpaa2-eth: Add support for XDP_TX Thread-Topic: [PATCH v2 net-next 6/8] dpaa2-eth: Add support for XDP_TX Thread-Index: AQHUhaTv//yGebdPWEqw70E93x+Hvw== Date: Mon, 26 Nov 2018 16:27:33 +0000 Message-ID: <1543249591-14563-7-git-send-email-ruxandra.radulescu@nxp.com> References: <1543249591-14563-1-git-send-email-ruxandra.radulescu@nxp.com> In-Reply-To: <1543249591-14563-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: VI1PR0302CA0012.eurprd03.prod.outlook.com (2603:10a6:800:e9::22) To AM6PR04MB5000.eurprd04.prod.outlook.com (2603:10a6:20b:7::27) 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; AM6PR04MB4518; 6:irQngBbV9xLCuBIW9/I9IA8jYh3XesY9NeJt9QUFlWXHi5jyZAZsRh5MSq0BI9owjRenKw0jgGScHC0EpdqT2VuhaepMtORZEnGbznMCcqVYlMKV0ayh/qRY204Cguesw0XaWnfhT4bilmBc4hJJiiuSGqgeGRsxUzRgGU71+QE4+cMQ+0txCHguVGYgEcaQMrWvM3SPEOs9jDUBRd87bwhHkSoGE6rpOcwyb0RQSlDf4FE5VUvxEAaC2iIyHqw9zS4PIcJdnhfuKicizwetzF3909bdXZseXP1ksPyNtMu2gaWnjNtxV/f8U9ceQm9P/otFjT3drNcrgK2yshFlgquirodJhZeUpZvkEKzObV0wQBqYZKlhVLwJUDwZN4PLRW5AVJELHKVjzNiUltDK2/X4HZMkiZOS+erByI2bwz3ToppYlUMom/y0xHxjI0Dt8KJGbROow2SEq80QQYWNSg==; 5:DRUT0O+5/uFaL3LTnXTOHfWajJGSjBboawuTmKPeKUzpKLzbAyVVuP9GpN41m0T8bjtAhzI1eugmORDndHbw83P4Ed2ljAOiQ8vU4NBN6skazOQfWcOUyERdVNDVO5Boyt/J/tSN7QXYzhPrVVEAEr8gYEPd7ThV3gYSj7voJb0=; 7:zWQz+v3q1r+lMbxnlFDQyXRbqZKlMA69Xb1AGe01NQ4QPQutHXUz0fIl63nRxKSzrZgXe/XakVD+XziU8Zl6rAvGg2K+IpHZFJucTjt84xO2bZ1GaP3kYAvyRHWrYhuHbLHV/681aMRYWheloMt0+g== x-ms-office365-filtering-correlation-id: 20e8ab2d-157c-4de8-7704-08d653bc116b 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:AM6PR04MB4518; x-ms-traffictypediagnostic: AM6PR04MB4518: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231443)(944501410)(52105112)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:AM6PR04MB4518; BCL:0; PCL:0; RULEID:; SRVR:AM6PR04MB4518; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(366004)(376002)(346002)(136003)(39860400002)(199004)(189003)(86362001)(71200400001)(316002)(54906003)(478600001)(6666004)(110136005)(66066001)(186003)(2906002)(71190400001)(5660300001)(386003)(7736002)(575784001)(102836004)(26005)(76176011)(6512007)(256004)(14444005)(52116002)(2501003)(99286004)(11346002)(446003)(476003)(486006)(2616005)(6436002)(81156014)(305945005)(105586002)(106356001)(68736007)(14454004)(39060400002)(8676002)(8936002)(81166006)(6486002)(4326008)(6506007)(25786009)(97736004)(6116002)(3846002)(36756003)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR04MB4518; H:AM6PR04MB5000.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: vUG+EuI+eqfive5h6YUTCmAoc8asOItu114nZCTDwvFYS18PTXjvlEkRUOM347To0y4EGtSBCnfUd0pI3TplXs931eSYMec/9kj25y4+WjvdCdD0szm3cqHpZ7mJlzdeV9j+Of1WZ028qYoWCJESifVpzYjT6fCYmH7lcFZaggvoLTiBLma3UXu1YAyNN8X3ae/QLbphKpCCHbwMXU3sM0m1zBOAHa6Q3YFf+zVFuHdYJCzk8jo+MzGy2OcSMGWYYPcZ43n/8avczd8q/w9BmThvJ3vJV2cAhxwW54xi0WjSt8Ap3/Llvw4pQ1N9h/hUICyjqAEE/ZLKnhzmcfDeKqjB9VoyvNQRoc4eQ6WtzXk= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 20e8ab2d-157c-4de8-7704-08d653bc116b X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 16:27:33.3818 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4518 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Send frames back on the same port for XDP_TX action. Since the frame buffers have been allocated by us, we can recycle them directly into the Rx buffer pool instead of requesting a confirmation frame upon transmission complete. Signed-off-by: Ioana Radulescu --- v2: XDP_TX packets count towards the tx packets and bytes counters drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 51 +++++++++++++++++++++++- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 + 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index c2e880b..bc582c4 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -240,14 +240,53 @@ static void xdp_release_buf(struct dpaa2_eth_priv *priv, ch->xdp.drop_cnt = 0; } +static int xdp_enqueue(struct dpaa2_eth_priv *priv, struct dpaa2_fd *fd, + void *buf_start, u16 queue_id) +{ + struct dpaa2_eth_fq *fq; + struct dpaa2_faead *faead; + u32 ctrl, frc; + int i, err; + + /* Mark the egress frame hardware annotation area as valid */ + frc = dpaa2_fd_get_frc(fd); + dpaa2_fd_set_frc(fd, frc | DPAA2_FD_FRC_FAEADV); + dpaa2_fd_set_ctrl(fd, DPAA2_FD_CTRL_ASAL); + + /* Instruct hardware to release the FD buffer directly into + * the buffer pool once transmission is completed, instead of + * sending a Tx confirmation frame to us + */ + ctrl = DPAA2_FAEAD_A4V | DPAA2_FAEAD_A2V | DPAA2_FAEAD_EBDDV; + faead = dpaa2_get_faead(buf_start, false); + faead->ctrl = cpu_to_le32(ctrl); + faead->conf_fqid = 0; + + fq = &priv->fq[queue_id]; + for (i = 0; i < DPAA2_ETH_ENQUEUE_RETRIES; i++) { + err = dpaa2_io_service_enqueue_qd(fq->channel->dpio, + priv->tx_qdid, 0, + fq->tx_qdbin, fd); + if (err != -EBUSY) + break; + } + + return err; +} + static u32 run_xdp(struct dpaa2_eth_priv *priv, struct dpaa2_eth_channel *ch, + struct dpaa2_eth_fq *rx_fq, struct dpaa2_fd *fd, void *vaddr) { dma_addr_t addr = dpaa2_fd_get_addr(fd); + struct rtnl_link_stats64 *percpu_stats; struct bpf_prog *xdp_prog; struct xdp_buff xdp; u32 xdp_act = XDP_PASS; + int err; + + percpu_stats = this_cpu_ptr(priv->percpu_stats); rcu_read_lock(); @@ -269,6 +308,16 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv, switch (xdp_act) { case XDP_PASS: break; + case XDP_TX: + err = xdp_enqueue(priv, fd, vaddr, rx_fq->flowid); + if (err) { + xdp_release_buf(priv, ch, addr); + percpu_stats->tx_errors++; + } else { + percpu_stats->tx_packets++; + percpu_stats->tx_bytes += dpaa2_fd_get_len(fd); + } + break; default: bpf_warn_invalid_xdp_action(xdp_act); case XDP_ABORTED: @@ -317,7 +366,7 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv, percpu_extras = this_cpu_ptr(priv->percpu_extras); if (fd_format == dpaa2_fd_single) { - xdp_act = run_xdp(priv, ch, (struct dpaa2_fd *)fd, vaddr); + xdp_act = run_xdp(priv, ch, fq, (struct dpaa2_fd *)fd, vaddr); if (xdp_act != XDP_PASS) { percpu_stats->rx_packets++; percpu_stats->rx_bytes += dpaa2_fd_get_len(fd); diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h index 23cf9d9..5530a0e 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h @@ -139,7 +139,9 @@ struct dpaa2_faead { }; #define DPAA2_FAEAD_A2V 0x20000000 +#define DPAA2_FAEAD_A4V 0x08000000 #define DPAA2_FAEAD_UPDV 0x00001000 +#define DPAA2_FAEAD_EBDDV 0x00002000 #define DPAA2_FAEAD_UPD 0x00000010 /* Accessors for the hardware annotation fields that we use */