From patchwork Tue Mar 26 12:01:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 51700 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E49A62C19; Tue, 26 Mar 2019 13:01:45 +0100 (CET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20048.outbound.protection.outlook.com [40.107.2.48]) by dpdk.org (Postfix) with ESMTP id 53411A3 for ; Tue, 26 Mar 2019 13:01:45 +0100 (CET) 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=qHs+lBT/P525W38RNA7zWSzt0JABj/v3UfUgXJTz/t4=; b=MpShz2KMgRHBjol1PVvA1VBEk5C2flo6pcIwiAGsWruJz/UU4tmkAXH4nclZi4iu6RpHWQz/772DSV+eqKKk8hW4zFrJ6MZTB1GOfN1sgp9+nEIjC13jhPvreMhulg1ImfsXmQLKUIhXf3MnuZw7V0sB+bNe05FgxtnDm5N3N+o= Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com (10.168.65.19) by VI1PR0401MB2366.eurprd04.prod.outlook.com (10.169.134.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Tue, 26 Mar 2019 12:01:44 +0000 Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18]) by VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18%12]) with mapi id 15.20.1730.019; Tue, 26 Mar 2019 12:01:44 +0000 From: Hemant Agrawal To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Shreyansh Jain , Akhil Goyal Thread-Topic: [PATCH 1/4] bus/dpaa: fq lookup table saved for secondary process Thread-Index: AQHU48uu7KZgNOEmVkO0dMQiiUMy6w== Date: Tue, 26 Mar 2019 12:01:44 +0000 Message-ID: <20190326115952.26278-1-hemant.agrawal@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [92.120.1.72] x-mailer: git-send-email 2.17.1 x-clientproxiedby: BM1PR01CA0157.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::27) To VI1PR0401MB2541.eurprd04.prod.outlook.com (2603:10a6:800:56::19) authentication-results: spf=none (sender IP is ) smtp.mailfrom=hemant.agrawal@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a75ec535-ae22-42d8-f66c-08d6b1e2d08f x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR0401MB2366; x-ms-traffictypediagnostic: VI1PR0401MB2366: x-microsoft-antispam-prvs: x-forefront-prvs: 09888BC01D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(366004)(136003)(346002)(39860400002)(376002)(199004)(189003)(71190400001)(86362001)(256004)(44832011)(6916009)(26005)(5660300002)(81156014)(2351001)(2501003)(1076003)(66066001)(2906002)(6116002)(3846002)(14454004)(486006)(6506007)(1730700003)(71200400001)(316002)(14444005)(105586002)(478600001)(97736004)(8676002)(186003)(6512007)(7736002)(106356001)(8936002)(52116002)(81166006)(25786009)(50226002)(99286004)(6436002)(5640700003)(2616005)(305945005)(68736007)(386003)(4326008)(102836004)(476003)(36756003)(6486002)(54906003)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0401MB2366; H:VI1PR0401MB2541.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-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: MLd5CtrWepHpM2cUp5H8e7NwJ2jBoe5CJgCrSzlxvucjSj+uafe3aXCfLy5fWZZBqWivQoPCRWCl1h6eXLFtbymzth5fzG5wUiJIgsfCSA/N6HTKKM0Ij2JXiadu+v7hSdfs9WJ/S7bJqZVmngrOyp7G5eHrbWFDaBy8r6d++16XXl5JhU3AXWQWTuqvODZOEOQU+GM7016n+R/vwIVS67L3jnialAgS6ijS7SV1gUKirx8Wv/hYDGi5sEgB0UnB68dLon2ETOO1TCidiDMxKZlG3W3D33cKDJ+Gt5/XcqO4mA/Q+Wyf9Z/CVwvH20tTnza5G+0cBsIRKuVWV+UjECSdqFXlRoJ1+rnAQhmkM/vJIquhUFoR+CfuRcekGcrRqzkKGYRn9LxcGpB/axsC4EY7/bDMR+9jObZo5XWJnAk= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a75ec535-ae22-42d8-f66c-08d6b1e2d08f X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2019 12:01:44.2847 (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: VI1PR0401MB2366 Subject: [dpdk-dev] [PATCH 1/4] bus/dpaa: fq lookup table saved for secondary process X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Akhil Goyal A reference to qman_fq_lookup_table need to be saved in each fq, so that it is retrieved while in running secondary process. Signed-off-by: Akhil Goyal --- drivers/bus/dpaa/base/qbman/qman.c | 8 +++++++- drivers/bus/dpaa/include/fsl_qman.h | 6 ++++++ drivers/bus/dpaa/rte_bus_dpaa_version.map | 7 +++++++ drivers/net/dpaa/dpaa_ethdev.c | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c index dc64d0896..c6f7d7bb3 100644 --- a/drivers/bus/dpaa/base/qbman/qman.c +++ b/drivers/bus/dpaa/base/qbman/qman.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) * * Copyright 2008-2016 Freescale Semiconductor Inc. - * Copyright 2017 NXP + * Copyright 2017,2019 NXP * */ @@ -167,6 +167,11 @@ int qman_setup_fq_lookup_table(size_t num_entries) return 0; } +void qman_set_fq_lookup_table(void **fq_table) +{ + qman_fq_lookup_table = fq_table; +} + /* global structure that maintains fq object mapping */ static DEFINE_SPINLOCK(fq_hash_table_lock); @@ -1408,6 +1413,7 @@ int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq) pr_info("Find empty table entry failed\n"); return -ENOMEM; } + fq->qman_fq_lookup_table = qman_fq_lookup_table; #endif if (!(flags & QMAN_FQ_FLAG_AS_IS) || (flags & QMAN_FQ_FLAG_NO_MODIFY)) return 0; diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h index e43841499..ef598ccff 100644 --- a/drivers/bus/dpaa/include/fsl_qman.h +++ b/drivers/bus/dpaa/include/fsl_qman.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) * * Copyright 2008-2012 Freescale Semiconductor, Inc. + * Copyright 2019 NXP * */ @@ -1233,6 +1234,7 @@ struct qman_fq { struct rb_node node; #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP + void **qman_fq_lookup_table; u32 key; #endif }; @@ -1307,6 +1309,10 @@ struct qman_cgr { #define QMAN_CGR_FLAG_USE_INIT 0x00000001 #define QMAN_CGR_MODE_FRAME 0x00000001 +#ifdef CONFIG_FSL_QMAN_FQ_LOOKUP +void qman_set_fq_lookup_table(void **table); +#endif + /** * qman_get_portal_index - get portal configuration index */ diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map index 70076c7ac..c88deaf7f 100644 --- a/drivers/bus/dpaa/rte_bus_dpaa_version.map +++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map @@ -116,3 +116,10 @@ DPDK_18.11 { local: *; } DPDK_18.08; + +DPDK_19.05 { + global: + qman_set_fq_lookup_table; + + local: *; +} DPDK_18.11; diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index ba66aa2a0..d42ac6286 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -1225,11 +1225,17 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev) PMD_INIT_FUNC_TRACE(); + dpaa_intf = eth_dev->data->dev_private; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) { eth_dev->dev_ops = &dpaa_devops; /* Plugging of UCODE burst API not supported in Secondary */ eth_dev->rx_pkt_burst = dpaa_eth_queue_rx; + eth_dev->tx_pkt_burst = dpaa_eth_queue_tx; +#ifdef CONFIG_FSL_QMAN_FQ_LOOKUP + qman_set_fq_lookup_table( + dpaa_intf->rx_queues->qman_fq_lookup_table); +#endif return 0; } From patchwork Tue Mar 26 12:01:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 51701 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 96F32326D; Tue, 26 Mar 2019 13:01:50 +0100 (CET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20060.outbound.protection.outlook.com [40.107.2.60]) by dpdk.org (Postfix) with ESMTP id D18D12C60 for ; Tue, 26 Mar 2019 13:01:46 +0100 (CET) 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=SukNvf8spbBRsyMhZRCu3aKxNouZW4Suz4k5VR76y0E=; b=ttFQJrZJzXFhqBbNlboLhBFAu66iIg9ktA9XPQU8E6QX23xJmZoNPZvc4dXfxhaWi3t9FB0G6xwtNE/Wtk+xaiUPWc34iDWn0ehtWduWejk1WYo6vfDjgm1pendjS61t/KCT2ktP3OwVzqPT9L7GEZldlrFxNP1ctoGLQcLLVrQ= Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com (10.168.65.19) by VI1PR0401MB2366.eurprd04.prod.outlook.com (10.169.134.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Tue, 26 Mar 2019 12:01:45 +0000 Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18]) by VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18%12]) with mapi id 15.20.1730.019; Tue, 26 Mar 2019 12:01:45 +0000 From: Hemant Agrawal To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Shreyansh Jain , Akhil Goyal Thread-Topic: [PATCH 2/4] mempool/dpaa: bp info dynamic allocation for multiprocess Thread-Index: AQHU48uvb2VvSvHDp06/9I7NP1L3Vg== Date: Tue, 26 Mar 2019 12:01:45 +0000 Message-ID: <20190326115952.26278-2-hemant.agrawal@nxp.com> References: <20190326115952.26278-1-hemant.agrawal@nxp.com> In-Reply-To: <20190326115952.26278-1-hemant.agrawal@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [92.120.1.72] x-mailer: git-send-email 2.17.1 x-clientproxiedby: BM1PR01CA0157.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::27) To VI1PR0401MB2541.eurprd04.prod.outlook.com (2603:10a6:800:56::19) authentication-results: spf=none (sender IP is ) smtp.mailfrom=hemant.agrawal@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d410e683-9dab-4d26-9250-08d6b1e2d16b x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR0401MB2366; x-ms-traffictypediagnostic: VI1PR0401MB2366: x-microsoft-antispam-prvs: x-forefront-prvs: 09888BC01D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(366004)(136003)(346002)(39860400002)(376002)(199004)(189003)(71190400001)(86362001)(256004)(44832011)(6916009)(26005)(5660300002)(81156014)(2351001)(2501003)(1076003)(66066001)(2906002)(6116002)(3846002)(14454004)(486006)(6506007)(1730700003)(71200400001)(316002)(105586002)(478600001)(97736004)(8676002)(186003)(6512007)(7736002)(106356001)(8936002)(52116002)(81166006)(25786009)(50226002)(99286004)(6436002)(5640700003)(11346002)(446003)(2616005)(305945005)(68736007)(386003)(4326008)(102836004)(476003)(36756003)(76176011)(6486002)(54906003)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0401MB2366; H:VI1PR0401MB2541.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-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: g9vFeWI5SyduvgN+amxVwC06GmiKofHbiZU5UPfZ1BsZqCpgnNMnV+Dlz/1f9jvWMfVD4xZgoKo3e1LhwjNOfh06nMPnzHT5uNYrIyfVvZKJO5Wrl1tUIC3XxIDolHTf/7nGoSH+Nup/e/gKcVaJCFveefhQXJIHd8Jq4dBpP1YCJV1lj7q/SHle+DbdRYeGyBc3SXCkn5qPwSJmKVtmljc31KUA7lkZVYlsB1ggk8EpG0JBqhBG4+cogter4OMgDU9EkLgeSz6BT8hIz640Wt88CFq+/A/v8ZkPaTIsEQ/V8lMn3bTeRXSJ3Zv/BQB6ZRuutksOPThReZcsuhtzzfRLH9keYbhPvc/i6ricMj6LchIzVLtsNbz+Ag/5keKBeCw4eKxfKb+3xwUkfsLwbWLYDkCSLyU+PJbNFXk7U/U= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d410e683-9dab-4d26-9250-08d6b1e2d16b X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2019 12:01:45.7260 (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: VI1PR0401MB2366 Subject: [dpdk-dev] [PATCH 2/4] mempool/dpaa: bp info dynamic allocation for multiprocess X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Akhil Goyal rte_dpaa_bpid_info shall be allocated with the hugepage memory which can be shared across processes. Signed-off-by: Akhil Goyal --- drivers/bus/dpaa/include/fsl_qman.h | 1 + drivers/mempool/dpaa/dpaa_mempool.c | 10 +++++++++- drivers/mempool/dpaa/dpaa_mempool.h | 4 ++-- drivers/net/dpaa/dpaa_ethdev.c | 1 + drivers/net/dpaa/dpaa_rxtx.c | 6 +++++- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h index ef598ccff..e5cccbbea 100644 --- a/drivers/bus/dpaa/include/fsl_qman.h +++ b/drivers/bus/dpaa/include/fsl_qman.h @@ -1225,6 +1225,7 @@ struct qman_fq { struct rte_event ev; /* affined portal in case of static queue */ struct qman_portal *qp; + struct dpaa_bp_info *bp_array; volatile unsigned long flags; diff --git a/drivers/mempool/dpaa/dpaa_mempool.c b/drivers/mempool/dpaa/dpaa_mempool.c index 021b366fe..003081772 100644 --- a/drivers/mempool/dpaa/dpaa_mempool.c +++ b/drivers/mempool/dpaa/dpaa_mempool.c @@ -35,7 +35,7 @@ struct dpaa_memseg_list rte_dpaa_memsegs = TAILQ_HEAD_INITIALIZER(rte_dpaa_memsegs); -struct dpaa_bp_info rte_dpaa_bpid_info[DPAA_MAX_BPOOLS]; +struct dpaa_bp_info *rte_dpaa_bpid_info; static int dpaa_mbuf_create_pool(struct rte_mempool *mp) @@ -74,6 +74,14 @@ dpaa_mbuf_create_pool(struct rte_mempool *mp) DPAA_MEMPOOL_WARN("drained %u bufs from BPID %d", num_bufs, bpid); + if (rte_dpaa_bpid_info == NULL) { + rte_dpaa_bpid_info = (struct dpaa_bp_info *)rte_zmalloc(NULL, + sizeof(struct dpaa_bp_info) * DPAA_MAX_BPOOLS, + RTE_CACHE_LINE_SIZE); + if (rte_dpaa_bpid_info == NULL) + return -ENOMEM; + } + rte_dpaa_bpid_info[bpid].mp = mp; rte_dpaa_bpid_info[bpid].bpid = bpid; rte_dpaa_bpid_info[bpid].size = mp->elt_size; diff --git a/drivers/mempool/dpaa/dpaa_mempool.h b/drivers/mempool/dpaa/dpaa_mempool.h index 533e1c6e2..f69e11f01 100644 --- a/drivers/mempool/dpaa/dpaa_mempool.h +++ b/drivers/mempool/dpaa/dpaa_mempool.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: BSD-3-Clause * - * Copyright 2017 NXP + * Copyright 2017,2019 NXP * */ #ifndef __DPAA_MEMPOOL_H__ @@ -54,7 +54,7 @@ DPAA_MEMPOOL_PTOV(struct dpaa_bp_info *bp_info __rte_unused, uint64_t addr) #define DPAA_MEMPOOL_TO_BPID(__mp) \ (((struct dpaa_bp_info *)__mp->pool_data)->bpid) -extern struct dpaa_bp_info rte_dpaa_bpid_info[DPAA_MAX_BPOOLS]; +extern struct dpaa_bp_info *rte_dpaa_bpid_info; #define DPAA_BPID_TO_POOL_INFO(__bpid) (&rte_dpaa_bpid_info[__bpid]) diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index d42ac6286..d124169c5 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -673,6 +673,7 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, rxq->is_static = true; } + rxq->bp_array = rte_dpaa_bpid_info; dev->data->rx_queues[queue_idx] = rxq; /* configure the CGR size as per the desc size */ diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c index c4471c227..a4085f47e 100644 --- a/drivers/net/dpaa/dpaa_rxtx.c +++ b/drivers/net/dpaa/dpaa_rxtx.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2017 NXP + * Copyright 2017,2019 NXP * */ @@ -598,6 +598,10 @@ uint16_t dpaa_eth_queue_rx(void *q, int num_rx_bufs, ret; uint32_t vdqcr_flags = 0; + if (unlikely(rte_dpaa_bpid_info == NULL && + rte_eal_process_type() == RTE_PROC_SECONDARY)) + rte_dpaa_bpid_info = fq->bp_array; + if (likely(fq->is_static)) return dpaa_eth_queue_portal_rx(fq, bufs, nb_bufs); From patchwork Tue Mar 26 12:01:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 51702 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9FBD349E0; Tue, 26 Mar 2019 13:01:53 +0100 (CET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20059.outbound.protection.outlook.com [40.107.2.59]) by dpdk.org (Postfix) with ESMTP id 2CCB1324D for ; Tue, 26 Mar 2019 13:01:48 +0100 (CET) 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=XMq2OyDW0RvoLmGAarAT/F7TA04WlwjYpjxrRvCZuS0=; b=yAo/JhG+xiiPGzGRHOdo5B8oR7e4xqqJzcWqn6vRy3RppirqyEl0rvJDXplJl++mJ0T7DUQowlGciiTK/R+xTq/olkiBi5ixnFALnbwGVAnMRWuy6T/yHzp+05qlxReeJDx+70yi/rfSo+1E/3tUtfy9D3seavHKKPId8uv36Dw= Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com (10.168.65.19) by VI1PR0401MB2366.eurprd04.prod.outlook.com (10.169.134.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Tue, 26 Mar 2019 12:01:47 +0000 Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18]) by VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18%12]) with mapi id 15.20.1730.019; Tue, 26 Mar 2019 12:01:47 +0000 From: Hemant Agrawal To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Shreyansh Jain Thread-Topic: [PATCH 3/4] bus/dpaa: delay fman device list to bus probe Thread-Index: AQHU48uvL9QkZNq0Ykqkn9/jDazJrw== Date: Tue, 26 Mar 2019 12:01:46 +0000 Message-ID: <20190326115952.26278-3-hemant.agrawal@nxp.com> References: <20190326115952.26278-1-hemant.agrawal@nxp.com> In-Reply-To: <20190326115952.26278-1-hemant.agrawal@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [92.120.1.72] x-mailer: git-send-email 2.17.1 x-clientproxiedby: BM1PR01CA0157.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::27) To VI1PR0401MB2541.eurprd04.prod.outlook.com (2603:10a6:800:56::19) authentication-results: spf=none (sender IP is ) smtp.mailfrom=hemant.agrawal@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3a6df033-c453-4028-420c-08d6b1e2d232 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR0401MB2366; x-ms-traffictypediagnostic: VI1PR0401MB2366: x-microsoft-antispam-prvs: x-forefront-prvs: 09888BC01D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(366004)(136003)(346002)(39860400002)(376002)(199004)(189003)(71190400001)(86362001)(256004)(44832011)(6916009)(26005)(5660300002)(81156014)(2351001)(2501003)(1076003)(66066001)(2906002)(6116002)(3846002)(14454004)(486006)(6506007)(1730700003)(71200400001)(316002)(14444005)(105586002)(478600001)(97736004)(8676002)(186003)(6512007)(7736002)(106356001)(8936002)(52116002)(81166006)(25786009)(50226002)(99286004)(6436002)(5640700003)(11346002)(446003)(2616005)(305945005)(68736007)(386003)(4326008)(102836004)(476003)(36756003)(76176011)(6486002)(54906003)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0401MB2366; H:VI1PR0401MB2541.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-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: sDecqblEzfo15QvknpcHOVEpmYwD6+lu7Mme8YyF/+bUmXidgLkXGAjiMdKUne9DRFnExiHeKo98Ccpqs7K4pIK8bTPquhxjrDRXvBePdxKKF7/39pMX4A69sgnfgSLKK89wkhstAg3OZWqaeofHOWNai53Zy3z3J2kO54VIp+6MwxVLy6du/qfoOjD4PYoBIPCciTlEDy445WRVlkJKhnHGHKLZaDvFZZ+B7pUV6MiCHxRu17ewKINo2u5E89VmFkgC9FIEv+KdnsSqH7SWl5qrpQpjy1ot5gaSQ9fgS/dsg2njA8rKRwUWkXk53XmhxHomlRYpnVkOJPD6BJGQ8IHucrKCHziYKFl1VzcqlL8NOoEw+urxtpwGIfuGh7TgYlIdskJjmHw3ipZx4gC2YAF9M2t2STgsZVAI34LjnvE= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a6df033-c453-4028-420c-08d6b1e2d232 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2019 12:01:47.0151 (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: VI1PR0401MB2366 Subject: [dpdk-dev] [PATCH 3/4] bus/dpaa: delay fman device list to bus probe X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The fman device list need to be accessed across processes. The hw device structures should be allocated with rte_calloc instead of calloc. The rte_calloc is not available at the time of bus scan, so better prepare the device list at probe. Signed-off-by: Hemant Agrawal --- drivers/bus/dpaa/base/fman/fman.c | 11 +-- drivers/bus/dpaa/base/fman/netcfg_layer.c | 6 +- drivers/bus/dpaa/dpaa_bus.c | 83 +++++++++++++---------- drivers/bus/dpaa/rte_dpaa_bus.h | 1 + drivers/net/dpaa/dpaa_ethdev.c | 2 +- 5 files changed, 60 insertions(+), 43 deletions(-) diff --git a/drivers/bus/dpaa/base/fman/fman.c b/drivers/bus/dpaa/base/fman/fman.c index 06762e0f4..8fa9b8cae 100644 --- a/drivers/bus/dpaa/base/fman/fman.c +++ b/drivers/bus/dpaa/base/fman/fman.c @@ -12,6 +12,7 @@ /* This header declares the driver interface we implement */ #include #include +#include #include #include @@ -177,7 +178,7 @@ fman_if_init(const struct device_node *dpa_node) mprop = "fsl,fman-mac"; /* Allocate an object for this network interface */ - __if = malloc(sizeof(*__if)); + __if = rte_malloc(NULL, sizeof(*__if), RTE_CACHE_LINE_SIZE); if (!__if) { FMAN_ERR(-ENOMEM, "malloc(%zu)\n", sizeof(*__if)); goto err; @@ -433,7 +434,7 @@ fman_if_init(const struct device_node *dpa_node) uint64_t bpool_host[6] = {0}; const char *pname; /* Allocate an object for the pool */ - bpool = malloc(sizeof(*bpool)); + bpool = rte_malloc(NULL, sizeof(*bpool), RTE_CACHE_LINE_SIZE); if (!bpool) { FMAN_ERR(-ENOMEM, "malloc(%zu)\n", sizeof(*bpool)); goto err; @@ -443,7 +444,7 @@ fman_if_init(const struct device_node *dpa_node) if (!pool_node) { FMAN_ERR(-ENXIO, "%s: bad fsl,bman-buffer-pools\n", dname); - free(bpool); + rte_free(bpool); goto err; } pname = pool_node->full_name; @@ -451,7 +452,7 @@ fman_if_init(const struct device_node *dpa_node) prop = of_get_property(pool_node, "fsl,bpid", &proplen); if (!prop) { FMAN_ERR(-EINVAL, "%s: no fsl,bpid\n", pname); - free(bpool); + rte_free(bpool); goto err; } assert(proplen == sizeof(*prop)); @@ -574,7 +575,7 @@ fman_finish(void) -errno, strerror(errno)); printf("Tearing down %s\n", __if->node_path); list_del(&__if->__if.node); - free(__if); + rte_free(__if); } close(fman_ccsr_map_fd); diff --git a/drivers/bus/dpaa/base/fman/netcfg_layer.c b/drivers/bus/dpaa/base/fman/netcfg_layer.c index 6b5224203..bf8c77265 100644 --- a/drivers/bus/dpaa/base/fman/netcfg_layer.c +++ b/drivers/bus/dpaa/base/fman/netcfg_layer.c @@ -114,7 +114,7 @@ netcfg_acquire(void) size = sizeof(*netcfg) + (num_ports * sizeof(struct fm_eth_port_cfg)); - netcfg = calloc(1, size); + netcfg = rte_calloc(NULL, 1, size, 0); if (unlikely(netcfg == NULL)) { DPAA_BUS_LOG(ERR, "Unable to allocat mem for netcfg"); goto error; @@ -141,7 +141,7 @@ netcfg_acquire(void) error: if (netcfg) { - free(netcfg); + rte_free(netcfg); netcfg = NULL; } @@ -151,7 +151,7 @@ netcfg_acquire(void) void netcfg_release(struct netcfg_info *cfg_ptr) { - free(cfg_ptr); + rte_free(cfg_ptr); /* Close socket for shared interfaces */ if (skfd >= 0) { close(skfd); diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index c7da96f8d..ac20eccd5 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -442,40 +442,8 @@ rte_dpaa_bus_scan(void) RTE_LOG(DEBUG, EAL, "DPAA Bus not present. Skipping.\n"); return 0; } - - /* Load the device-tree driver */ - ret = of_init(); - if (ret) { - DPAA_BUS_LOG(ERR, "of_init failed with ret: %d", ret); - return -1; - } - - /* Get the interface configurations from device-tree */ - dpaa_netcfg = netcfg_acquire(); - if (!dpaa_netcfg) { - DPAA_BUS_LOG(ERR, "netcfg_acquire failed"); - return -EINVAL; - } - - RTE_LOG(NOTICE, EAL, "DPAA Bus Detected\n"); - - if (!dpaa_netcfg->num_ethports) { - DPAA_BUS_LOG(INFO, "no network interfaces available"); - /* This is not an error */ - return 0; - } - -#ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER - dump_netcfg(dpaa_netcfg); -#endif - - DPAA_BUS_LOG(DEBUG, "Number of ethernet devices = %d", - dpaa_netcfg->num_ethports); - ret = dpaa_create_device_list(); - if (ret) { - DPAA_BUS_LOG(ERR, "Unable to create device list. (%d)", ret); - return ret; - } + /* detected DPAA devices */ + rte_dpaa_bus.detected = 1; /* create the key, supplying a function that'll be invoked * when a portal affined thread will be deleted. @@ -533,6 +501,47 @@ rte_dpaa_device_match(struct rte_dpaa_driver *drv, return -1; } +static int +rte_dpaa_bus_dev_build(void) +{ + int ret; + + /* Load the device-tree driver */ + ret = of_init(); + if (ret) { + DPAA_BUS_LOG(ERR, "of_init failed with ret: %d", ret); + return -1; + } + + /* Get the interface configurations from device-tree */ + dpaa_netcfg = netcfg_acquire(); + if (!dpaa_netcfg) { + DPAA_BUS_LOG(ERR, "netcfg_acquire failed"); + return -EINVAL; + } + + RTE_LOG(NOTICE, EAL, "DPAA Bus Detected\n"); + + if (!dpaa_netcfg->num_ethports) { + DPAA_BUS_LOG(INFO, "no network interfaces available"); + /* This is not an error */ + return 0; + } + +#ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER + dump_netcfg(dpaa_netcfg); +#endif + + DPAA_BUS_LOG(DEBUG, "Number of ethernet devices = %d", + dpaa_netcfg->num_ethports); + ret = dpaa_create_device_list(); + if (ret) { + DPAA_BUS_LOG(ERR, "Unable to create device list. (%d)", ret); + return ret; + } + return 0; +} + static int rte_dpaa_bus_probe(void) { @@ -544,6 +553,12 @@ rte_dpaa_bus_probe(void) int probe_all = rte_dpaa_bus.bus.conf.scan_mode != RTE_BUS_SCAN_WHITELIST; /* If DPAA bus is not present nothing needs to be done */ + if (!rte_dpaa_bus.detected) + return 0; + + rte_dpaa_bus_dev_build(); + + /* If no device present on DPAA bus nothing needs to be done */ if (TAILQ_EMPTY(&rte_dpaa_bus.device_list)) return 0; diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h index 1d580a000..72fbbfce7 100644 --- a/drivers/bus/dpaa/rte_dpaa_bus.h +++ b/drivers/bus/dpaa/rte_dpaa_bus.h @@ -54,6 +54,7 @@ struct rte_dpaa_bus { struct rte_dpaa_device_list device_list; struct rte_dpaa_driver_list driver_list; int device_count; + int detected; }; struct dpaa_device_id { diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index d124169c5..b1fac8fa7 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -1354,7 +1354,7 @@ dpaa_dev_init(struct rte_eth_dev *eth_dev) /* reset bpool list, initialize bpool dynamically */ list_for_each_entry_safe(bp, tmp_bp, &cfg->fman_if->bpool_list, node) { list_del(&bp->node); - free(bp); + rte_free(bp); } /* Populate ethdev structure */ From patchwork Tue Mar 26 12:01:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 51703 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E072D4C93; Tue, 26 Mar 2019 13:01:55 +0100 (CET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20059.outbound.protection.outlook.com [40.107.2.59]) by dpdk.org (Postfix) with ESMTP id 438953256 for ; Tue, 26 Mar 2019 13:01:49 +0100 (CET) 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=6KRgdSpIW8YLDlUwoKFRYNL56NpRXAxATyRpp6QE59I=; b=xp+zflx0ZQs41xExzxw1CRFrvYEHEqxxlnRoNS8lMky5riX7mbI1APcXPUmXghcv2slI7TSEZ3cwMibm8cXcK6K0awOZjGmTLjDBkKbv43ut4NOTvaJEITrErUs+1kqHlPNqUZ+lC2KXBMZHQysEYcYZwgQ3qIjS6rUecfDmIr0= Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com (10.168.65.19) by VI1PR0401MB2366.eurprd04.prod.outlook.com (10.169.134.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Tue, 26 Mar 2019 12:01:48 +0000 Received: from VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18]) by VI1PR0401MB2541.eurprd04.prod.outlook.com ([fe80::18e3:39b6:c61d:3f18%12]) with mapi id 15.20.1730.019; Tue, 26 Mar 2019 12:01:48 +0000 From: Hemant Agrawal To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Shreyansh Jain Thread-Topic: [PATCH 4/4] net/dpaa2: add support for flow table flush Thread-Index: AQHU48uwXrMaD1l0YkmMu3NuayfAOQ== Date: Tue, 26 Mar 2019 12:01:48 +0000 Message-ID: <20190326115952.26278-4-hemant.agrawal@nxp.com> References: <20190326115952.26278-1-hemant.agrawal@nxp.com> In-Reply-To: <20190326115952.26278-1-hemant.agrawal@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [92.120.1.72] x-mailer: git-send-email 2.17.1 x-clientproxiedby: BM1PR01CA0157.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::27) To VI1PR0401MB2541.eurprd04.prod.outlook.com (2603:10a6:800:56::19) authentication-results: spf=none (sender IP is ) smtp.mailfrom=hemant.agrawal@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f5192a29-8185-4d52-d23e-08d6b1e2d2f4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR0401MB2366; x-ms-traffictypediagnostic: VI1PR0401MB2366: x-microsoft-antispam-prvs: x-forefront-prvs: 09888BC01D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(366004)(136003)(346002)(39860400002)(376002)(199004)(189003)(71190400001)(86362001)(256004)(44832011)(6916009)(26005)(5660300002)(81156014)(2351001)(2501003)(1076003)(66066001)(2906002)(6116002)(3846002)(14454004)(486006)(6506007)(1730700003)(71200400001)(316002)(14444005)(105586002)(478600001)(97736004)(8676002)(186003)(6512007)(7736002)(106356001)(8936002)(52116002)(81166006)(25786009)(50226002)(99286004)(6436002)(5640700003)(11346002)(446003)(2616005)(305945005)(68736007)(386003)(4326008)(102836004)(476003)(36756003)(76176011)(6486002)(54906003)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0401MB2366; H:VI1PR0401MB2541.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-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Pb0a91j6S5yahKk74omLXyAgFxgNSUKQjuAeu/6dizPOgMH0uJnmEmE5niCBI4ql2PjdnofDP8Ex8IZiBny+mJ0ltLHj+d4uKfDngZ2zEUGAy/JWu8oEP9Tc2LuSF1CB1gGZKJwrVTj/zeeSnhViCTETsNjpnupFv2s/2M+i2Cu7TdQYeWeyZEsSlxiGn4ML2W8OB+vAcwOpz5ad293Sd3kCEB1/TnMUIkXuZo9T6QWFzirFOo3knyJrWRIw2VBDvkaXIuSMNlAMh0hNABOfdTWYt7MHBx05AWLJPmJC/JBkYMQPSZVjf58Y0BdcbY3S683uQxsxscgAjlOMoY8NSmQj7+6WMiabK+CMAx2f2jJkuU4p/DpEXLzsSaNR3Y6c4lRa9sPW0A199vPY4U6UDSLypkYg+KDJNyODBUwyygE= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5192a29-8185-4d52-d23e-08d6b1e2d2f4 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2019 12:01:48.2361 (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: VI1PR0401MB2366 Subject: [dpdk-dev] [PATCH 4/4] net/dpaa2: add support for flow table flush X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Hemant Agrawal --- drivers/net/dpaa2/dpaa2_ethdev.c | 2 + drivers/net/dpaa2/dpaa2_ethdev.h | 2 + drivers/net/dpaa2/dpaa2_flow.c | 118 +++++++++++++++++++++---------- 3 files changed, 85 insertions(+), 37 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index c92edecf3..3fbc82977 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -971,6 +971,8 @@ dpaa2_dev_close(struct rte_eth_dev *dev) PMD_INIT_FUNC_TRACE(); + dpaa2_flow_clean(dev); + /* Clean the device first */ ret = dpni_reset(dpni, CMD_PRI_LOW, priv->token); if (ret) { diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h index 0ef1bf368..33b1506aa 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.h +++ b/drivers/net/dpaa2/dpaa2_ethdev.h @@ -126,6 +126,7 @@ struct dpaa2_dev_priv { uint64_t qos_extract_param; uint64_t fs_extract_param[MAX_TCS]; } extract; + LIST_HEAD(, rte_flow) flows; /**< Configured flow rule handles. */ }; int dpaa2_distset_to_dpkg_profile_cfg(uint64_t req_dist_set, @@ -172,5 +173,6 @@ uint16_t dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); uint16_t dummy_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts); void dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci); +void dpaa2_flow_clean(struct rte_eth_dev *dev); #endif /* _DPAA2_ETHDEV_H */ diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c index 20de3da53..c94c7ef6b 100644 --- a/drivers/net/dpaa2/dpaa2_flow.c +++ b/drivers/net/dpaa2/dpaa2_flow.c @@ -24,6 +24,7 @@ #include struct rte_flow { + LIST_ENTRY(rte_flow) next; /**< Pointer to the next flow structure. */ struct dpni_rule_cfg rule; uint8_t key_size; uint8_t tc_id; @@ -1347,6 +1348,7 @@ dpaa2_generic_flow_set(struct rte_flow *flow, struct dpaa2_dev_priv *priv = dev->data->dev_private; struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; size_t param; + struct rte_flow *curr = LIST_FIRST(&priv->flows); /* Parse pattern list to get the matching parameters */ while (!end_of_list) { @@ -1625,6 +1627,16 @@ dpaa2_generic_flow_set(struct rte_flow *flow, j++; } + if (!ret) { + /* New rules are inserted. */ + if (!curr) { + LIST_INSERT_HEAD(&priv->flows, flow, next); + } else { + while (LIST_NEXT(curr, next)) + curr = LIST_NEXT(curr, next); + LIST_INSERT_AFTER(curr, flow, next); + } + } return ret; } @@ -1764,7 +1776,7 @@ int dpaa2_flow_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *flow_attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], - struct rte_flow_error *error __rte_unused) + struct rte_flow_error *error) { struct dpaa2_dev_priv *priv = dev->data->dev_private; struct dpni_attr dpni_attr; @@ -1778,6 +1790,9 @@ int dpaa2_flow_validate(struct rte_eth_dev *dev, DPAA2_PMD_ERR( "Failure to get dpni@%p attribute, err code %d\n", dpni, ret); + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_ATTR, + flow_attr, "invalid"); return ret; } @@ -1786,6 +1801,9 @@ int dpaa2_flow_validate(struct rte_eth_dev *dev, if (ret < 0) { DPAA2_PMD_ERR( "Invalid attributes are given\n"); + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_ATTR, + flow_attr, "invalid"); goto not_valid_params; } /* Verify input pattern list */ @@ -1793,6 +1811,9 @@ int dpaa2_flow_validate(struct rte_eth_dev *dev, if (ret < 0) { DPAA2_PMD_ERR( "Invalid pattern list is given\n"); + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_ITEM, + pattern, "invalid"); goto not_valid_params; } /* Verify input action list */ @@ -1800,6 +1821,9 @@ int dpaa2_flow_validate(struct rte_eth_dev *dev, if (ret < 0) { DPAA2_PMD_ERR( "Invalid action list is given\n"); + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_ACTION, + actions, "invalid"); goto not_valid_params; } not_valid_params: @@ -1820,20 +1844,20 @@ struct rte_flow *dpaa2_flow_create(struct rte_eth_dev *dev, flow = rte_malloc(NULL, sizeof(struct rte_flow), RTE_CACHE_LINE_SIZE); if (!flow) { DPAA2_PMD_ERR("Failure to allocate memory for flow"); - return NULL; + goto mem_failure; } /* Allocate DMA'ble memory to write the rules */ key_iova = (size_t)rte_malloc(NULL, 256, 64); if (!key_iova) { DPAA2_PMD_ERR( "Memory allocation failure for rule configration\n"); - goto creation_error; + goto mem_failure; } mask_iova = (size_t)rte_malloc(NULL, 256, 64); if (!mask_iova) { DPAA2_PMD_ERR( "Memory allocation failure for rule configration\n"); - goto creation_error; + goto mem_failure; } flow->rule.key_iova = key_iova; @@ -1845,6 +1869,10 @@ struct rte_flow *dpaa2_flow_create(struct rte_eth_dev *dev, ret = dpaa2_generic_flow_set(flow, dev, attr, pattern, actions, error); if (ret < 0) { + if (error->type > RTE_FLOW_ERROR_TYPE_ACTION) + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + attr, "unknown"); DPAA2_PMD_ERR( "Failure to create flow, return code (%d)", ret); goto creation_error; @@ -1857,21 +1885,22 @@ struct rte_flow *dpaa2_flow_create(struct rte_eth_dev *dev, } return flow; - +mem_failure: + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "memory alloc"); creation_error: - if (flow) - rte_free((void *)flow); - if (key_iova) - rte_free((void *)key_iova); - if (mask_iova) - rte_free((void *)mask_iova); + rte_free((void *)flow); + rte_free((void *)key_iova); + rte_free((void *)mask_iova); + return NULL; } static int dpaa2_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, - struct rte_flow_error *error __rte_unused) + struct rte_flow_error *error) { int ret = 0; struct dpaa2_dev_priv *priv = dev->data->dev_private; @@ -1913,44 +1942,40 @@ int dpaa2_flow_destroy(struct rte_eth_dev *dev, break; } + LIST_REMOVE(flow, next); /* Now free the flow */ rte_free(flow); error: + if (ret) + rte_flow_error_set(error, EPERM, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, "unknown"); return ret; } +/** + * Destroy user-configured flow rules. + * + * This function skips internal flows rules. + * + * @see rte_flow_flush() + * @see rte_flow_ops + */ static int dpaa2_flow_flush(struct rte_eth_dev *dev, - struct rte_flow_error *error __rte_unused) + struct rte_flow_error *error) { - int ret = 0, tc_id; - struct dpni_rx_tc_dist_cfg tc_cfg; - struct dpni_qos_tbl_cfg qos_cfg; struct dpaa2_dev_priv *priv = dev->data->dev_private; - struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; + struct rte_flow *flow = LIST_FIRST(&priv->flows); - /* Reset QoS table */ - qos_cfg.default_tc = 0; - qos_cfg.discard_on_miss = false; - qos_cfg.keep_entries = false; - qos_cfg.key_cfg_iova = priv->extract.qos_extract_param; - ret = dpni_set_qos_table(dpni, CMD_PRI_LOW, priv->token, &qos_cfg); - if (ret < 0) - DPAA2_PMD_ERR( - "QoS table is not reset to default: %d\n", ret); - - for (tc_id = 0; tc_id < priv->num_rx_tc; tc_id++) { - /* Reset FS table */ - memset(&tc_cfg, 0, sizeof(struct dpni_rx_tc_dist_cfg)); - ret = dpni_set_rx_tc_dist(dpni, CMD_PRI_LOW, priv->token, - tc_id, &tc_cfg); - if (ret < 0) - DPAA2_PMD_ERR( - "Error (%d) in flushing entries for TC (%d)", - ret, tc_id); + while (flow) { + struct rte_flow *next = LIST_NEXT(flow, next); + + dpaa2_flow_destroy(dev, flow, error); + flow = next; } - return ret; + return 0; } static int @@ -1963,6 +1988,25 @@ dpaa2_flow_query(struct rte_eth_dev *dev __rte_unused, return 0; } +/** + * Clean up all flow rules. + * + * Unlike dpaa2_flow_flush(), this function takes care of all remaining flow + * rules regardless of whether they are internal or user-configured. + * + * @param priv + * Pointer to private structure. + */ +void +dpaa2_flow_clean(struct rte_eth_dev *dev) +{ + struct rte_flow *flow; + struct dpaa2_dev_priv *priv = dev->data->dev_private; + + while ((flow = LIST_FIRST(&priv->flows))) + dpaa2_flow_destroy(dev, flow, NULL); +} + const struct rte_flow_ops dpaa2_flow_ops = { .create = dpaa2_flow_create, .validate = dpaa2_flow_validate,