From: Mustafa Ismail <mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
e1000-rdma-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: [RDMA PATCH 06/16] i40iw: Add qp table lock around AE processing
Date: Thu, 7 Apr 2016 11:30:54 -0500 [thread overview]
Message-ID: <1460046664-552-7-git-send-email-mustafa.ismail@intel.com> (raw)
In-Reply-To: <1460046664-552-1-git-send-email-mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
QP may be freed during Async Event processing.
Add a lock around QP table to prevent it.
Signed-off-by: Mustafa Ismail <mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Faisal Latif <faisal.latif-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
drivers/infiniband/hw/i40iw/i40iw.h | 1 +
drivers/infiniband/hw/i40iw/i40iw_hw.c | 7 +++++++
drivers/infiniband/hw/i40iw/i40iw_utils.c | 9 +++++++--
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h
index 8197676..bf3627f 100644
--- a/drivers/infiniband/hw/i40iw/i40iw.h
+++ b/drivers/infiniband/hw/i40iw/i40iw.h
@@ -254,6 +254,7 @@ struct i40iw_device {
u32 arp_table_size;
u32 next_arp_index;
spinlock_t resource_lock; /* hw resource access */
+ spinlock_t qptable_lock;
u32 vendor_id;
u32 vendor_part_id;
u32 of_device_registered;
diff --git a/drivers/infiniband/hw/i40iw/i40iw_hw.c b/drivers/infiniband/hw/i40iw/i40iw_hw.c
index 9fd3024..27cfdd8 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_hw.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_hw.c
@@ -106,6 +106,7 @@ u32 i40iw_initialize_hw_resources(struct i40iw_device *iwdev)
set_bit(2, iwdev->allocated_pds);
spin_lock_init(&iwdev->resource_lock);
+ spin_lock_init(&iwdev->qptable_lock);
mrdrvbits = 24 - get_count_order(iwdev->max_mr);
iwdev->mr_stagmask = ~(((1 << mrdrvbits) - 1) << (32 - mrdrvbits));
return 0;
@@ -301,11 +302,15 @@ void i40iw_process_aeq(struct i40iw_device *iwdev)
"%s ae_id = 0x%x bool qp=%d qp_id = %d\n",
__func__, info->ae_id, info->qp, info->qp_cq_id);
if (info->qp) {
+ spin_lock_irqsave(&iwdev->qptable_lock, flags);
iwqp = iwdev->qp_table[info->qp_cq_id];
if (!iwqp) {
+ spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
i40iw_pr_err("qp_id %d is already freed\n", info->qp_cq_id);
continue;
}
+ i40iw_add_ref(&iwqp->ibqp);
+ spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
qp = &iwqp->sc_qp;
spin_lock_irqsave(&iwqp->lock, flags);
iwqp->hw_tcp_state = info->tcp_state;
@@ -411,6 +416,8 @@ void i40iw_process_aeq(struct i40iw_device *iwdev)
i40iw_terminate_connection(qp, info);
break;
}
+ if (info->qp)
+ i40iw_rem_ref(&iwqp->ibqp);
} while (1);
if (aeqcnt)
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index 1ceec81..7ed998c 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -506,14 +506,19 @@ void i40iw_rem_ref(struct ib_qp *ibqp)
struct cqp_commands_info *cqp_info;
struct i40iw_device *iwdev;
u32 qp_num;
+ unsigned long flags;
iwqp = to_iwqp(ibqp);
- if (!atomic_dec_and_test(&iwqp->refcount))
+ iwdev = iwqp->iwdev;
+ spin_lock_irqsave(&iwdev->qptable_lock, flags);
+ if (!atomic_dec_and_test(&iwqp->refcount)) {
+ spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
return;
+ }
- iwdev = iwqp->iwdev;
qp_num = iwqp->ibqp.qp_num;
iwdev->qp_table[qp_num] = NULL;
+ spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
cqp_request = i40iw_get_cqp_request(&iwdev->cqp, false);
if (!cqp_request)
return;
--
2.7.4
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-04-07 16:30 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-07 16:30 [RDMA PATCH 00/16] Intel X722 iWARP driver update Mustafa Ismail
[not found] ` <1460046664-552-1-git-send-email-mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-04-07 16:30 ` [RDMA PATCH 01/16] i40iw: Fix overflow of region length Mustafa Ismail
[not found] ` <1460046664-552-2-git-send-email-mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-04-11 9:23 ` Leon Romanovsky
[not found] ` <20160411092324.GG20252-2ukJVAZIZ/Y@public.gmane.org>
2016-04-12 18:09 ` Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 02/16] i40iw: Correct QP size calculation Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 03/16] i40iw: Fix refused connections Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 04/16] i40iw: Correct max message size in query port Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 05/16] i40iw: Do not set self-referencing pointer to NULL after free Mustafa Ismail
2016-04-07 16:30 ` Mustafa Ismail [this message]
2016-04-07 16:30 ` [RDMA PATCH 07/16] i40iw: Set vendor_err only if there is an actual error Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 08/16] i40iw: Populate vendor_id and vendor_part_id fields Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 09/16] i40iw: Remove unused code and fix warning Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 10/16] i40iw: Add virtual channel message queue Mustafa Ismail
2016-04-07 16:30 ` [RDMA PATCH 11/16] i40iw: Correct return code check in add_pble_pool Mustafa Ismail
2016-04-07 16:31 ` [RDMA PATCH 12/16] i40iw: Initialize max enabled vfs variable Mustafa Ismail
2016-04-07 16:31 ` [RDMA PATCH 13/16] i40iw: Add base memory management extensions Mustafa Ismail
[not found] ` <1460046664-552-14-git-send-email-mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-04-12 14:07 ` Christoph Hellwig
[not found] ` <20160412140739.GA23302-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2016-04-12 18:13 ` Mustafa Ismail
2016-04-07 16:31 ` [RDMA PATCH 14/16] i40iw: Fix endian issues and warnings Mustafa Ismail
2016-04-07 16:31 ` [RDMA PATCH 15/16] i40iw: Fix SD calculation for initial HMC creation Mustafa Ismail
2016-04-07 16:31 ` [RDMA PATCH 16/16] i40iw: Adding queue drain functions Mustafa Ismail
[not found] ` <1460046664-552-17-git-send-email-mustafa.ismail-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-04-08 0:46 ` Leon Romanovsky
[not found] ` <20160408004638.GD20252-2ukJVAZIZ/Y@public.gmane.org>
2016-04-08 18:44 ` Mustafa Ismail
2016-04-08 22:15 ` Steve Wise
2016-04-10 19:26 ` Sagi Grimberg
[not found] ` <570AA8D0.2060404-NQWnxTmZq1alnMjI0IkVqw@public.gmane.org>
2016-04-11 4:50 ` 'Leon Romanovsky'
2016-04-12 10:27 ` [RDMA PATCH 00/16] Intel X722 iWARP driver update Or Gerlitz
[not found] ` <CALq1K=L4fdgLxL+-2vNfX0SUvrS9ShTgS=vDOpZyJDyK8EHB=Q@mail.gmail.com>
2016-04-12 4:33 ` Leon Romanovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1460046664-552-7-git-send-email-mustafa.ismail@intel.com \
--to=mustafa.ismail-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=e1000-rdma-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox