]> git.droids-corp.org - dpdk.git/commitdiff
ethdev: fix link status race condition
authorTim Shearer <tim.shearer@overturenetworks.com>
Tue, 27 Oct 2015 21:38:55 +0000 (17:38 -0400)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 4 Nov 2015 22:06:52 +0000 (23:06 +0100)
Calling the Ethernet driver's link_update function from
rte_eth_dev_start can result in a race condition if the NIC raises
the link interrupt at the same time.
Depending on the interrupt handler implementation, the race can cause
the it to think that it received two consecutive link up interrupts,
and it exits without calling the user callback. Appears to impact
E1000/IGB and virtio drivers only.

Signed-off-by: Tim Shearer <tim.shearer@overturenetworks.com>
lib/librte_ether/rte_ethdev.c

index 83704bb07703c0ce11dc80fd7169413e0f41a0b0..e0e1dca34ef3b2c0dad4c071a079a0b40119cd1a 100644 (file)
@@ -1137,7 +1137,7 @@ rte_eth_dev_start(uint8_t port_id)
 
        rte_eth_dev_config_restore(port_id);
 
-       if (dev->data->dev_conf.intr_conf.lsc != 0) {
+       if (dev->data->dev_conf.intr_conf.lsc == 0) {
                FUNC_PTR_OR_ERR_RET(*dev->dev_ops->link_update, -ENOTSUP);
                (*dev->dev_ops->link_update)(dev, 0);
        }