On 6/1/2019 5:13 PM, Ye Xiaolong wrote:
> On 05/31, William Tu wrote:
>> When users call rte_eth_dev_close() and rte_dev_remove(), the af_xdp
>> pmd return -1 (EPERM) due to eth_dev == NULL.
>>
>> Since the af_xdp pmd driver advertises RTE_ETH_DEV_CLOSE_REMOVE, all
>> the resources are freed on rte_eth_dev_close(). rte_dev_remove() tries
>> to detach device and subsequently calls rte_pmd_af_xdp_remove() that tries
>> to free already freed resources and fails. Fix it by return success.
>>
>> Fixes: f1debd77efaf6 ("net/af_xdp: introduce AF_XDP PMD")
>> Reported-at: https://patchwork.ozlabs.org/patch/1106528/
>> Signed-off-by: William Tu <[email protected]>
>> Suggested-by: Ilya Maximets <[email protected]>
>> ---
>> drivers/net/af_xdp/rte_eth_af_xdp.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c
>> b/drivers/net/af_xdp/rte_eth_af_xdp.c
>> index 35c72272c919..3dcc3628c5d0 100644
>> --- a/drivers/net/af_xdp/rte_eth_af_xdp.c
>> +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
>> @@ -944,7 +944,7 @@ rte_pmd_af_xdp_remove(struct rte_vdev_device *dev)
>> /* find the ethdev entry */
>> eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(dev));
>> if (eth_dev == NULL)
>> - return -1;
>> + return 0;
>>
>> eth_dev_close(eth_dev);
>> rte_eth_dev_release_port(eth_dev);
>
> Looks good to me. Thanks for the fix.
>
> Acked-by: Xiaolong Ye <[email protected]>
Applied to dpdk-next-net/master, thanks.