From: yanjun.zhu@linux.dev
To: jgg@ziepe.ca, leon@kernel.org, linux-rdma@vger.kernel.org,
yanjun.zhu@linux.dev
Subject: [PATCH 3/4] RDMA/rxe: Use different xa locks on different path
Date: Fri, 22 Apr 2022 15:44:15 -0400 [thread overview]
Message-ID: <20220422194416.983549-3-yanjun.zhu@linux.dev> (raw)
In-Reply-To: <20220422194416.983549-1-yanjun.zhu@linux.dev>
From: Zhu Yanjun <yanjun.zhu@linux.dev>
The function __rxe_add_to_pool is called on different paths, and the
requirement of the locks is different. The function rxe_create_ah
requires xa_lock_irqsave/irqrestore while others only require xa_lock_irq.
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/sw/rxe/rxe_pool.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c
index 7b12a52fed35..3f3fa2123f30 100644
--- a/drivers/infiniband/sw/rxe/rxe_pool.c
+++ b/drivers/infiniband/sw/rxe/rxe_pool.c
@@ -155,7 +155,6 @@ void *rxe_alloc(struct rxe_pool *pool)
int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_elem *elem)
{
int err;
- unsigned long flags;
if (WARN_ON(pool->flags & RXE_POOL_ALLOC))
return -EINVAL;
@@ -167,10 +166,17 @@ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_elem *elem)
elem->obj = (u8 *)elem - pool->elem_offset;
kref_init(&elem->ref_cnt);
- xa_lock_irqsave(&pool->xa, flags);
- err = __xa_alloc_cyclic(&pool->xa, &elem->index, elem, pool->limit,
- &pool->next, GFP_ATOMIC);
- xa_unlock_irqrestore(&pool->xa, flags);
+ if (pool->type == RXE_TYPE_AH) {
+ unsigned long flags;
+
+ xa_lock_irqsave(&pool->xa, flags);
+ err = __xa_alloc_cyclic(&pool->xa, &elem->index, elem, pool->limit,
+ &pool->next, GFP_ATOMIC);
+ xa_unlock_irqrestore(&pool->xa, flags);
+ } else {
+ err = xa_alloc_cyclic_irq(&pool->xa, &elem->index, elem, pool->limit,
+ &pool->next, GFP_KERNEL);
+ }
if (err)
goto err_cnt;
--
2.27.0
next prev parent reply other threads:[~2022-04-22 3:17 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-22 19:44 [PATCHv6 1/4] RDMA/rxe: Fix dead lock caused by __rxe_add_to_pool interrupted by rxe_pool_get_index yanjun.zhu
2022-04-22 15:57 ` Pearson, Robert B
2022-04-24 23:47 ` Yanjun Zhu
2022-04-25 17:32 ` Bob Pearson
2022-04-25 19:02 ` Jason Gunthorpe
2022-04-25 22:01 ` Yanjun Zhu
2022-04-25 23:16 ` Jason Gunthorpe
2022-04-22 19:44 ` [PATCH 2/4] RDMA/rxe: Fix dead lock caused by rxe_alloc " yanjun.zhu
2022-04-22 19:44 ` yanjun.zhu [this message]
2022-04-22 19:44 ` [PATCH 4/4] RDMA/rxe: Check RDMA_CREATE_AH_SLEEPABLE in creating AH yanjun.zhu
2022-04-22 16:49 ` Jason Gunthorpe
2022-04-22 23:26 ` Yanjun Zhu
2022-04-23 18:17 ` [PATCHv2 " yanjun.zhu
2022-07-22 6:51 ` [PATCHv6 1/4] RDMA/rxe: Fix dead lock caused by __rxe_add_to_pool interrupted by rxe_pool_get_index yangx.jy
2022-07-22 13:43 ` Yanjun Zhu
2022-07-22 15:14 ` yangx.jy
2022-07-22 15:20 ` Jason Gunthorpe
2022-07-23 0:35 ` Yanjun Zhu
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=20220422194416.983549-3-yanjun.zhu@linux.dev \
--to=yanjun.zhu@linux.dev \
--cc=jgg@ziepe.ca \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.