> Subject: [PATCH rdma-next 10/13] RDMA/mana_ib: implement req_notify_cq > > From: Konstantin Taranov <kotaranov@xxxxxxxxxxxxx> > > Arm a CQ when req_notify_cq is called. > > Signed-off-by: Konstantin Taranov <kotaranov@xxxxxxxxxxxxx> > Reviewed-by: Shiraz Saleem <shirazsaleem@xxxxxxxxxxxxx> Reviewed-by: Long Li <longli@xxxxxxxxxxxxx> > --- > drivers/infiniband/hw/mana/cq.c | 12 ++++++++++++ > drivers/infiniband/hw/mana/device.c | 1 + > drivers/infiniband/hw/mana/mana_ib.h | 2 ++ > drivers/net/ethernet/microsoft/mana/gdma_main.c | 1 + > 4 files changed, 16 insertions(+) > > diff --git a/drivers/infiniband/hw/mana/cq.c b/drivers/infiniband/hw/mana/cq.c > index d26d82d..82f1462 100644 > --- a/drivers/infiniband/hw/mana/cq.c > +++ b/drivers/infiniband/hw/mana/cq.c > @@ -168,3 +168,15 @@ void mana_ib_remove_cq_cb(struct mana_ib_dev > *mdev, struct mana_ib_cq *cq) > kfree(gc->cq_table[cq->queue.id]); > gc->cq_table[cq->queue.id] = NULL; > } > + > +int mana_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags) { > + struct mana_ib_cq *cq = container_of(ibcq, struct mana_ib_cq, ibcq); > + struct gdma_queue *gdma_cq = cq->queue.kmem; > + > + if (!gdma_cq) > + return -EINVAL; > + > + mana_gd_ring_cq(gdma_cq, SET_ARM_BIT); > + return 0; > +} > diff --git a/drivers/infiniband/hw/mana/device.c > b/drivers/infiniband/hw/mana/device.c > index 1da86c3..63e12c3 100644 > --- a/drivers/infiniband/hw/mana/device.c > +++ b/drivers/infiniband/hw/mana/device.c > @@ -47,6 +47,7 @@ static const struct ib_device_ops mana_ib_dev_ops = { > .query_pkey = mana_ib_query_pkey, > .query_port = mana_ib_query_port, > .reg_user_mr = mana_ib_reg_user_mr, > + .req_notify_cq = mana_ib_arm_cq, > > INIT_RDMA_OBJ_SIZE(ib_ah, mana_ib_ah, ibah), > INIT_RDMA_OBJ_SIZE(ib_cq, mana_ib_cq, ibcq), diff --git > a/drivers/infiniband/hw/mana/mana_ib.h > b/drivers/infiniband/hw/mana/mana_ib.h > index 6265c39..bd34ad6 100644 > --- a/drivers/infiniband/hw/mana/mana_ib.h > +++ b/drivers/infiniband/hw/mana/mana_ib.h > @@ -595,4 +595,6 @@ int mana_ib_post_recv(struct ib_qp *ibqp, const struct > ib_recv_wr *wr, > const struct ib_recv_wr **bad_wr); int > mana_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, > const struct ib_send_wr **bad_wr); > + > +int mana_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags); > #endif > diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c > b/drivers/net/ethernet/microsoft/mana/gdma_main.c > index 409e4e8..823f7e7 100644 > --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c > +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c > @@ -344,6 +344,7 @@ void mana_gd_ring_cq(struct gdma_queue *cq, u8 > arm_bit) > mana_gd_ring_doorbell(gc, cq->gdma_dev->doorbell, cq->type, cq->id, > head, arm_bit); > } > +EXPORT_SYMBOL_NS(mana_gd_ring_cq, NET_MANA); > > static void mana_gd_process_eqe(struct gdma_queue *eq) { > -- > 2.43.0