On Tue, Mar 7, 2017 at 11:03 AM, Thomas Monjalon <thomas.monja...@6wind.com> wrote:
> 2017-03-07 09:29, Billy McFall: > > On Mon, Feb 27, 2017 at 8:48 AM, Thomas Monjalon < > thomas.monja...@6wind.com> > > wrote: > > > I think you could use rte_errno (while keeping negative return codes). > > > > > > > I can do that if you want, but if I understand your comment, it will make > > the implementation of the function not as clean. I cannot use the > existing > > RTE_ETH_VALID_PORTID_OR_ERR_RET(..) and RTE_FUNC_PTR_OR_ERR_RET(..) > MACROs > > because they are handling the return on error. Or am I missing something? > > Yes. Maybe we need new macros for basic error management with rte_errno. > > Looking at the code. Do you think we need new MACROs or just set rte_errno in the existing? What would be the down side to setting rte_errno for all the existing calls? Looks like RTE_ETH_VALID_PORTID_OR_ERR_RET(..) is being called ~135 times. Most calls are with retval set to either -ENODEV or -EINVAL. A few instances of 0 and -1, but not many. Looks like RTE_FUNC_PTR_OR_ERR_RET(..) is being called ~100 times. Most calls are with retval set to -ENOTSUP. A few instances of 0, but not many. I was thinking: /* Macros to check for valid port */ #define RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, retval) do { \ if (!rte_eth_dev_is_valid_port(port_id)) { \ RTE_PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id); \ + if (retval < 0) \ + rte_errno = -retval; \ return retval; \ } \ } while (0) Thanks, Billy