From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0A60346F26 for ; Wed, 17 Sep 2025 22:54:59 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 048CC402E3; Wed, 17 Sep 2025 22:54:59 +0200 (CEST) Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) by mails.dpdk.org (Postfix) with ESMTP id 296B2402D0 for ; Wed, 17 Sep 2025 22:54:57 +0200 (CEST) Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-78f15d5846dso2871706d6.0 for ; Wed, 17 Sep 2025 13:54:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1758142496; x=1758747296; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=Iirk0N2VocSfqZl83C6lz37T1DkmwIpoCRHEyes5dIc=; b=TFSzQiXVZOic/xwR/dwm3bFrNsBdHSFnwq1hjppRkR3ZF6YjqtBSeQedFhCUIk1juf i/5s1ped4mvszsaakHDi1LD0ohi42Eq00EqB1QLW+DcmIVGlqUflWMQsZbQip9o56JB8 2jp/36p1dfqJIgr4FNlXNcNLeEKABf9e49/hTZ1HkZUBC6+i2wgr8hXxcSUtFeRVRimB cUFthbCH+F4salLRxqxjtcDPmk8a4atnVZ/QXtmkw6BDsnZ9qYpZ677bxfLBzjwjArzX NGH2BvR5CRae3VjbLnNWAJT3ke16vQ5kfca6iilrDZVXxlnF2MXaHRFpFbJFI/vVMVn+ bqcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758142496; x=1758747296; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Iirk0N2VocSfqZl83C6lz37T1DkmwIpoCRHEyes5dIc=; b=H3cR5PZgUd8OR2k/63t4nhQXAyrFUPN4kxNyknUZct1n32cDB9WsrXOQ1CNPYwPqM9 rZAWlVxkqoA/lSeXcFDYxhahk5+Ixy+FbCIG6DkULqpOGB1FRAHGgixtKicABWKgjQ+V flCN9utU/UgnIS7VQTzCEbQyF5wqJ0/pFaTORQbpsEo5a0UDqoQ0Odbex6HOtcsHBMxo X6KxSzRQZme9zWt4Qs4cpQ2+wTfbbR3kYwp1htAcvNONap8528WWbMB4pb4I6LIyLa1M 9D4bRi5++6CDkD9iUJX8j758cHKqbuDIKIz1dJd2WKIi50ADrZfjaq7XNC530MScmF3N dXmg== X-Forwarded-Encrypted: i=1; AJvYcCXE6BW8rrNRUoVVPl75qMXIwejVgdIZtN85TxYDLhVtq0RJI/pDjNyoFnidixzn4O0vYZGkBRM=@dpdk.org X-Gm-Message-State: AOJu0YyD/Ih9F5q350nO3NdL/5g+kfdYxYKGU36QndOILyMsrGsUM9Tp zo6Iua0eBr7B5/OS9/VL8GRlpCIx0gE9hdw3mp3PYl8aCqFiaE1TuZT6cvcP2kgN3Yg= X-Gm-Gg: ASbGncupyGR1qYfNJIlOSDZCKyyEM5AV4O/YFLSkmDwpCFGixOpt4nzBqJM2L/7I3xH qsNWEadNXQiyXRFcjQdVGFTjADDDhW7SjGvF4/jpf4eUNjrt6MlXBvJdbQ7kvIPhyHyDW063hhB dYNB8bXPuKeugA90aIqEXqI7IxT06bM8l3gaG82betwoZ4JMr4+j7Qn2DGtxNrYIZASil0Zw/jS 0roiY63uhClJ79/rp7s0ON9lyMsHf0sKxtSyq6U2X5Vu3Gzp7LosKOh6APxVzDXFmoIYiOy4azq vhKMX3ne38nDq/R04vr4BjHXdNSVBwNRxvkI1bjClB7/6qkJekq8qfMZX/Y+VYveuhUK8SC8YK+ xGpthvYmtDwQyonSI6IKnP1kjt5OfveVtU7Z8IVX9LzM5u81V9jM/z1AqTZ14nxm8lQhZvnUROp 1Dqh+/cwos8HPdmeYDAw== X-Google-Smtp-Source: AGHT+IFsOYEZ5qcONAhEAx3WLfEY5ubmBdMoLycoVwg5Y/iQqmysyfiMfRrnr1pYuX2OrBju/EPJ5Q== X-Received: by 2002:a05:6214:ac8:b0:720:e5a:fe3b with SMTP id 6a1803df08f44-78ecef1e391mr41518216d6.58.1758142496286; Wed, 17 Sep 2025 13:54:56 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-79355ce6b34sm1760116d6.67.2025.09.17.13.54.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Sep 2025 13:54:56 -0700 (PDT) Date: Wed, 17 Sep 2025 13:54:50 -0700 From: Stephen Hemminger To: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> Cc: Aman Singh , Tyler Retzlaff , Anatoly Burakov , "Min Hu (Connor)" , Ferruh Yigit , Andrew Rybchenko , Xiaoyun Li , Lijun Ou , dev@dpdk.org, stable@dpdk.org Subject: Re: [PATCH v4] app/testpmd: stop secondary process fwd_lcores during primary teardown Message-ID: <20250917135450.03f12cae@hermes.local> In-Reply-To: <20250917113601.521308-1-14pwcse1224@uetpeshawar.edu.pk> References: <20250915112513.496136-1-14pwcse1224@uetpeshawar.edu.pk> <20250917113601.521308-1-14pwcse1224@uetpeshawar.edu.pk> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org On Wed, 17 Sep 2025 04:36:01 -0700 Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> wrote: > When the secondary process testpmd application running any fwd_engine > and after that primary has exited will cause a crash. > > This patch forces secondary process forwarding lcores > in fwd_engine to stop before the primary process exits. > > Fixes: a550baf24af90f ("app/testpmd: support multi-process") > Cc: stable@dpdk.org > > Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> > Signed-off-by: Stephen Hemminger > --- There are still several issue left: - using hotplug mp structs - sending reply before fully exited. Try this. It worked for simple quit and killing primary testpmd with an ILL signal. diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 0f58a31eb5..4c949adeda 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #ifdef RTE_NET_IXGBE @@ -3609,6 +3610,83 @@ 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) { @@ -3620,6 +3698,10 @@ 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) @@ -3628,6 +3710,7 @@ pmd_test_exit(void) } } #endif + if (ports != NULL) { no_link_check = 1; RTE_ETH_FOREACH_DEV(pt_id) { @@ -4429,9 +4512,12 @@ main(int argc, char** argv) rte_strerror(rte_errno)); #ifndef RTE_EXEC_ENV_WINDOWS - if (rte_eal_process_type() == RTE_PROC_SECONDARY && - enable_primary_monitor() < 0) - rte_exit(EXIT_FAILURE, "Cannot setup primary monitor"); + 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"); + } #endif /* allocate port structures, and init them */ @@ -4628,12 +4714,23 @@ 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.47.3