net/ixgbe: fix link state timing on fiber ports
In ixgbe_dev_link_update_share(), if the media type is fiber and the link is down, a flag (IXGBE_FLAG_NEED_LINK_CONFIG) is set. A callback to ixgbe_dev_setup_link_thread_handler() is scheduled which should try to set up the link and clear the flag afterwards. This flag works as a guard variable between threads. To avoid potential race condition between threads, set the IXGBE_FLAG_NEED_LINK_CONFIG flag only when there is no link thread running. Bugzilla ID: 388 Fixes: 819d0d1d57f1 ("net/ixgbe: fix blocking system events") Cc: stable@dpdk.org Signed-off-by: Phil Yang <phil.yang@arm.com> Reviewed-by: Lijian Zhang <lijian.zhang@arm.com> Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>
This commit is contained in:
parent
bd8cf9c0b0
commit
d70a869db2
@ -4281,9 +4281,13 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
|
||||
|
||||
if (link_up == 0) {
|
||||
if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber) {
|
||||
intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;
|
||||
ixgbe_dev_wait_setup_link_complete(dev, 0);
|
||||
if (rte_atomic32_test_and_set(&ad->link_thread_running)) {
|
||||
/* To avoid race condition between threads, set
|
||||
* the IXGBE_FLAG_NEED_LINK_CONFIG flag only
|
||||
* when there is no link thread running.
|
||||
*/
|
||||
intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;
|
||||
if (rte_ctrl_thread_create(&ad->link_thread_tid,
|
||||
"ixgbe-link-handler",
|
||||
NULL,
|
||||
|
Loading…
x
Reference in New Issue
Block a user