From patchwork Fri Jul 6 17:21:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jasvinder Singh X-Patchwork-Id: 42561 X-Patchwork-Delegate: cristian.dumitrescu@intel.com 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 428C01C000; Fri, 6 Jul 2018 19:22:18 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id F05ED1BF49 for ; Fri, 6 Jul 2018 19:22:05 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Jul 2018 10:22:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,317,1526367600"; d="scan'208";a="64955401" Received: from silpixa00381635.ir.intel.com (HELO silpixa00381635.ger.corp.intel.com) ([10.237.222.149]) by orsmga003.jf.intel.com with ESMTP; 06 Jul 2018 10:21:43 -0700 From: Jasvinder Singh To: dev@dpdk.org Cc: cristian.dumitrescu@intel.com Date: Fri, 6 Jul 2018 18:21:14 +0100 Message-Id: <20180706172116.50951-22-jasvinder.singh@intel.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20180706172116.50951-1-jasvinder.singh@intel.com> References: <20180705154754.147420-2-jasvinder.singh@intel.com> <20180706172116.50951-1-jasvinder.singh@intel.com> Subject: [dpdk-dev] [PATCH v5 21/23] net/softnic: start and stop function 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" Implements softnic start and stop function. Signed-off-by: Cristian Dumitrescu Signed-off-by: Jasvinder Singh --- drivers/net/softnic/rte_eth_softnic.c | 49 ++++++++++++++++++++----- drivers/net/softnic/rte_eth_softnic_internals.h | 6 +++ drivers/net/softnic/rte_eth_softnic_pipeline.c | 12 ++++++ drivers/net/softnic/rte_eth_softnic_swq.c | 16 ++++++++ 4 files changed, 73 insertions(+), 10 deletions(-) diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c index db84bd4..933f08d 100644 --- a/drivers/net/softnic/rte_eth_softnic.c +++ b/drivers/net/softnic/rte_eth_softnic.c @@ -152,6 +152,26 @@ pmd_tx_queue_setup(struct rte_eth_dev *dev, static int pmd_dev_start(struct rte_eth_dev *dev) { + struct pmd_internals *p = dev->data->dev_private; + int status; + + /* TM */ + if (tm_used(dev)) { + status = tm_start(p); + + if (status) + return status; + } + + /* Firmware */ + status = softnic_cli_script_process(p, + p->params.firmware, + conn_params_default.msg_in_len_max, + conn_params_default.msg_out_len_max); + if (status) + return status; + + /* Link UP */ dev->data->dev_link.link_status = ETH_LINK_UP; return 0; @@ -160,21 +180,30 @@ pmd_dev_start(struct rte_eth_dev *dev) static void pmd_dev_stop(struct rte_eth_dev *dev) { + struct pmd_internals *p = dev->data->dev_private; + + /* Link DOWN */ dev->data->dev_link.link_status = ETH_LINK_DOWN; + + /* Firmware */ + softnic_pipeline_disable_all(p); + softnic_pipeline_free(p); + softnic_table_action_profile_free(p); + softnic_port_in_action_profile_free(p); + softnic_tap_free(p); + softnic_tmgr_free(p); + softnic_link_free(p); + softnic_softnic_swq_free_keep_rxq_txq(p); + softnic_mempool_free(p); + + /* TM */ + tm_stop(p); } static void -pmd_dev_close(struct rte_eth_dev *dev) +pmd_dev_close(struct rte_eth_dev *dev __rte_unused) { - uint32_t i; - - /* RX queues */ - for (i = 0; i < dev->data->nb_rx_queues; i++) - rte_ring_free((struct rte_ring *)dev->data->rx_queues[i]); - - /* TX queues */ - for (i = 0; i < dev->data->nb_tx_queues; i++) - rte_ring_free((struct rte_ring *)dev->data->tx_queues[i]); + return; } static int diff --git a/drivers/net/softnic/rte_eth_softnic_internals.h b/drivers/net/softnic/rte_eth_softnic_internals.h index 63e3ab8..4738cf3 100644 --- a/drivers/net/softnic/rte_eth_softnic_internals.h +++ b/drivers/net/softnic/rte_eth_softnic_internals.h @@ -530,6 +530,9 @@ softnic_swq_init(struct pmd_internals *p); void softnic_swq_free(struct pmd_internals *p); +void +softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p); + struct softnic_swq * softnic_swq_find(struct pmd_internals *p, const char *name); @@ -659,6 +662,9 @@ softnic_pipeline_init(struct pmd_internals *p); void softnic_pipeline_free(struct pmd_internals *p); +void +softnic_pipeline_disable_all(struct pmd_internals *p); + struct pipeline * softnic_pipeline_find(struct pmd_internals *p, const char *name); diff --git a/drivers/net/softnic/rte_eth_softnic_pipeline.c b/drivers/net/softnic/rte_eth_softnic_pipeline.c index 63d4bd7..45136a4 100644 --- a/drivers/net/softnic/rte_eth_softnic_pipeline.c +++ b/drivers/net/softnic/rte_eth_softnic_pipeline.c @@ -61,6 +61,18 @@ softnic_pipeline_free(struct pmd_internals *p) } } +void +softnic_pipeline_disable_all(struct pmd_internals *p) +{ + struct pipeline *pipeline; + + TAILQ_FOREACH(pipeline, &p->pipeline_list, node) + if (pipeline->enabled) + softnic_thread_pipeline_disable(p, + pipeline->thread_id, + pipeline->name); +} + struct pipeline * softnic_pipeline_find(struct pmd_internals *p, const char *name) diff --git a/drivers/net/softnic/rte_eth_softnic_swq.c b/drivers/net/softnic/rte_eth_softnic_swq.c index c46cad9..1944fbb 100644 --- a/drivers/net/softnic/rte_eth_softnic_swq.c +++ b/drivers/net/softnic/rte_eth_softnic_swq.c @@ -33,6 +33,22 @@ softnic_swq_free(struct pmd_internals *p) } } +void +softnic_softnic_swq_free_keep_rxq_txq(struct pmd_internals *p) +{ + struct softnic_swq *swq; + + TAILQ_FOREACH(swq, &p->swq_list, node) { + if ((strncmp(swq->name, "RXQ", strlen("RXQ")) == 0) || + (strncmp(swq->name, "TXQ", strlen("TXQ")) == 0)) + continue; + + TAILQ_REMOVE(&p->swq_list, swq, node); + rte_ring_free(swq->r); + free(swq); + } +} + struct softnic_swq * softnic_swq_find(struct pmd_internals *p, const char *name)