From 3f4972db9abd8f5f0099685a112ef859a61a8cce Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 8 Jul 2009 11:50:47 +0100 Subject: [PATCH] [infiniband] Allow completion queue operations to be optional The send completion handler typically will just free the I/O buffer, so allow this common case to be handled by the Infiniband core. --- src/net/infiniband.c | 14 ++++++++++++-- src/net/infiniband/ib_gma.c | 22 ---------------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/net/infiniband.c b/src/net/infiniband.c index 38aaf9fc..f7f86cab 100644 --- a/src/net/infiniband.c +++ b/src/net/infiniband.c @@ -424,7 +424,12 @@ int ib_post_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp, */ void ib_complete_send ( struct ib_device *ibdev, struct ib_queue_pair *qp, struct io_buffer *iobuf, int rc ) { - qp->send.cq->op->complete_send ( ibdev, qp, iobuf, rc ); + + if ( qp->send.cq->op->complete_send ) { + qp->send.cq->op->complete_send ( ibdev, qp, iobuf, rc ); + } else { + free_iob ( iobuf ); + } qp->send.fill--; } @@ -440,7 +445,12 @@ void ib_complete_send ( struct ib_device *ibdev, struct ib_queue_pair *qp, void ib_complete_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp, struct ib_address_vector *av, struct io_buffer *iobuf, int rc ) { - qp->recv.cq->op->complete_recv ( ibdev, qp, av, iobuf, rc ); + + if ( qp->recv.cq->op->complete_recv ) { + qp->recv.cq->op->complete_recv ( ibdev, qp, av, iobuf, rc ); + } else { + free_iob ( iobuf ); + } qp->recv.fill--; } diff --git a/src/net/infiniband/ib_gma.c b/src/net/infiniband/ib_gma.c index 405d7861..649533ab 100644 --- a/src/net/infiniband/ib_gma.c +++ b/src/net/infiniband/ib_gma.c @@ -207,30 +207,8 @@ static void ib_gma_complete_recv ( struct ib_device *ibdev, free_iob ( iobuf ); } -/** - * Complete GMA send - * - * - * @v ibdev Infiniband device - * @v qp Queue pair - * @v iobuf I/O buffer - * @v rc Completion status code - */ -static void ib_gma_complete_send ( struct ib_device *ibdev __unused, - struct ib_queue_pair *qp, - struct io_buffer *iobuf, int rc ) { - struct ib_gma *gma = ib_qp_get_ownerdata ( qp ); - - if ( rc != 0 ) { - DBGC ( gma, "GMA %p send completion error: %s\n", - gma, strerror ( rc ) ); - } - free_iob ( iobuf ); -} - /** GMA completion operations */ static struct ib_completion_queue_operations ib_gma_completion_ops = { - .complete_send = ib_gma_complete_send, .complete_recv = ib_gma_complete_recv, };