bnxt_en: Fix race when modifying pause settings.
authorVasundhara Volam <vasundhara-v.volam@broadcom.com>
Sun, 12 Jul 2020 00:48:23 +0000 (20:48 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sun, 12 Jul 2020 22:29:01 +0000 (15:29 -0700)
The driver was modified to not rely on rtnl lock to protect link
settings about 2 years ago.  The pause setting was missed when
making that change.  Fix it by acquiring link_lock mutex before
calling bnxt_hwrm_set_pause().

Fixes: e2dc9b6e38fa ("bnxt_en: Don't use rtnl lock to protect link change logic in workqueue.")
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index 6b88143af5ea19e5c021cf6442d7cc77bd6fb4bc..b4aa56dc4f9fb4c61ac7dd3f0a9fb0d3e23be2b7 100644 (file)
@@ -1765,8 +1765,11 @@ static int bnxt_set_pauseparam(struct net_device *dev,
        if (epause->tx_pause)
                link_info->req_flow_ctrl |= BNXT_LINK_PAUSE_TX;
 
-       if (netif_running(dev))
+       if (netif_running(dev)) {
+               mutex_lock(&bp->link_lock);
                rc = bnxt_hwrm_set_pause(bp);
+               mutex_unlock(&bp->link_lock);
+       }
        return rc;
 }