From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id DB8D48DAF for ; Tue, 20 Sep 2016 16:42:36 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP; 20 Sep 2016 07:42:35 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.30,368,1470726000"; d="scan'208";a="1043235196" Received: from gklab-246-021.igk.intel.com (HELO HANLANCREEK9755-232) ([10.217.246.21]) by fmsmga001.fm.intel.com with SMTP; 20 Sep 2016 07:42:33 -0700 Received: by HANLANCREEK9755-232 (sSMTP sendmail emulation); Tue, 20 Sep 2016 16:38:33 +0200 From: Marcin Kerlin To: dev@dpdk.org Cc: thomas.monjalon@6wind.com, pablo.de.lara.guarch@intel.com, Marcin Kerlin Date: Tue, 20 Sep 2016 16:31:35 +0200 Message-Id: <1474381895-16066-3-git-send-email-marcinx.kerlin@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1474381895-16066-1-git-send-email-marcinx.kerlin@intel.com> References: <1472806710-25866-2-git-send-email-marcinx.kerlin@intel.com> <1474381895-16066-1-git-send-email-marcinx.kerlin@intel.com> Subject: [dpdk-dev] [PATCH v2 2/2] app/testpmd: improve handling of multiprocess X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Sep 2016 14:42:37 -0000 Added lookup for pool name because secondary process should attach to mempool created by primary process rather than create new one. Added function free_shared_dev_data() used at the exit of the testpmd. This causes detach devices data from array rte_eth_dev_data[] shared between all processes. This allows to have a up-to-date list of devices data and run again secondary application with the same name. Signed-off-by: Marcin Kerlin --- app/test-pmd/testpmd.c | 36 ++++++++++++++++++++++++++++++++++-- app/test-pmd/testpmd.h | 1 + 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 30749a4..51f6aee 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -452,8 +452,10 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf, rte_mempool_obj_iter(rte_mp, rte_pktmbuf_init, NULL); } else { /* wrapper to rte_mempool_create() */ - rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf, - mb_mempool_cache, 0, mbuf_seg_size, socket_id); + rte_mp = rte_mempool_lookup(pool_name); + if (rte_mp == NULL) + rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf, + mb_mempool_cache, 0, mbuf_seg_size, socket_id); } } @@ -1609,6 +1611,35 @@ detach_port(uint8_t port_id) return; } +void free_shared_dev_data(portid_t pid) +{ + portid_t pi; + + if (port_id_is_invalid(pid, ENABLED_WARN)) + return; + + /* free data only if the secondary process exits */ + if (rte_eal_process_type() != RTE_PROC_SECONDARY) + return; + + printf("Cleaning device data...\n"); + + FOREACH_PORT(pi, ports) + { + if (pid != pi && pid != (portid_t) RTE_PORT_ALL) + continue; + + if (!port_is_closed(pi)) { + printf("Port %d is not closed now\n", pi); + continue; + } + + if (rte_eth_dev_release_dev_data(pi) < 0) + return; + } + printf("Done\n"); +} + void pmd_test_exit(void) { @@ -1624,6 +1655,7 @@ pmd_test_exit(void) fflush(stdout); stop_port(pt_id); close_port(pt_id); + free_shared_dev_data(pt_id); } } printf("\nBye...\n"); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 2b281cc..3915a06 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -553,6 +553,7 @@ void attach_port(char *identifier); void detach_port(uint8_t port_id); int all_ports_stopped(void); int port_is_started(portid_t port_id); +void free_shared_dev_data(portid_t pid); void pmd_test_exit(void); void fdir_get_infos(portid_t port_id); void fdir_set_flex_mask(portid_t port_id, -- 1.9.1