From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 8F3F158DF for ; Fri, 29 Jul 2016 16:43:52 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga103.jf.intel.com with ESMTP; 29 Jul 2016 07:43:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,440,1464678000"; d="scan'208";a="1016234311" Received: from gklab-246-021.igk.intel.com (HELO HANLANCREEK9755-232) ([10.217.246.21]) by fmsmga001.fm.intel.com with SMTP; 29 Jul 2016 07:43:44 -0700 Received: by HANLANCREEK9755-232 (sSMTP sendmail emulation); Fri, 29 Jul 2016 17:57:24 +0200 From: Marcin Kerlin To: dev@dpdk.org Cc: pablo.de.lara.guarch@intel.com, thomas.monjalon@6wind.com, Marcin Kerlin Date: Fri, 29 Jul 2016 17:56:59 +0200 Message-Id: <1469807819-7905-3-git-send-email-marcinx.kerlin@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1469807819-7905-1-git-send-email-marcinx.kerlin@intel.com> References: <1469807819-7905-1-git-send-email-marcinx.kerlin@intel.com> Subject: [dpdk-dev] [PATCH 2/2] app/testpmd: fix 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: Fri, 29 Jul 2016 14:43:54 -0000 Added lookup for pool name because secondary process should attach to mempool created by primary process rather than create new. Added function free_mp_shared_dev_data() which causes that if secondary process quit or force quit then detach own devices from common array rte_eth_dev_data[] for all processes. This allows to have a up-to-date list of devices and run again secondary application with the same name. Signed-off-by: Marcin Kerlin --- app/test-pmd/testpmd.c | 30 ++++++++++++++++++++++++++++-- app/test-pmd/testpmd.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 1428974..2fa33d0 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -453,8 +453,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); } } @@ -1610,6 +1612,29 @@ detach_port(uint8_t port_id) return; } +void free_mp_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; + + FOREACH_PORT(pi, ports) { + if (pid != pi && pid != (portid_t)RTE_PORT_ALL) + continue; + + if (!port_is_closed(pi)) + return; + + if (rte_eth_dev_release_dev_data(pi) < 0) + return; + } +} + void pmd_test_exit(void) { @@ -1625,6 +1650,7 @@ pmd_test_exit(void) fflush(stdout); stop_port(pt_id); close_port(pt_id); + free_mp_shared_dev_data(pt_id); } } printf("\nBye...\n"); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 2b281cc..63f82f7 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_mp_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