From: Jason Gunthorpe <jgg@ziepe.ca>
To: yanjun.zhu@linux.dev
Cc: leon@kernel.org, linux-rdma@vger.kernel.org
Subject: Re: [PATCHv2 2/2] RDMA/rxe: Use different xa locks on different path
Date: Wed, 20 Apr 2022 13:34:58 -0300 [thread overview]
Message-ID: <20220420163458.GR64706@ziepe.ca> (raw)
In-Reply-To: <20220417024343.568777-2-yanjun.zhu@linux.dev>
On Sat, Apr 16, 2022 at 10:43:43PM -0400, yanjun.zhu@linux.dev wrote:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> The function __rxe_add_to_pool is called on different path, 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>
> V1->V2: Use pool type instead of gfp_t;
> drivers/infiniband/sw/rxe/rxe_pool.c | 18 +++++++++++++-----
> 1 file changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c
> index f1f06dc7e64f..5b097d6666eb 100644
> +++ b/drivers/infiniband/sw/rxe/rxe_pool.c
> @@ -157,7 +157,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;
> @@ -169,10 +168,19 @@ 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);
This is still not right - you have to test RDMA_CREATE_AH_SLEEPABLE
for the AH path as well.
Jason
next prev parent reply other threads:[~2022-04-20 16:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-17 2:43 [PATCHv5 1/2] RDMA/rxe: Fix a dead lock problem yanjun.zhu
2022-04-17 2:43 ` [PATCHv2 2/2] RDMA/rxe: Use different xa locks on different path yanjun.zhu
2022-04-20 16:34 ` Jason Gunthorpe [this message]
2022-04-20 6:42 ` [PATCHv5 1/2] RDMA/rxe: Fix a dead lock problem Leon Romanovsky
2022-04-20 16:32 ` Jason Gunthorpe
2022-04-21 12:49 ` 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=20220420163458.GR64706@ziepe.ca \
--to=jgg@ziepe.ca \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=yanjun.zhu@linux.dev \
/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.