ethdev: fix link status race condition

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>
This commit is contained in:
Tim Shearer 2015-10-27 17:38:55 -04:00 committed by Thomas Monjalon
parent b375513c11
commit d5790b03b3

View 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);
}