From patchwork Thu Sep 26 10:05:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavan Nikhilesh Bhagavatula X-Patchwork-Id: 59846 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 9DCC41BF92; Thu, 26 Sep 2019 12:06:39 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id E9B3E1BF8B for ; Thu, 26 Sep 2019 12:06:35 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x8QA4fID032589; Thu, 26 Sep 2019 03:06:35 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0818; bh=NnQm9UZspBVapoLuHUB5f9rhUSQOMhoJWA15bsZaxls=; b=mwepzvKncov7FPGxhSFImhD5h2rz9O4aGfrkmQd6heuB5Itb/bFlnfPg1oIqTEGcAEuy eQoE9ZrcOlx7+4We1KSaRjcuXnWQ0ewOOendicl7KsUw4LqnAtfoOcdr1FQ0d1tr5uSX dimv4e+96gwUjJrYRBmzrVo0nd4kbusWAJPsVRYULafNz6gtU1B6RpNXg4k+RUBMz8jl zUF2C89NSlvk1wQ+SZEtJO+ivjgZhTFo2leD4v69iVonym7uPbn7nhZTKTA1slD+vC8I Bv3tWwe0hp1jHTD+iGgGQugvpTwfVlBFV9KCdwrOa6jMqCeRFdC7TM3Gye+H2Iy6YQP+ 9w== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0b-0016f401.pphosted.com with ESMTP id 2v8u5dr1b5-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 26 Sep 2019 03:06:35 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Thu, 26 Sep 2019 03:06:25 -0700 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Thu, 26 Sep 2019 03:06:25 -0700 Received: from BG-LT7430.marvell.com (unknown [10.28.17.15]) by maili.marvell.com (Postfix) with ESMTP id F2AA33F7040; Thu, 26 Sep 2019 03:06:21 -0700 (PDT) From: To: , , Marko Kovacevic , Ori Kam , Bruce Richardson , Radu Nicolau , "Tomasz Kantecki" CC: , Pavan Nikhilesh , "Sunil Kumar Kori" Date: Thu, 26 Sep 2019 15:35:53 +0530 Message-ID: <20190926100558.24348-7-pbhagavatula@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190926100558.24348-1-pbhagavatula@marvell.com> References: <20190926100558.24348-1-pbhagavatula@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,1.0.8 definitions=2019-09-26_04:2019-09-25,2019-09-26 signatures=0 Subject: [dpdk-dev] [PATCH 06/11] examples/l3fwd: add event eth Rx/Tx adapter setup 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: Pavan Nikhilesh Add event eth Rx/Tx adapter setup for both generic and internal port event device pipelines. Signed-off-by: Sunil Kumar Kori Signed-off-by: Pavan Nikhilesh --- examples/l3fwd/l3fwd_eventdev.c | 3 + examples/l3fwd/l3fwd_eventdev.h | 13 +++ examples/l3fwd/l3fwd_eventdev_generic.c | 99 +++++++++++++++++++ examples/l3fwd/l3fwd_eventdev_internal_port.c | 80 +++++++++++++++ 4 files changed, 195 insertions(+) diff --git a/examples/l3fwd/l3fwd_eventdev.c b/examples/l3fwd/l3fwd_eventdev.c index f5ac3ccce..031705b68 100644 --- a/examples/l3fwd/l3fwd_eventdev.c +++ b/examples/l3fwd/l3fwd_eventdev.c @@ -327,4 +327,7 @@ l3fwd_eventdev_resource_setup(struct rte_eth_conf *port_conf) /* Event port configuration */ evdev_rsrc->ops.event_port_setup(); + + /* Rx/Tx adapters configuration */ + evdev_rsrc->ops.adapter_setup(ethdev_count); } diff --git a/examples/l3fwd/l3fwd_eventdev.h b/examples/l3fwd/l3fwd_eventdev.h index 2640d6cec..127bb7f42 100644 --- a/examples/l3fwd/l3fwd_eventdev.h +++ b/examples/l3fwd/l3fwd_eventdev.h @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -40,6 +41,16 @@ struct l3fwd_eventdev_ports { rte_spinlock_t lock; }; +struct l3fwd_eventdev_rx_adptr { + uint8_t nb_rx_adptr; + uint8_t *rx_adptr; +}; + +struct l3fwd_eventdev_tx_adptr { + uint8_t nb_tx_adptr; + uint8_t *tx_adptr; +}; + struct l3fwd_eventdev_setup_ops { event_queue_setup_cb event_queue_setup; event_port_setup_cb event_port_setup; @@ -50,6 +61,8 @@ struct l3fwd_eventdev_setup_ops { struct l3fwd_eventdev_resources { struct rte_event_port_conf def_p_conf; + struct l3fwd_eventdev_rx_adptr rx_adptr; + struct l3fwd_eventdev_tx_adptr tx_adptr; uint8_t disable_implicit_release; struct l3fwd_eventdev_setup_ops ops; struct rte_mempool * (*pkt_pool)[NB_SOCKETS]; diff --git a/examples/l3fwd/l3fwd_eventdev_generic.c b/examples/l3fwd/l3fwd_eventdev_generic.c index 4aec0e403..659a152b6 100644 --- a/examples/l3fwd/l3fwd_eventdev_generic.c +++ b/examples/l3fwd/l3fwd_eventdev_generic.c @@ -115,9 +115,108 @@ l3fwd_event_queue_setup_generic(uint16_t ethdev_count, evdev_rsrc->evq.event_q_id[event_q_id] = event_q_id; } +static void +l3fwd_rx_tx_adapter_setup_generic(uint16_t ethdev_count) +{ + struct l3fwd_eventdev_resources *evdev_rsrc = l3fwd_get_eventdev_rsrc(); + struct rte_event_eth_rx_adapter_queue_conf eth_q_conf = { + .rx_queue_flags = 0, + .ev = { + .queue_id = 0, + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + } + }; + uint8_t event_d_id = evdev_rsrc->event_d_id; + uint8_t rx_adptr_id = 0; + uint8_t tx_adptr_id = 0; + uint8_t tx_port_id = 0; + int32_t ret, i; + + /* Rx adapter setup */ + evdev_rsrc->rx_adptr.nb_rx_adptr = 1; + evdev_rsrc->rx_adptr.rx_adptr = (uint8_t *)malloc(sizeof(uint8_t) * + evdev_rsrc->rx_adptr.nb_rx_adptr); + if (!evdev_rsrc->rx_adptr.rx_adptr) { + free(evdev_rsrc->evp.event_p_id); + free(evdev_rsrc->evq.event_q_id); + rte_exit(EXIT_FAILURE, + "failed to allocate memery for Rx adapter"); + } + + ret = rte_event_eth_rx_adapter_create(rx_adptr_id, event_d_id, + &evdev_rsrc->def_p_conf); + if (ret) + rte_exit(EXIT_FAILURE, "failed to create rx adapter"); + + eth_q_conf.ev.sched_type = evdev_rsrc->sync_mode; + for (i = 0; i < ethdev_count; i++) { + /* Configure user requested sync mode */ + eth_q_conf.ev.queue_id = evdev_rsrc->evq.event_q_id[i]; + ret = rte_event_eth_rx_adapter_queue_add(rx_adptr_id, i, -1, + ð_q_conf); + if (ret) + rte_exit(EXIT_FAILURE, + "Failed to add queues to Rx adapter"); + } + + ret = rte_event_eth_rx_adapter_start(rx_adptr_id); + if (ret) + rte_exit(EXIT_FAILURE, "Rx adapter[%d] start failed", + rx_adptr_id); + + evdev_rsrc->rx_adptr.rx_adptr[0] = rx_adptr_id; + + /* Tx adapter setup */ + evdev_rsrc->tx_adptr.nb_tx_adptr = 1; + evdev_rsrc->tx_adptr.tx_adptr = (uint8_t *)malloc(sizeof(uint8_t) * + evdev_rsrc->tx_adptr.nb_tx_adptr); + if (!evdev_rsrc->tx_adptr.tx_adptr) { + free(evdev_rsrc->rx_adptr.rx_adptr); + free(evdev_rsrc->evp.event_p_id); + free(evdev_rsrc->evq.event_q_id); + rte_exit(EXIT_FAILURE, + "failed to allocate memery for Rx adapter"); + } + + ret = rte_event_eth_tx_adapter_create(tx_adptr_id, event_d_id, + &evdev_rsrc->def_p_conf); + if (ret) + rte_exit(EXIT_FAILURE, "failed to create tx adapter[%d]", + tx_adptr_id); + + for (i = 0; i < ethdev_count; i++) { + ret = rte_event_eth_tx_adapter_queue_add(tx_adptr_id, i, -1); + if (ret) + rte_exit(EXIT_FAILURE, + "failed to add queues to Tx adapter"); + } + + ret = rte_event_eth_tx_adapter_event_port_get(tx_adptr_id, &tx_port_id); + if (ret) + rte_exit(EXIT_FAILURE, + "Failed to get Tx adapter port id: %d\n", ret); + + ret = rte_event_port_link(event_d_id, tx_port_id, + &evdev_rsrc->evq.event_q_id[ + evdev_rsrc->evq.nb_queues - 1], + NULL, 1); + if (ret != 1) + rte_exit(EXIT_FAILURE, + "Unable to link Tx adapter port to Tx queue:err = %d", + ret); + + ret = rte_event_eth_tx_adapter_start(tx_adptr_id); + if (ret) + rte_exit(EXIT_FAILURE, "Tx adapter[%d] start failed", + tx_adptr_id); + + evdev_rsrc->tx_adptr.tx_adptr[0] = tx_adptr_id; +} + void l3fwd_eventdev_set_generic_ops(struct l3fwd_eventdev_setup_ops *ops) { ops->event_queue_setup = l3fwd_event_queue_setup_generic; ops->event_port_setup = l3fwd_event_port_setup_generic; + ops->adapter_setup = l3fwd_rx_tx_adapter_setup_generic; } diff --git a/examples/l3fwd/l3fwd_eventdev_internal_port.c b/examples/l3fwd/l3fwd_eventdev_internal_port.c index 363e37899..811c99983 100644 --- a/examples/l3fwd/l3fwd_eventdev_internal_port.c +++ b/examples/l3fwd/l3fwd_eventdev_internal_port.c @@ -109,9 +109,89 @@ l3fwd_event_queue_setup_internal_port(uint16_t ethdev_count, } } +static void +l3fwd_rx_tx_adapter_setup_internal_port(uint16_t ethdev_count) +{ + struct l3fwd_eventdev_resources *evdev_rsrc = l3fwd_get_eventdev_rsrc(); + struct rte_event_eth_rx_adapter_queue_conf eth_q_conf = { + .rx_queue_flags = 0, + .ev = { + .queue_id = 0, + .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, + } + }; + uint8_t event_d_id = evdev_rsrc->event_d_id; + int32_t ret, i; + + evdev_rsrc->rx_adptr.nb_rx_adptr = ethdev_count; + evdev_rsrc->rx_adptr.rx_adptr = (uint8_t *)malloc(sizeof(uint8_t) * + evdev_rsrc->rx_adptr.nb_rx_adptr); + if (!evdev_rsrc->rx_adptr.rx_adptr) { + free(evdev_rsrc->evp.event_p_id); + free(evdev_rsrc->evq.event_q_id); + rte_exit(EXIT_FAILURE, + "failed to allocate memery for Rx adapter"); + } + + for (i = 0; i < ethdev_count; i++) { + ret = rte_event_eth_rx_adapter_create(i, event_d_id, + &evdev_rsrc->def_p_conf); + if (ret) + rte_exit(EXIT_FAILURE, + "failed to create rx adapter[%d]", i); + + /* Configure user requested sync mode */ + eth_q_conf.ev.queue_id = evdev_rsrc->evq.event_q_id[i]; + eth_q_conf.ev.sched_type = evdev_rsrc->sync_mode; + ret = rte_event_eth_rx_adapter_queue_add(i, i, -1, ð_q_conf); + if (ret) + rte_exit(EXIT_FAILURE, + "Failed to add queues to Rx adapter"); + + ret = rte_event_eth_rx_adapter_start(i); + if (ret) + rte_exit(EXIT_FAILURE, + "Rx adapter[%d] start failed", i); + + evdev_rsrc->rx_adptr.rx_adptr[i] = i; + } + + evdev_rsrc->tx_adptr.nb_tx_adptr = ethdev_count; + evdev_rsrc->tx_adptr.tx_adptr = (uint8_t *)malloc(sizeof(uint8_t) * + evdev_rsrc->tx_adptr.nb_tx_adptr); + if (!evdev_rsrc->tx_adptr.tx_adptr) { + free(evdev_rsrc->rx_adptr.rx_adptr); + free(evdev_rsrc->evp.event_p_id); + free(evdev_rsrc->evq.event_q_id); + rte_exit(EXIT_FAILURE, + "failed to allocate memery for Rx adapter"); + } + + for (i = 0; i < ethdev_count; i++) { + ret = rte_event_eth_tx_adapter_create(i, event_d_id, + &evdev_rsrc->def_p_conf); + if (ret) + rte_exit(EXIT_FAILURE, + "failed to create tx adapter[%d]", i); + + ret = rte_event_eth_tx_adapter_queue_add(i, i, -1); + if (ret) + rte_exit(EXIT_FAILURE, + "failed to add queues to Tx adapter"); + + ret = rte_event_eth_tx_adapter_start(i); + if (ret) + rte_exit(EXIT_FAILURE, + "Tx adapter[%d] start failed", i); + + evdev_rsrc->tx_adptr.tx_adptr[i] = i; + } +} + void l3fwd_eventdev_set_internal_port_ops(struct l3fwd_eventdev_setup_ops *ops) { ops->event_queue_setup = l3fwd_event_queue_setup_internal_port; ops->event_port_setup = l3fwd_event_port_setup_internal_port; + ops->adapter_setup = l3fwd_rx_tx_adapter_setup_internal_port; }