cvs commit: src/sys/dev/bce if_bce.c

Andre Oppermann andre at freebsd.org
Thu May 8 15:31:02 UTC 2008


Scott Long wrote:
> scottl      2008-05-08 15:05:38 UTC
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/dev/bce          if_bce.c 
>   Log:
>   The BCE chips appear to have an undocumented requirement that RX frames be
>   aligned on an 8 byte boundary.  Prior to rev 1.36 this wasn't a problem
>   because mbuf clusters tend be naturally aligned.  The switch to using
>   split buffers with the first buffer being the embedded data area of the
>   mbuf has broken this assumption, at least on i386, causing a complete
>   failure of RX functionality.  Fix this for now by using a full cluster for
>   the first RX buffer.  A more sophisticated approach could be done with the
>   old buffer scheme to realign the m_data pointer with m_adj(), but I'm also
>   not clear on performance benefits of this old scheme or the performance
>   implications of adding an m_adj() call to every allocation.

m_align() to your rescue.  m_adj() probably wont do the right thing on
an empty mbuf (-cluster).

-- 
Andre



More information about the cvs-all mailing list