Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

IB/mad: Delete RMPP_STATE_CANCELING state

The cancel_delayed_work can be called under lock since it doesn't sleep.
This makes the RMPP_STATE_CANCELING state not needed anymore, remove it.

Link: https://lore.kernel.org/r/20200621104738.54850-5-leon@kernel.org
Signed-off-by: Shay Drory <shayd@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>

authored by

Shay Drory and committed by
Jason Gunthorpe
5611074a e41c4253

+4 -13
+4 -13
drivers/infiniband/core/mad_rmpp.c
··· 40 40 enum rmpp_state { 41 41 RMPP_STATE_ACTIVE, 42 42 RMPP_STATE_TIMEOUT, 43 - RMPP_STATE_COMPLETE, 44 - RMPP_STATE_CANCELING 43 + RMPP_STATE_COMPLETE 45 44 }; 46 45 47 46 struct mad_rmpp_recv { ··· 91 92 92 93 spin_lock_irqsave(&agent->lock, flags); 93 94 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) { 94 - if (rmpp_recv->state != RMPP_STATE_COMPLETE) 95 - ib_free_recv_mad(rmpp_recv->rmpp_wc); 96 - rmpp_recv->state = RMPP_STATE_CANCELING; 97 - } 98 - spin_unlock_irqrestore(&agent->lock, flags); 99 - 100 - list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) { 101 95 cancel_delayed_work(&rmpp_recv->timeout_work); 102 96 cancel_delayed_work(&rmpp_recv->cleanup_work); 103 97 } 98 + spin_unlock_irqrestore(&agent->lock, flags); 104 99 105 100 flush_workqueue(agent->qp_info->port_priv->wq); 106 101 107 102 list_for_each_entry_safe(rmpp_recv, temp_rmpp_recv, 108 103 &agent->rmpp_list, list) { 109 104 list_del(&rmpp_recv->list); 105 + if (rmpp_recv->state != RMPP_STATE_COMPLETE) 106 + ib_free_recv_mad(rmpp_recv->rmpp_wc); 110 107 destroy_rmpp_recv(rmpp_recv); 111 108 } 112 109 } ··· 267 272 unsigned long flags; 268 273 269 274 spin_lock_irqsave(&rmpp_recv->agent->lock, flags); 270 - if (rmpp_recv->state == RMPP_STATE_CANCELING) { 271 - spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags); 272 - return; 273 - } 274 275 list_del(&rmpp_recv->list); 275 276 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags); 276 277 destroy_rmpp_recv(rmpp_recv);