On 04/19/2018 07:01 AM, Arnon Warshavsky wrote: > Local function to this file, > changing from void to int is non-abi-breaking > > Signed-off-by: Arnon Warshavsky <ar...@qwilt.com> > --- > lib/librte_ether/rte_ethdev.c | 36 +++++++++++++++++++++++++----------- > 1 file changed, 25 insertions(+), 11 deletions(-) > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index 7821a88..9c13827 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -194,7 +194,7 @@ enum { > return port_id; > } > > -static void > +static int > rte_eth_dev_shared_data_prepare(void) > { > const unsigned flags = 0; > @@ -210,8 +210,12 @@ enum { > rte_socket_id(), flags); > } else > mz = rte_memzone_lookup(MZ_RTE_ETH_DEV_DATA); > - if (mz == NULL) > - rte_panic("Cannot allocate ethdev shared data\n"); > + if (mz == NULL) { > + rte_spinlock_unlock(&rte_eth_shared_data_lock); > + RTE_LOG(CRIT, EAL, "%s(): Cannot allocate ethdev shared > data\n", > + __func__); > + return -1; > + } > > rte_eth_dev_shared_data = mz->addr; > if (rte_eal_process_type() == RTE_PROC_PRIMARY) { > @@ -224,6 +228,8 @@ enum { > } > > rte_spinlock_unlock(&rte_eth_shared_data_lock); > + > + return 0; > } > > struct rte_eth_dev * > @@ -274,7 +280,8 @@ struct rte_eth_dev * > uint16_t port_id; > struct rte_eth_dev *eth_dev = NULL; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0)
Lots of "!= 0"'s - you might gather by now that I don't like them :-) > + return NULL; > > /* Synchronize port creation between primary and secondary threads. */ > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > @@ -317,7 +324,8 @@ struct rte_eth_dev * > uint16_t i; > struct rte_eth_dev *eth_dev = NULL; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return NULL; > > /* Synchronize port attachment to primary port creation and release. */ > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > @@ -345,7 +353,8 @@ struct rte_eth_dev * > if (eth_dev == NULL) > return -EINVAL; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return -1; > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > > @@ -399,7 +408,8 @@ struct rte_eth_dev * > int __rte_experimental > rte_eth_dev_owner_new(uint64_t *owner_id) > { > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return -1; > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > > @@ -450,7 +460,8 @@ struct rte_eth_dev * > { > int ret; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return -1; > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > > @@ -467,7 +478,8 @@ struct rte_eth_dev * > {.id = RTE_ETH_DEV_NO_OWNER, .name = ""}; > int ret; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return -1; > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > > @@ -482,7 +494,8 @@ struct rte_eth_dev * > { hmm, I'm wondering should void __rte_experimental rte_eth_dev_owner_delete change to return an int, now that there is a fail case and it is still experimental...? > uint16_t port_id; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return; > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > > @@ -502,7 +515,8 @@ struct rte_eth_dev * > { > int ret = 0; > > - rte_eth_dev_shared_data_prepare(); > + if (rte_eth_dev_shared_data_prepare() != 0) > + return -1; > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > >