ethdev: filter destroy event before probed

Message ID 20181024131232.6146-1-thomas@monjalon.net (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series ethdev: filter destroy event before probed |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Thomas Monjalon Oct. 24, 2018, 1:12 p.m. UTC
  If a port is being created and rollbacked because of an error,
the event RTE_ETH_EVENT_DESTROY should not be sent.
It makes no sense to receive a destroy event for a port which
was not yet announced via RTE_ETH_EVENT_NEW.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 lib/librte_ethdev/rte_ethdev.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Ferruh Yigit Oct. 25, 2018, 12:38 p.m. UTC | #1
On 10/24/2018 2:12 PM, Thomas Monjalon wrote:
> If a port is being created and rollbacked because of an error,
> the event RTE_ETH_EVENT_DESTROY should not be sent.
> It makes no sense to receive a destroy event for a port which
> was not yet announced via RTE_ETH_EVENT_NEW.
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>

Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
  
Ferruh Yigit Oct. 25, 2018, 12:47 p.m. UTC | #2
On 10/25/2018 1:38 PM, Ferruh Yigit wrote:
> On 10/24/2018 2:12 PM, Thomas Monjalon wrote:
>> If a port is being created and rollbacked because of an error,
>> the event RTE_ETH_EVENT_DESTROY should not be sent.
>> It makes no sense to receive a destroy event for a port which
>> was not yet announced via RTE_ETH_EVENT_NEW.
>>
>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> 
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 1c04f95ea..9c7d82575 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -512,7 +512,9 @@  rte_eth_dev_release_port(struct rte_eth_dev *eth_dev)
 
 	rte_eth_dev_shared_data_prepare();
 
-	_rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_DESTROY, NULL);
+	if (eth_dev->state != RTE_ETH_DEV_UNUSED)
+		_rte_eth_dev_callback_process(eth_dev,
+				RTE_ETH_EVENT_DESTROY, NULL);
 
 	rte_spinlock_lock(&rte_eth_dev_shared_data->ownership_lock);