From: Leon Romanovsky <leon@kernel.org>
To: Weihang Li <liweihang@huawei.com>
Cc: dledford@redhat.com, jgg@nvidia.com, linux-rdma@vger.kernel.org,
linuxarm@openeuler.org
Subject: Re: [PATCH RFC 1/7] RDMA/hns: Introduce DCA for RC QP
Date: Wed, 20 Jan 2021 10:10:25 +0200 [thread overview]
Message-ID: <20210120081025.GA225873@unreal> (raw)
In-Reply-To: <1610706138-4219-2-git-send-email-liweihang@huawei.com>
On Fri, Jan 15, 2021 at 06:22:12PM +0800, Weihang Li wrote:
> From: Xi Wang <wangxi11@huawei.com>
>
> The hip09 introduces the DCA(Dynamic context attachment) feature which
> supports many RC QPs to share the WQE buffer in a memory pool, this will
> reduce the memory consumption when there are too many QPs are inactive.
>
> If a QP enables DCA feature, the WQE's buffer will not be allocated when
> creating. But when the users start to post WRs, the hns driver will
> allocate a buffer from the memory pool and then fill WQEs which tagged with
> this QP's number.
>
> The hns ROCEE will stop accessing the WQE buffer when the user polled all
> of the CQEs for a DCA QP, then the driver will recycle this WQE's buffer
> to the memory pool.
>
> This patch adds a group of methods to support the user space register
> buffers to a memory pool which belongs to the user context. The hns kernel
> driver will update the pages state in this pool when the user calling the
> post/poll methods and the user driver can get the QP's WQE buffer address
> by the key and offset which queried from kernel.
>
> Signed-off-by: Xi Wang <wangxi11@huawei.com>
> Signed-off-by: Weihang Li <liweihang@huawei.com>
> ---
> drivers/infiniband/hw/hns/Makefile | 2 +-
> drivers/infiniband/hw/hns/hns_roce_dca.c | 381 ++++++++++++++++++++++++++++
> drivers/infiniband/hw/hns/hns_roce_dca.h | 22 ++
> drivers/infiniband/hw/hns/hns_roce_device.h | 10 +
> drivers/infiniband/hw/hns/hns_roce_main.c | 27 +-
> include/uapi/rdma/hns-abi.h | 23 ++
> 6 files changed, 462 insertions(+), 3 deletions(-)
> create mode 100644 drivers/infiniband/hw/hns/hns_roce_dca.c
> create mode 100644 drivers/infiniband/hw/hns/hns_roce_dca.h
<...>
> +static struct dca_mem *alloc_dca_mem(struct hns_roce_dca_ctx *ctx)
> +{
> + struct dca_mem *mem, *tmp, *found = NULL;
> + unsigned long flags;
> +
> + spin_lock_irqsave(&ctx->pool_lock, flags);
> + list_for_each_entry_safe(mem, tmp, &ctx->pool, list) {
> + spin_lock(&mem->lock);
> + if (dca_mem_is_free(mem)) {
> + found = mem;
> + set_dca_mem_alloced(mem);
> + spin_unlock(&mem->lock);
> + goto done;
> + }
> + spin_unlock(&mem->lock);
> + }
> +
> +done:
> + spin_unlock_irqrestore(&ctx->pool_lock, flags);
> +
> + if (found)
> + return found;
> +
> + mem = kzalloc(sizeof(*mem), GFP_ATOMIC);
Should it be ATOMIC?
> + if (!mem)
> + return NULL;
> +
> + spin_lock_init(&mem->lock);
> + INIT_LIST_HEAD(&mem->list);
> +
> + set_dca_mem_alloced(mem);
> +
> + spin_lock_irqsave(&ctx->pool_lock, flags);
> + list_add(&mem->list, &ctx->pool);
> + spin_unlock_irqrestore(&ctx->pool_lock, flags);
> + return mem;
> +}
<...>
> /**
> * hns_get_gid_index - Get gid index.
> @@ -306,15 +308,16 @@ static int hns_roce_modify_device(struct ib_device *ib_dev, int mask,
> static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
> struct ib_udata *udata)
> {
> - int ret;
> struct hns_roce_ucontext *context = to_hr_ucontext(uctx);
> - struct hns_roce_ib_alloc_ucontext_resp resp = {};
> struct hns_roce_dev *hr_dev = to_hr_dev(uctx->device);
> + struct hns_roce_ib_alloc_ucontext_resp resp = {};
> + int ret;
>
> if (!hr_dev->active)
> return -EAGAIN;
>
> resp.qp_tab_size = hr_dev->caps.num_qps;
> + resp.cap_flags = (u32)hr_dev->caps.flags;
This is prone to errors, flags is u64.
<...>
> diff --git a/include/uapi/rdma/hns-abi.h b/include/uapi/rdma/hns-abi.h
> index 90b739d..f59abc4 100644
> --- a/include/uapi/rdma/hns-abi.h
> +++ b/include/uapi/rdma/hns-abi.h
> @@ -86,10 +86,33 @@ struct hns_roce_ib_create_qp_resp {
> struct hns_roce_ib_alloc_ucontext_resp {
> __u32 qp_tab_size;
> __u32 cqe_size;
> + __u32 cap_flags;
> };
This struct should be padded to 64bits,
Thanks
next prev parent reply other threads:[~2021-01-20 8:14 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-15 10:22 [PATCH RFC 0/7] RDMA/hns: Add support for Dynamic Context Attachment Weihang Li
2021-01-15 10:22 ` [PATCH RFC 1/7] RDMA/hns: Introduce DCA for RC QP Weihang Li
2021-01-20 8:10 ` Leon Romanovsky [this message]
2021-01-21 7:01 ` liweihang
2021-01-21 8:53 ` Leon Romanovsky
2021-01-21 13:33 ` liweihang
2021-01-21 13:34 ` Jason Gunthorpe
2021-01-21 13:48 ` liweihang
2021-01-21 13:51 ` Jason Gunthorpe
2021-01-22 9:06 ` liweihang
2021-01-15 10:22 ` [PATCH RFC 2/7] RDMA/hns: Add method for shrinking DCA memory pool Weihang Li
2021-01-15 10:22 ` [PATCH RFC 3/7] RDMA/hns: Configure DCA mode for the userspace QP Weihang Li
2021-01-15 10:22 ` [PATCH RFC 4/7] RDMA/hns: Add method for attaching WQE buffer Weihang Li
2021-01-15 10:22 ` [PATCH RFC 5/7] RDMA/hns: Setup the configuration of WQE addressing to QPC Weihang Li
2021-01-15 10:22 ` [PATCH RFC 6/7] RDMA/hns: Add method to detach WQE buffer Weihang Li
2021-01-15 10:22 ` [PATCH RFC 7/7] RDMA/hns: Add method to query WQE buffer's address Weihang Li
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=20210120081025.GA225873@unreal \
--to=leon@kernel.org \
--cc=dledford@redhat.com \
--cc=jgg@nvidia.com \
--cc=linux-rdma@vger.kernel.org \
--cc=linuxarm@openeuler.org \
--cc=liweihang@huawei.com \
/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.