Testpmd must not assume that the secondary process is testpmd. The notification needs to be done by EAL.
This reverts commit f96273c8e9d39e472bb07acc05e493b1e712e51b. Bugzilla ID: 1942 Cc: [email protected] Signed-off-by: Stephen Hemminger <[email protected]> --- app/test-pmd/testpmd.c | 103 ++--------------------------------------- 1 file changed, 4 insertions(+), 99 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index e2569d9e30..e54a3981e9 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -3716,83 +3716,6 @@ detach_devargs(char *identifier) rte_devargs_reset(&da); } -#ifndef RTE_EXEC_ENV_WINDOWS - -enum testpmd_req_type { - TESTPMD_REQ_TYPE_EXIT, -}; - -struct testpmd_mp_req { - enum testpmd_req_type t; -}; - -struct testpmd_mp_resp { - int result; -}; - -#define TESTPMD_MP "mp_testpmd" - -/* Send reply to this peer when testpmd exits */ -static RTE_ATOMIC(const char *) primary_name; - -static void -reply_to_primary(const char *peer, int result) -{ - struct rte_mp_msg reply = { }; - struct testpmd_mp_resp *resp = (struct testpmd_mp_resp *) &reply.param; - - strlcpy(reply.name, TESTPMD_MP, RTE_MP_MAX_NAME_LEN); - reply.len_param = sizeof(*resp); - resp->result = result; - - printf("Replying %d to primary\n", result); - fflush(stdout); - - if (rte_mp_reply(&reply, peer) < 0) - printf("Failed to send response to primary:%s", strerror(rte_errno)); -} - -/* Primary process is exiting, stop secondary process */ -static void -pmd_notify_secondary(void) -{ - struct testpmd_mp_req request = { - .t = TESTPMD_REQ_TYPE_EXIT, - }; - struct rte_mp_msg mp_req = { - .name = TESTPMD_MP, - .len_param = sizeof(request), - }; - struct rte_mp_reply reply; - struct timespec ts = {.tv_sec = 5, .tv_nsec = 0}; - - printf("\nPrimary: Sending 'stop_req' request to secondary...\n"); - fflush(stdout); - - memcpy(mp_req.param, &request, sizeof(request)); - rte_mp_request_sync(&mp_req, &reply, &ts); -} - -static int -handle_testpmd_request(const struct rte_mp_msg *request, const void *peer) -{ - const struct testpmd_mp_req *req = (const struct testpmd_mp_req *)request->param; - - if (req->t == TESTPMD_REQ_TYPE_EXIT) { - printf("\nReceived notification of primary exiting\n"); - fflush(stdout); - - /* Response is sent after forwarding loop exits */ - rte_atomic_store_explicit(&primary_name, peer, rte_memory_order_relaxed); - - kill(getpid(), SIGINT); - } else { - reply_to_primary(peer, -EINVAL); - } - return 0; -} -#endif - void pmd_test_exit(void) { @@ -3804,10 +3727,6 @@ pmd_test_exit(void) stop_packet_forwarding(); #ifndef RTE_EXEC_ENV_WINDOWS - /* Tell secondary to exit */ - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - pmd_notify_secondary(); - for (i = 0 ; i < RTE_DIM(mempools) ; i++) { if (mempools[i]) { if (mp_alloc_type == MP_ALLOC_ANON) @@ -4623,12 +4542,9 @@ main(int argc, char** argv) rte_strerror(rte_errno)); #ifndef RTE_EXEC_ENV_WINDOWS - if (rte_eal_process_type() == RTE_PROC_SECONDARY) { - if (enable_primary_monitor() < 0) - rte_exit(EXIT_FAILURE, "Cannot setup primary monitor"); - if (rte_mp_action_register(TESTPMD_MP, handle_testpmd_request) < 0) - rte_exit(EXIT_FAILURE, "Failed to register message action\n"); - } + if (rte_eal_process_type() == RTE_PROC_SECONDARY && + enable_primary_monitor() < 0) + rte_exit(EXIT_FAILURE, "Cannot setup primary monitor"); #endif /* allocate port structures, and init them */ @@ -4830,23 +4746,12 @@ main(int argc, char** argv) } #ifndef RTE_EXEC_ENV_WINDOWS - if (rte_eal_process_type() == RTE_PROC_SECONDARY) { + if (rte_eal_process_type() == RTE_PROC_SECONDARY) disable_primary_monitor(); - rte_mp_action_unregister(TESTPMD_MP); - } #endif pmd_test_exit(); -#ifndef RTE_EXEC_ENV_WINDOWS - if (rte_eal_process_type() == RTE_PROC_SECONDARY) { - const char *peer = rte_atomic_exchange_explicit(&primary_name, NULL, - rte_memory_order_relaxed); - if (peer) - reply_to_primary(peer, 0); - } -#endif - #ifdef RTE_LIB_PDUMP /* uninitialize packet capture framework */ rte_pdump_uninit(); -- 2.53.0

