From e99d5921a469023b7115efea1ad94c5fd09aaf32 Mon Sep 17 00:00:00 2001 From: Pradeep Gopanapalli Date: Tue, 12 Jul 2016 13:14:34 -0700 Subject: [PATCH] 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 --- drivers/infiniband/ulp/xsigo/xve/xve_main.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/ulp/xsigo/xve/xve_main.c b/drivers/infiniband/ulp/xsigo/xve/xve_main.c index 344e1a1d7e569..3f390e1b98101 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); } -- 2.50.1