]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xsigo: Tx_tail goes outof bound
authorPradeep Gopanapalli <pradeep.gopanapalli@oracle.com>
Tue, 12 Jul 2016 20:14:34 +0000 (13:14 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Tue, 12 Jul 2016 20:14:34 +0000 (13:14 -0700)
Orabug: 23514725

Fixed a rare condition where tx_tail value goes out of bound, by properly
locking poll_tx

Signed-off-by: Pradeep Gopanapalli <pradeep.gopanapalli@oracle.com>
Reviewed-by: sajid zia <szia@oracle.com>
Reviewed-by: Haakon Bugge <haakon.bugge@oracle.com>
Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com>
drivers/infiniband/ulp/xsigo/xve/xve_main.c

index 344e1a1d7e569bff6c09ed133dc663e47712add2..3f390e1b98101e8af0d9791d19819894b2013d2c 100644 (file)
@@ -1623,7 +1623,15 @@ static int xve_state_machine(struct xve_dev_priv *priv)
                handle_action_flags(priv);
 
                if (priv->send_hbeat_flag) {
-                       poll_tx(priv);
+                       unsigned long flags = 0;
+
+                       if (unlikely(priv->tx_outstanding > MAX_SEND_CQE)) {
+                               netif_tx_lock(priv->netdev);
+                               spin_lock_irqsave(&priv->lock, flags);
+                               poll_tx(priv);
+                               spin_unlock_irqrestore(&priv->lock, flags);
+                               netif_tx_unlock(priv->netdev);
+                        }
                        if (xve_is_ovn(priv))
                                xve_send_hbeat(priv);
                }