From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Steve Wise" Subject: RE: [PATCH V4 for-next 05/10] IB/core: Introduce Receive Work Queue indirection table Date: Mon, 23 May 2016 12:07:47 -0500 Message-ID: <01ba01d1b515$a18a6f80$e49f4e80$@opengridcomputing.com> References: <1464006056-19653-1-git-send-email-yishaih@mellanox.com> <1464006056-19653-6-git-send-email-yishaih@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1464006056-19653-6-git-send-email-yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org> Content-Language: en-us Sender: linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: 'Yishai Hadas' , dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org, alexv-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org, tzahio-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org, majd-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org, talal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org List-Id: linux-rdma@vger.kernel.org > Introduce Receive Work Queue (WQ) indirection table. > This object can be used to spread incoming traffic to different > receive Work Queues. > > A Receive WQ indirection table points to variable size of WQs. > This table is given to a QP in downstream patches. > > Signed-off-by: Yishai Hadas > Signed-off-by: Matan Barak > --- > drivers/infiniband/core/verbs.c | 62 > +++++++++++++++++++++++++++++++++++++++++ > include/rdma/ib_verbs.h | 23 +++++++++++++++ > 2 files changed, 85 insertions(+) > > diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c > index c096cad..6b548d7 100644 > --- a/drivers/infiniband/core/verbs.c > +++ b/drivers/infiniband/core/verbs.c > @@ -1636,6 +1636,68 @@ int ib_modify_wq(struct ib_wq *wq, struct ib_wq_attr > *wq_attr, > } > EXPORT_SYMBOL(ib_modify_wq); > > +/* > + * ib_create_rwq_ind_table - Creates a RQ Indirection Table. > + * @device: The device on which to create the rwq indirection table. > + * @ib_rwq_ind_table_init_attr: A list of initial attributes required to > + * create the Indirection Table. > + * > + * Note: The life time of ib_rwq_ind_table_init_attr->ind_tbl is not less > + * than the created ib_rwq_ind_table object and the caller is responsible > + * for its memory allocation/free. > + */ > +struct ib_rwq_ind_table *ib_create_rwq_ind_table(struct ib_device *device, > + struct ib_rwq_ind_table_init_attr > *init_attr) > +{ > + struct ib_rwq_ind_table *rwq_ind_table; > + int i; > + u32 table_size; > + > + if (!device->create_rwq_ind_table) > + return ERR_PTR(-ENOSYS); > + > + table_size = (1 << init_attr->log_ind_tbl_size); > + rwq_ind_table = device->create_rwq_ind_table(device, > + init_attr, NULL); > + if (IS_ERR(rwq_ind_table)) > + return rwq_ind_table; > + > + rwq_ind_table->ind_tbl = init_attr->ind_tbl; > + rwq_ind_table->log_ind_tbl_size = init_attr->log_ind_tbl_size; > + rwq_ind_table->device = device; > + rwq_ind_table->uobject = NULL; > + atomic_set(&rwq_ind_table->usecnt, 0); > + > + for (i = 0; i < table_size; i++) > + atomic_inc(&rwq_ind_table->ind_tbl[i]->usecnt); Hey Yishai, Why do you need usecnt on the individual tables allocated by the device? I see them inc'd here and dec'd in destroy. But I don't see them used anywhere else? Steve. -- 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