From 887d296b886aeb5eb9dd67dd85221f64f2683849 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 6 Jul 2009 19:12:12 +0100 Subject: [infiniband] Poll completion queues automatically Currently, all Infiniband users must create a process for polling their completion queues (or rely on a regular hook such as netdev_poll() in ipoib.c). Move instead to a model whereby the Infiniband core maintains a single process calling ib_poll_eq(), and polling the event queue triggers polls of the applicable completion queues. (At present, the Infiniband core simply polls all of the device's completion queues.) Polling a completion queue will now implicitly refill all attached receive work queues; this is analogous to the way that netdev_poll() implicitly refills the RX ring. Infiniband users no longer need to create a process just to poll their completion queues and refill their receive rings. --- src/drivers/net/ipoib.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c index 03dfa53ac..a559d015c 100644 --- a/src/drivers/net/ipoib.c +++ b/src/drivers/net/ipoib.c @@ -743,10 +743,7 @@ static void ipoib_poll ( struct net_device *netdev ) { struct ipoib_device *ipoib = netdev->priv; struct ib_device *ibdev = ipoib->ibdev; - ib_poll_cq ( ibdev, ipoib->meta.cq ); - ib_poll_cq ( ibdev, ipoib->data.cq ); - ib_qset_refill_recv ( ibdev, &ipoib->meta ); - ib_qset_refill_recv ( ibdev, &ipoib->data ); + ib_poll_eq ( ibdev ); } /** @@ -861,8 +858,8 @@ static int ipoib_open ( struct net_device *netdev ) { mac->qpn = htonl ( ipoib->data.qp->qpn ); /* Fill receive rings */ - ib_qset_refill_recv ( ibdev, &ipoib->meta ); - ib_qset_refill_recv ( ibdev, &ipoib->data ); + ib_refill_recv ( ibdev, ipoib->meta.qp ); + ib_refill_recv ( ibdev, ipoib->data.qp ); /* Join broadcast group */ if ( ( rc = ipoib_join_broadcast_group ( ipoib ) ) != 0 ) { -- cgit v1.2.3-55-g7522