From patchwork Wed Mar 2 02:33:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: fengchengwen X-Patchwork-Id: 108461 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 22970A04A7; Wed, 2 Mar 2022 03:38:52 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A308940696; Wed, 2 Mar 2022 03:38:51 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 2B38E40040 for ; Wed, 2 Mar 2022 03:38:49 +0100 (CET) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4K7dZ25tQnzdZLL; Wed, 2 Mar 2022 10:37:30 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Wed, 2 Mar 2022 10:38:47 +0800 From: Chengwen Feng To: , CC: , , , Subject: [PATCH] app/testpmd: remove invalid ports when other process detach Date: Wed, 2 Mar 2022 10:33:26 +0800 Message-ID: <20220302023326.16509-1-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Start main and secondary process: ./dpdk-testpmd -a BDF0 -a BDF1 --proc-type=auto -- -i --rxq=8 --txq=8 --num-procs=2 --proc-id=0 ./dpdk-testpmd -a BDF0 -a BDF1 --proc-type=auto -- -i --rxq=8 --txq=8 --num-procs=2 --proc-id=1 Execute following command in main process: port stop 0 port detach 0 Execute following command in secondary process: set fwd mac start The secondary process will display: Invalid port_id=0 telcore 19 called rx_pkt_burst for not ready port 0 stpmd> 8: [/lib64/libc.so.6(+0xdf600) [0xffff9e1dc600]] 7: [/lib64/libpthread.so.0(+0x7c48) [0xffff9e28ac48]] 6: [/usr/app/testpmd(eal_thread_loop+0x2c4) [0xb23574]] 5: [/usr/app/testpmd() [0x9c21d8]] 4: [/usr/app/testpmd() [0x9c2108]] 3: [/usr/app/testpmd() [0x9b6cf0]] 2: [/usr/app/testpmd() [0xad8620]] 1: [/usr/app/testpmd(rte_dump_stack+0x20) [0xb1a130]] The root cause it that the secondary process has not removed invalid ports when it processes RTE_ETH_EVENT_DESTROY event. This patch adds a delay remove invalid ports invoke when process the RTE_ETH_EVENT_DESTROY event. Note: There will be two invoke of removing invalid ports in main process, one is trigger by user command, another is trigger by RTE_ETH_EVENT_DESTROY event. This patch keeps it unchanged to ensure that the correct number of ports is displayed after detaching successfully. Fixes: 85c6571c9103 ("app/testpmd: reset port status on close notification") Cc: stable@dpdk.org Signed-off-by: Chengwen Feng --- app/test-pmd/testpmd.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index fe2ce19f99..a6a2533806 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -3534,6 +3534,13 @@ rmv_port_callback(void *arg) start_packet_forwarding(0); } +static void +remove_invalid_ports_callback(void *arg) +{ + RTE_SET_USED(arg); + remove_invalid_ports(); +} + /* This function is used by the interrupt thread */ static int eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param, @@ -3569,6 +3576,10 @@ eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param, case RTE_ETH_EVENT_DESTROY: ports[port_id].port_status = RTE_PORT_CLOSED; printf("Port %u is closed\n", port_id); + if (rte_eal_alarm_set(100000, remove_invalid_ports_callback, + (void *)(intptr_t)port_id)) + fprintf(stderr, + "Could not set up deferred device released\n"); break; default: break;