> >From: Roland Dreier <[email protected]> > >Markus Stockhausen <[email protected]> noticed that IPoIB was >spending significant time doing memcpy() in __pskb_pull_tail(). He >found that this is because his adapter reports a maximum MTU of 4K, >which causes IPoIB datagram mode to receive all the actual data in a >separate page in the fragment list. > >We're already allocating extra tailroom for the skb linear part, so we >might as well use it. > >Cc: Eric Dumazet <[email protected]> >Reported-by: Markus Stockhausen <[email protected]> >Signed-off-by: Roland Dreier <[email protected]> >--- > drivers/infiniband/ulp/ipoib/ipoib.h | 3 ++- > drivers/infiniband/ulp/ipoib/ipoib_ib.c | 12 +++--------- > 2 files changed, 5 insertions(+), 10 deletions(-) > >diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h >b/drivers/infiniband/ulp/ipoib/ipoib.h >index eb71aaa..ab2cc4c 100644 >--- a/drivers/infiniband/ulp/ipoib/ipoib.h >+++ b/drivers/infiniband/ulp/ipoib/ipoib.h >@@ -64,7 +64,8 @@ enum ipoib_flush_level { > enum { > IPOIB_ENCAP_LEN = 4, > >- IPOIB_UD_HEAD_SIZE = IB_GRH_BYTES + IPOIB_ENCAP_LEN, >+ /* add 128 bytes of tailroom for IP/TCP headers */ >+ IPOIB_UD_HEAD_SIZE = IB_GRH_BYTES + IPOIB_ENCAP_LEN + 128, >...
Thanks for the help but I guess the patch is not yet perfect. My (remote) test machine stopped responding after loading the new ipoib module. Tomorrow I can check the console. Having a look at the source code I guess we now have some major problems when receiving small packets: ... ipoib_ud_skb_put_frags(..., unsigned int length) ... size = length - IPOIB_UD_HEAD_SIZE; /* may be less than zero! */ skb_frag_size_set(frag, size); ... Markus -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
