From: Pradeep Gopanapalli Date: Tue, 12 Jul 2016 20:14:34 +0000 (-0700) Subject: xsigo: Tx_tail goes outof bound X-Git-Tag: v4.1.12-92~108^2~3 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e99d5921a469023b7115efea1ad94c5fd09aaf32;p=users%2Fjedix%2Flinux-maple.git xsigo: Tx_tail goes outof bound Orabug: 23514725 Fixed a rare condition where tx_tail value goes out of bound, by properly locking poll_tx Signed-off-by: Pradeep Gopanapalli Reviewed-by: sajid zia Reviewed-by: Haakon Bugge Reviewed-by: Yuval Shaia --- diff --git a/drivers/infiniband/ulp/xsigo/xve/xve_main.c b/drivers/infiniband/ulp/xsigo/xve/xve_main.c index 344e1a1d7e56..3f390e1b9810 100644 --- a/drivers/infiniband/ulp/xsigo/xve/xve_main.c +++ b/drivers/infiniband/ulp/xsigo/xve/xve_main.c @@ -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); }