diff options
Diffstat (limited to 'drivers/infiniband/core/cm.c')
| -rw-r--r-- | drivers/infiniband/core/cm.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index be996dba040c..3d194bb60840 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c @@ -3651,6 +3651,7 @@ static int cm_send_sidr_rep_locked(struct cm_id_private *cm_id_priv,  				   struct ib_cm_sidr_rep_param *param)  {  	struct ib_mad_send_buf *msg; +	unsigned long flags;  	int ret;  	lockdep_assert_held(&cm_id_priv->lock); @@ -3676,12 +3677,12 @@ static int cm_send_sidr_rep_locked(struct cm_id_private *cm_id_priv,  		return ret;  	}  	cm_id_priv->id.state = IB_CM_IDLE; -	spin_lock_irq(&cm.lock); +	spin_lock_irqsave(&cm.lock, flags);  	if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node)) {  		rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);  		RB_CLEAR_NODE(&cm_id_priv->sidr_id_node);  	} -	spin_unlock_irq(&cm.lock); +	spin_unlock_irqrestore(&cm.lock, flags);  	return 0;  }  | 
