On Thu, Dec 12, 2019 at 01:30:22PM +0200, Leon Romanovsky wrote: > @@ -2627,7 +2626,11 @@ struct ib_device { > struct rcu_head rcu_head; > > struct list_head event_handler_list; > - spinlock_t event_handler_lock; > + /* Protects event_handler_list */ > + struct rw_semaphore event_handler_rwsem; > + > + /* Protects QP's event_handler calls and open_qp list */ > + spinlock_t event_handler_lock; This only protects the open_qp list really, the event handler call doesn't need a spinlock. So lets name it properly. open_list_lock ? It is sort of weird that we globally serialize all the qp event handlers? ie that this lock isn't in the ib_qp. Is this deliberate and relied upon or just something random? Jason