On Tue, Jul 27, 2021 at 11:27:21AM +0800, Wenpeng Liang wrote: > From: Xi Wang <wangxi11@xxxxxxxxxx> > > 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@xxxxxxxxxx> > Signed-off-by: Wenpeng Liang <liangwenpeng@xxxxxxxxxx> > --- > drivers/infiniband/hw/hns/Makefile | 2 +- > drivers/infiniband/hw/hns/hns_roce_dca.c | 343 ++++++++++++++++++++++++++++ > drivers/infiniband/hw/hns/hns_roce_dca.h | 22 ++ > drivers/infiniband/hw/hns/hns_roce_device.h | 9 + > drivers/infiniband/hw/hns/hns_roce_main.c | 27 ++- > include/uapi/rdma/hns-abi.h | 27 +++ > 6 files changed, 427 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 hns_dca_page_state *alloc_dca_states(void *pages, int count) > +{ > + struct hns_dca_page_state *states; > + > + states = kcalloc(count, sizeof(*states), GFP_NOWAIT); GFP_NOWAIT ???? Why do you use this flag while in the function before you used classic GFP_KERNEL? Thanks