From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B3BF1A04B1; Wed, 23 Sep 2020 18:45:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7CD841DA39; Wed, 23 Sep 2020 18:45:24 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id EE32E1DA74 for ; Wed, 23 Sep 2020 18:45:22 +0200 (CEST) IronPort-SDR: MwWEf8sdTGWp41OhaRvKJGkaOPrPSV7zhto6KWqmxv+/auazcf44qnjIycqTQIL+2udJW4WBA5 5AGgXGN2Jc4A== X-IronPort-AV: E=McAfee;i="6000,8403,9753"; a="161021466" X-IronPort-AV: E=Sophos;i="5.77,293,1596524400"; d="scan'208";a="161021466" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2020 09:45:22 -0700 IronPort-SDR: IeWUPYY8fNRh+f6J815VLsNxrls1EzMnWkzxdbtrjbNjddmC0eneG6Fp6PPw3v7BKrBsoH4QNx VAH4G30e1ftQ== X-IronPort-AV: E=Sophos;i="5.77,293,1596524400"; d="scan'208";a="305448261" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.218.147]) ([10.213.218.147]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2020 09:45:21 -0700 To: Thomas Monjalon , dev@dpdk.org Cc: arybchenko@solarflare.com, Wenzhuo Lu , Beilei Xing , Bernard Iremonger References: <20200913220711.3768597-1-thomas@monjalon.net> <20200913220711.3768597-20-thomas@monjalon.net> From: Ferruh Yigit Message-ID: <04ce289e-9e37-98e5-e3db-297ca6390c6b@intel.com> Date: Wed, 23 Sep 2020 17:45:19 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.2.2 MIME-Version: 1.0 In-Reply-To: <20200913220711.3768597-20-thomas@monjalon.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH 19/20] app/testpmd: reset port status on close notification X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 9/13/2020 11:07 PM, Thomas Monjalon wrote: > Since rte_eth_dev_release_port() is called on all port close operations, > the event RTE_ETH_EVENT_DESTROY can be reliably used for resetting > the port status on the application side. > > The intermediate state RTE_PORT_HANDLING is removed in close_port() > because a port can also be closed by a PMD in a device remove operation. > > In case multiple ports are closed, calling remove_invalid_ports() > only once is enough. > > Signed-off-by: Thomas Monjalon <...> > @@ -3118,6 +3093,13 @@ eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param, > rmv_port_callback, (void *)(intptr_t)port_id)) > fprintf(stderr, "Could not set up deferred device removal\n"); > break; > + case RTE_ETH_EVENT_DESTROY: > + if (rte_atomic16_cmpset(&(ports[port_id].port_status), > + RTE_PORT_STOPPED, > + RTE_PORT_CLOSED) == 0) > + printf("Port %d cannot be set to closed\n", port_id); > + printf("Port %u is closed\n", port_id); > + break; This is failing if a port closed without application port stop command, PMD may be doing port stop within the close function but since application didn't give the stop command, the port status is not 'RTE_PORT_STOPPED', hence 'port_status' is not updated correctly.