IB/ipoib: rx WQE draft in IPOIB UD
    
Put a prepared WQE in the private data to save time in
the receive flow.
    
Signed-off-by: Eli Cohen <[EMAIL PROTECTED]>
---

Index: ofed_kernel/drivers/infiniband/ulp/ipoib/ipoib_ib.c
===================================================================
--- ofed_kernel.orig/drivers/infiniband/ulp/ipoib/ipoib_ib.c    2008-01-28 
10:12:28.000000000 +0200
+++ ofed_kernel/drivers/infiniband/ulp/ipoib/ipoib_ib.c 2008-01-28 
10:18:39.000000000 +0200
@@ -92,21 +92,13 @@ void ipoib_free_ah(struct kref *kref)
 static int ipoib_ib_post_receive(struct net_device *dev, int id)
 {
        struct ipoib_dev_priv *priv = netdev_priv(dev);
-       struct ib_sge list;
-       struct ib_recv_wr param;
        struct ib_recv_wr *bad_wr;
        int ret;
 
-       list.addr     = priv->rx_ring[id].mapping;
-       list.length   = IPOIB_BUF_SIZE;
-       list.lkey     = priv->mr->lkey;
-
-       param.next    = NULL;
-       param.wr_id   = id | IPOIB_OP_RECV;
-       param.sg_list = &list;
-       param.num_sge = 1;
+       priv->sglist_draft.addr = priv->rx_ring[id].mapping;
+       priv->rx_wr_draft.wr_id = id | IPOIB_OP_RECV;
 
-       ret = ib_post_recv(priv->qp, &param, &bad_wr);
+       ret = ib_post_recv(priv->qp, &priv->rx_wr_draft, &bad_wr);
        if (unlikely(ret)) {
                ipoib_warn(priv, "receive failed for buf %d (%d)\n", id, ret);
                ib_dma_unmap_single(priv->ca, priv->rx_ring[id].mapping,
@@ -202,7 +194,7 @@ static void ipoib_ib_handle_rx_wc(struct
         * Drop packets that this interface sent, ie multicast packets
         * that the HCA has replicated.
         */
-       if (wc->slid == priv->local_lid && wc->src_qp == priv->qp->qp_num)
+       if (unlikely(wc->slid == priv->local_lid && wc->src_qp == 
priv->qp->qp_num))
                goto repost;
 
        /*
Index: ofed_kernel/drivers/infiniband/ulp/ipoib/ipoib.h
===================================================================
--- ofed_kernel.orig/drivers/infiniband/ulp/ipoib/ipoib.h       2008-01-28 
10:12:28.000000000 +0200
+++ ofed_kernel/drivers/infiniband/ulp/ipoib/ipoib.h    2008-01-28 
10:17:10.000000000 +0200
@@ -327,6 +327,8 @@ struct ipoib_dev_priv {
        spinlock_t lock;
 
        struct net_device *dev;
+       struct ib_recv_wr rx_wr_draft;
+       struct ib_sge sglist_draft;
 
        struct napi_struct napi;
 
Index: ofed_kernel/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
===================================================================
--- ofed_kernel.orig/drivers/infiniband/ulp/ipoib/ipoib_verbs.c 2008-01-28 
10:12:28.000000000 +0200
+++ ofed_kernel/drivers/infiniband/ulp/ipoib/ipoib_verbs.c      2008-01-28 
10:17:10.000000000 +0200
@@ -217,6 +217,13 @@ int ipoib_transport_dev_init(struct net_
        priv->tx_wr.sg_list     = priv->tx_sge;
        priv->tx_wr.send_flags  = IB_SEND_SIGNALED;
 
+       priv->rx_wr_draft.next = NULL;
+       priv->rx_wr_draft.sg_list = &priv->sglist_draft;
+       priv->rx_wr_draft.num_sge = 1;
+
+       priv->sglist_draft.length = IPOIB_BUF_SIZE;
+       priv->sglist_draft.lkey = priv->mr->lkey;
+
        return 0;
 
 out_free_cq:


_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to