aboutsummaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2012-08-29 22:11:58 +0100
committerMichael Brown <mcb30@ipxe.org>2012-08-31 21:22:57 +0100
commitf747fac3e1dad31378579326d8e9dce0df85c214 (patch)
tree68393b4686b7d28737b16b26c6f49c4d2db431d0 /src/drivers
parent96be171be572496f0ee4c1cfdc9c507b97caba00 (diff)
downloadipxe-f747fac3e1dad31378579326d8e9dce0df85c214.zip
ipxe-f747fac3e1dad31378579326d8e9dce0df85c214.tar.gz
ipxe-f747fac3e1dad31378579326d8e9dce0df85c214.tar.bz2
[infiniband] Allow queue pairs to have a custom allocator for receive iobufs
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/infiniband/hermon.c8
-rw-r--r--src/drivers/net/ipoib.c11
2 files changed, 15 insertions, 4 deletions
diff --git a/src/drivers/infiniband/hermon.c b/src/drivers/infiniband/hermon.c
index e7db035..ff95e95 100644
--- a/src/drivers/infiniband/hermon.c
+++ b/src/drivers/infiniband/hermon.c
@@ -3128,6 +3128,11 @@ static int hermon_eth_transmit ( struct net_device *netdev,
return 0;
}
+/** Hermon Ethernet queue pair operations */
+static struct ib_queue_pair_operations hermon_eth_qp_op = {
+ .alloc_iob = alloc_iob,
+};
+
/**
* Handle Hermon Ethernet device send completion
*
@@ -3225,7 +3230,8 @@ static int hermon_eth_open ( struct net_device *netdev ) {
/* Allocate queue pair */
port->eth_qp = ib_create_qp ( ibdev, IB_QPT_ETH,
HERMON_ETH_NUM_SEND_WQES, port->eth_cq,
- HERMON_ETH_NUM_RECV_WQES, port->eth_cq );
+ HERMON_ETH_NUM_RECV_WQES, port->eth_cq,
+ &hermon_eth_qp_op );
if ( ! port->eth_qp ) {
DBGC ( hermon, "Hermon %p port %d could not create queue "
"pair\n", hermon, ibdev->port );
diff --git a/src/drivers/net/ipoib.c b/src/drivers/net/ipoib.c
index 44afa2b..8d4cc49 100644
--- a/src/drivers/net/ipoib.c
+++ b/src/drivers/net/ipoib.c
@@ -534,6 +534,11 @@ static struct ib_completion_queue_operations ipoib_cq_op = {
.complete_recv = ipoib_complete_recv,
};
+/** IPoIB queue pair operations */
+static struct ib_queue_pair_operations ipoib_qp_op = {
+ .alloc_iob = alloc_iob,
+};
+
/**
* Poll IPoIB network device
*
@@ -667,9 +672,9 @@ static int ipoib_open ( struct net_device *netdev ) {
}
/* Allocate queue pair */
- ipoib->qp = ib_create_qp ( ibdev, IB_QPT_UD,
- IPOIB_NUM_SEND_WQES, ipoib->cq,
- IPOIB_NUM_RECV_WQES, ipoib->cq );
+ ipoib->qp = ib_create_qp ( ibdev, IB_QPT_UD, IPOIB_NUM_SEND_WQES,
+ ipoib->cq, IPOIB_NUM_RECV_WQES, ipoib->cq,
+ &ipoib_qp_op );
if ( ! ipoib->qp ) {
DBGC ( ipoib, "IPoIB %p could not allocate queue pair\n",
ipoib );