Hi Stephen From: Stephen Hemminger > The rte_eth_dev_owner_unset function is unusable because it always > returns -EINVAL. This is because the magic (unowned) value is flagged as not > valid. >
It's OK to raise an error when you do unset for unowned device. It means that unset owner should be called for owned device. > Move the validation of owner into set and unset as separate calls. > > Fixes: 5b7ba31148a8 ("ethdev: add port ownership") > Signed-off-by: Stephen Hemminger <step...@networkplumber.org> > --- > lib/librte_ethdev/rte_ethdev.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c > index 4c320250589a..9398550a1189 100644 > --- a/lib/librte_ethdev/rte_ethdev.c > +++ b/lib/librte_ethdev/rte_ethdev.c > @@ -443,10 +443,6 @@ _rte_eth_dev_owner_set(const uint16_t port_id, > const uint64_t old_owner_id, > return -ENODEV; > } > > - if (!rte_eth_is_valid_owner_id(new_owner->id) && > - !rte_eth_is_valid_owner_id(old_owner_id)) > - return -EINVAL; > - > port_owner = &rte_eth_devices[port_id].data->owner; > if (port_owner->id != old_owner_id) { > RTE_ETHDEV_LOG(ERR, > @@ -475,6 +471,9 @@ rte_eth_dev_owner_set(const uint16_t port_id, { > int ret; > > + if (!rte_eth_is_valid_owner_id(owner->id)) > + return -EINVAL; > + > rte_eth_dev_shared_data_prepare(); > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > @@ -492,6 +491,9 @@ rte_eth_dev_owner_unset(const uint16_t port_id, > const uint64_t owner_id) > {.id = RTE_ETH_DEV_NO_OWNER, .name = ""}; > int ret; > > + if (!rte_eth_is_valid_owner_id(owner_id)) > + return -EINVAL; > + > rte_eth_dev_shared_data_prepare(); > > rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock); > -- > 2.18.0