From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 0178A5320 for ; Tue, 27 Sep 2016 13:23:43 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga105.fm.intel.com with ESMTP; 27 Sep 2016 04:23:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.30,404,1470726000"; d="scan'208";a="1062868765" Received: from gklab-246-021.igk.intel.com (HELO HANLANCREEK9755-232) ([10.217.246.21]) by fmsmga002.fm.intel.com with SMTP; 27 Sep 2016 04:23:40 -0700 Received: by HANLANCREEK9755-232 (sSMTP sendmail emulation); Tue, 27 Sep 2016 13:21:54 +0200 From: Marcin Kerlin To: dev@dpdk.org Cc: pablo.de.lara.guarch@intel.com, thomas.monjalon@6wind.com, Marcin Kerlin Date: Tue, 27 Sep 2016 13:13:03 +0200 Message-Id: <1474974783-4861-3-git-send-email-marcinx.kerlin@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1474974783-4861-1-git-send-email-marcinx.kerlin@intel.com> References: <1474901586-8706-2-git-send-email-marcinx.kerlin@intel.com> <1474974783-4861-1-git-send-email-marcinx.kerlin@intel.com> Subject: [dpdk-dev] [PATCH v4 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, 27 Sep 2016 11:23:44 -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 e2403c3..6418cf2 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); } } @@ -1611,6 +1613,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) { @@ -1626,6 +1657,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