Unaligned DMA is slow ppc64 systems - that's why this architecture
overrides NET_IP_ALIGN.  IPoIB should take this into account and align
DMA on this platform.

Signed-off-by: Michael S. Tsirkin <[EMAIL PROTECTED]>

---

Roland, what do you think?
This comes from reading linux/skbuff.h and asm-powerpc/system.h - I
don't actually have a ppc64 to test the performance impact.

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c 
b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index 8bf5e9e..cec1cb4 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -125,7 +125,7 @@ static int ipoib_alloc_rx_skb(struct net
        struct sk_buff *skb;
        dma_addr_t addr;
 
-       skb = dev_alloc_skb(IPOIB_BUF_SIZE + 4);
+       skb = dev_alloc_skb(IPOIB_BUF_SIZE + (NET_IP_ALIGN ? 4 : 0));
        if (!skb)
                return -ENOMEM;
 
@@ -133,8 +133,12 @@ static int ipoib_alloc_rx_skb(struct net
         * IB will leave a 40 byte gap for a GRH and IPoIB adds a 4 byte
         * header.  So we need 4 more bytes to get to 48 and align the
         * IP header to a multiple of 16.
+        *
+        * But don't do this on architectures that override NET_IP_ALIGN -
+        * see comment in linux/skbuff.h for reasons why.
         */
-       skb_reserve(skb, 4);
+       if (NET_IP_ALIGN)
+               skb_reserve(skb, 4);
 
        addr = dma_map_single(priv->ca->dma_device,
                              skb->data, IPOIB_BUF_SIZE,

-- 
MST

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

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

Reply via email to