nfe_defrag() routine in nividia ethernet driver

[ Available lists | Index of freebsd-net | Month of Dec 2010 | Week of 17 Dec 2010 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
abcde abcde <abcde0@yahoo.com>
Date
17 Dec 2010 04:19:57
Subject
nfe_defrag() routine in nividia ethernet driver
Message-ID
808782.86181.qm@web53807.mail.re2.yahoo.com


[ Hide this part ]
Hi, we ported the nvidia ethernet driver to our product. It's been OK until
recently weran into an error condition where packets would get dropped quietly.
The root cause resides in the nfe_encap() routine, where we call nfe_defrag() to
try to reduce the length of the mbuf chain to 32, if it's longer than 32. In the
event the 32 mbufs need more than 32 segments, the subsequent call to
bus_dmamap_load_mbuf_sg() would cause it to return an error then the packet is
subsequently dropped.


My questions are,

1. there appears to be a generic m_defrag() routine available, which doesn't
stop at 32 and is used by a couple of other drivers (Intel, Broadcom, to name a
few). What was the need for a nvidia version of the defrag routine?

2. The NFE_MAX_SCATTER constant, which limits how many segments can be used, is
defined to be 32, while the corresponding constants for other drivers are 100 or
64 (again Intel or Broadcom). How was the value 32 picked? Anybody knows the
reasoning behind them?

Thanks,
mc




Elapsed time: 0.153 seconds