From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bruce Richardson Subject: Re: [PATCH 25/25] rte_eal_init: add info about rte_errno codes Date: Tue, 31 Jan 2017 09:33:45 +0000 Message-ID: <20170131093345.GA119364@bricha3-MOBL3.ger.corp.intel.com> References: <1485529023-5486-1-git-send-email-aconole@redhat.com> <1485529023-5486-26-git-send-email-aconole@redhat.com> <20170127083346.2bf55801@xeon-e3> <20170127164739.GB82692@bricha3-MOBL3.ger.corp.intel.com> <20170127093729.5cef9138@xeon-e3> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Stephen Hemminger , dev@dpdk.org To: Aaron Conole Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 91C762BD1 for ; Tue, 31 Jan 2017 10:33:49 +0100 (CET) Content-Disposition: inline In-Reply-To: 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 Mon, Jan 30, 2017 at 01:38:00PM -0500, Aaron Conole wrote: > Stephen Hemminger writes: > > > On Fri, 27 Jan 2017 16:47:40 +0000 > > Bruce Richardson wrote: > > > >> On Fri, Jan 27, 2017 at 08:33:46AM -0800, Stephen Hemminger wrote: > >> > On Fri, 27 Jan 2017 09:57:03 -0500 > >> > Aaron Conole wrote: > >> > > >> > > diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h > >> > > index 03fee50..46e427f 100644 > >> > > --- a/lib/librte_eal/common/include/rte_eal.h > >> > > +++ b/lib/librte_eal/common/include/rte_eal.h > >> > > @@ -159,7 +159,29 @@ int rte_eal_iopl_init(void); > >> > > * function call and should not be further interpreted by the > >> > > * application. The EAL does not take any ownership of the memory used > >> > > * for either the argv array, or its members. > >> > > - * - On failure, a negative error value. > >> > > + * - On failure, -1 and rte_errno is set to a value indicating the cause > >> > > + * for failure. > >> > > + * > >> > > + * The error codes returned via rte_errno: > >> > > + * EACCES indicates a permissions issue. > >> > > + * > >> > > + * EAGAIN indicates either a bus or system resource was not available, > >> > > + * try again. > >> > > + * > >> > > + * EALREADY indicates that the rte_eal_init function has already been > >> > > + * called, and cannot be called again. > >> > > + * > >> > > + * EINVAL indicates invalid parameters were passed as argv/argc. > >> > > + * > >> > > + * EIO indicates failure to setup the logging handlers. This is usually > >> > > + * caused by an out-of-memory condition. > >> > > + * > >> > > + * ENODEV indicates memory setup issues. > >> > > + * > >> > > + * ENOTSUP indicates that the EAL cannot initialize on this system. > >> > > + * > >> > > + * EUNATCH indicates that the PCI bus is either not present, or is not > >> > > + * readable by the eal. > >> > > */ > >> > > int rte_eal_init(int argc, char **argv); > >> > > >> > Why use rte_errno? > >> > Most DPDK calls just return negative value on error which > >> > corresponds to error number. > >> > Are you trying to keep ABI compatibility? Doesn't make sense > >> > because before all these > >> > errors were panic's no working application is going to care. > >> > >> Either will work, but I actually prefer this way. I view using rte_errno > >> to be better as it can work in just about all cases, including with > >> functions which return pointers. This allows you to have a standard > >> method across all functions for returning error codes, and it only > >> requires a single sentinal value to indicate error, rather than using a > >> whole range of values. > > > > The problem is DPDK is getting more inconsistent on how this is done. > > As long as error returns are always same as kernel/glibc errno's it really doesn't > > matter much which way the value is returned from a technical point of view > > but the inconsistency is sure to be a usability problem and source of errors. > > I am using rte_errno here because I assumed it was the preferred > method. In fact, looking at some recently contributed modules (for > instance pdump), it seems that folks are using it. > > I'm not really sure the purpose of having rte_errno if it isn't used, so > it'd be helpful to know if there's some consensus on reflecting errors > via this variable, or on returning error codes. Whichever is the more > consistent with the way the DPDK project does things, I'm game :). > Unfortunately, this is one area where DPDK is inconsistent, and both schemes are widely used. I much prefer using the rte_errno method, but returning error codes directly is also common in DPDK. /Bruce