mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
i40iw: Correct CQ arming
CQ is armed for solicited events only, ignoring other notification flags. Correct this by arming for next and arming for solicited event if IB_CQ_SOLICITED is set. Also protect CQ shadow area update with spinlock. Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
61c78eea95
commit
747f1c6d9b
1 changed files with 6 additions and 3 deletions
|
@ -2327,13 +2327,16 @@ static int i40iw_req_notify_cq(struct ib_cq *ibcq,
|
||||||
{
|
{
|
||||||
struct i40iw_cq *iwcq;
|
struct i40iw_cq *iwcq;
|
||||||
struct i40iw_cq_uk *ukcq;
|
struct i40iw_cq_uk *ukcq;
|
||||||
enum i40iw_completion_notify cq_notify = IW_CQ_COMPL_SOLICITED;
|
unsigned long flags;
|
||||||
|
enum i40iw_completion_notify cq_notify = IW_CQ_COMPL_EVENT;
|
||||||
|
|
||||||
iwcq = (struct i40iw_cq *)ibcq;
|
iwcq = (struct i40iw_cq *)ibcq;
|
||||||
ukcq = &iwcq->sc_cq.cq_uk;
|
ukcq = &iwcq->sc_cq.cq_uk;
|
||||||
if (notify_flags == IB_CQ_NEXT_COMP)
|
if (notify_flags == IB_CQ_SOLICITED)
|
||||||
cq_notify = IW_CQ_COMPL_EVENT;
|
cq_notify = IW_CQ_COMPL_SOLICITED;
|
||||||
|
spin_lock_irqsave(&iwcq->lock, flags);
|
||||||
ukcq->ops.iw_cq_request_notification(ukcq, cq_notify);
|
ukcq->ops.iw_cq_request_notification(ukcq, cq_notify);
|
||||||
|
spin_unlock_irqrestore(&iwcq->lock, flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue