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 2A545A04A4; Wed, 2 Mar 2022 09:36:39 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EE3134014E; Wed, 2 Mar 2022 09:36:38 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 067FA40141 for ; Wed, 2 Mar 2022 09:36:37 +0100 (CET) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.55]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4K7nVt66RJzdZpG; Wed, 2 Mar 2022 16:35:18 +0800 (CST) Received: from [127.0.0.1] (10.67.100.224) 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 16:36:35 +0800 Subject: Re: [PATCH] app/testpmd: remove invalid ports when other process detach To: Thomas Monjalon CC: , , , , References: <20220302023326.16509-1-fengchengwen@huawei.com> <5569707.V25eIC5XRa@thomas> From: fengchengwen Message-ID: <31263d7d-b880-ff29-70d9-2a8f75b0bb45@huawei.com> Date: Wed, 2 Mar 2022 16:36:35 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 In-Reply-To: <5569707.V25eIC5XRa@thomas> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.100.224] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) 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 On 2022/3/2 16:26, Thomas Monjalon wrote: > 02/03/2022 03:33, Chengwen Feng: >> 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. > > Why the ports are not removed? Testpmd register function eth_event_callback to deal with DESTROY event, currently it only assign ports[port_id].port_status with RTE_PORT_CLOSED, it doesn't update other global variables like nb_ports. > >> This patch adds a delay remove invalid ports invoke when process the >> RTE_ETH_EVENT_DESTROY event. > > Why do we need this delay? The remove_invalid_ports will scan rte_eth_devices[], when process the DESTROY event, the rte_eth_devices[x] still valid, so here we should a delay logic. > > [...] >> +static void >> +remove_invalid_ports_callback(void *arg) >> +{ >> + RTE_SET_USED(arg); >> + remove_invalid_ports(); >> +} > [...] >> 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; > > > > > . >