From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 788CEA04B6;
	Tue, 13 Oct 2020 11:33:37 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 4A5C71BF34;
	Tue, 13 Oct 2020 11:33:36 +0200 (CEST)
Received: from mga11.intel.com (mga11.intel.com [192.55.52.93])
 by dpdk.org (Postfix) with ESMTP id 1EBDA1BF2F
 for <dev@dpdk.org>; Tue, 13 Oct 2020 11:33:33 +0200 (CEST)
IronPort-SDR: KelnLAQjjbOWYN8HQfRbAQAXJ27xPBka0r0FCW6MWyEZpkM3cYo7cWMezoxO4iEmGnenhyZ0kG
 w3x2bcRVjsdA==
X-IronPort-AV: E=McAfee;i="6000,8403,9772"; a="162416893"
X-IronPort-AV: E=Sophos;i="5.77,369,1596524400"; d="scan'208";a="162416893"
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga005.jf.intel.com ([10.7.209.41])
 by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 13 Oct 2020 02:33:32 -0700
IronPort-SDR: 6OA+RBNnGLKZ4zeNnIoPskLE799dlqeRY01uI71riLtD72HejGrHb71Spb1Cv4G3bZbpdsoXoS
 JT6IPdYnJ6nA==
X-IronPort-AV: E=Sophos;i="5.77,369,1596524400"; d="scan'208";a="530326995"
Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.214.64])
 ([10.213.214.64])
 by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 13 Oct 2020 02:33:27 -0700
To: Thomas Monjalon <thomas@monjalon.net>,
 Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Cc: dev@dpdk.org, arybchenko@solarflare.com, Liron Himi <lironh@marvell.com>, 
 Stephen Hemminger <stephen@networkplumber.org>, Ray Kinsella
 <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>,
 Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>,
 Gaetan Rivet <grive@u256.net>, Jakub Grajciar <jgrajcia@cisco.com>,
 Matan Azrad <matan@nvidia.com>, Shahaf Shuler <shahafs@nvidia.com>,
 Viacheslav Ovsiienko <viacheslavo@nvidia.com>, Zyta Szpak <zr@semihalf.com>,
 Stephen Hemminger <sthemmin@microsoft.com>,
 "K. Y. Srinivasan" <kys@microsoft.com>,
 Haiyang Zhang <haiyangz@microsoft.com>, Long Li <longli@microsoft.com>,
 Maxime Coquelin <maxime.coquelin@redhat.com>,
 Chenbo Xia <chenbo.xia@intel.com>, Zhihong Wang <zhihong.wang@intel.com>
References: <20200913220711.3768597-1-thomas@monjalon.net>
 <1850948.foQ0BKb2Qe@thomas>
 <c5005e10-b58c-4c6b-c796-6f62d44df4bc@oktetlabs.ru>
 <13936658.LjDx0tDdet@thomas>
From: Ferruh Yigit <ferruh.yigit@intel.com>
Message-ID: <ee84e53c-240d-66d6-969e-76093874dba2@intel.com>
Date: Tue, 13 Oct 2020 10:33:23 +0100
MIME-Version: 1.0
In-Reply-To: <13936658.LjDx0tDdet@thomas>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Subject: Re: [dpdk-dev] [PATCH v4 3/3] ethdev: allow close function to
 return an error
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

On 10/13/2020 9:55 AM, Thomas Monjalon wrote:

<...>

>>>>>    	dev = &rte_eth_devices[port_id];
>>>>>    
>>>>> -	RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_close);
>>>>> -	(*dev->dev_ops->dev_close)(dev);
>>>>> +	RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);
>>>>> +	*lasterr = (*dev->dev_ops->dev_close)(dev);
>>>>> +	if (*lasterr != 0)
>>>>> +		lasterr = &binerr;
>>>>>    
>>>>>    	rte_ethdev_trace_close(port_id);
>>>>> -	rte_eth_dev_release_port(dev);
>>>>> +	*lasterr = rte_eth_dev_release_port(dev);
>>>>> +
>>>>> +	return firsterr;
>>>>>    }
>>>>
>>>> This may be personal taste but above error handling looks like unnecessary
>>>> complex, what do you think something like below:
>>>>
>>>> close_err = (*dev->dev_ops->dev_close)(dev);
>>>> release_err = rte_eth_dev_release_port(dev);
>>>> return close_err ? close_err : release_err;
>>>
>>> This is what I did first. Then thought about this "elegant" handling.
>>> The pointer solution is just one more line and is more future proof.
>>>
>>> I'm fine with any choice. Andrew?
>>>
>>
>> Hm, really hard to make a choice. I tend to choose Thomas's
>> version. Yes, I agree that it is a bit over-complicated in
>> this particular case, but thoughts to be future-proof
>> overweight for me. Plus it adds a pattern on how to handle
>> such cases in the future.
> 
> Yes it's an elegant pattern :)
> 

OK :)