TSO bug in FreeBSD 7.0 ?

Andre Oppermann andre at freebsd.org
Thu Jun 12 16:38:01 UTC 2008


Yony Yossef wrote:
> Hi freebsd-net,
> 
> I'm seeing mbuf chains larger than 64K being sent down by FreeBSD 7 when TSO
> is enabled.
> Then my driver crashes in bus_dmamap_load_mbuf_sg (error=EINVAL).
> I'm printing the mbuf m_pkthdr.len size right after the DEQUEUE from the
> stack:
> 
> IFQ_DRV_DEQUEUE(&dev->if_snd, m_head);
> if (m_head == NULL)
>    break;
>         if (m_head->m_pkthdr.len > 65000) {
>             printf("TSO packet mbuf len:%d\n", m_head->m_pkthdr.len);
>         }
> and the output is:
> 
> ....
> TSO packet mbuf len:65387
> TSO packet mbuf len:65417
> TSO packet mbuf len:65447
> TSO packet mbuf len:65477
> TSO packet mbuf len:65507
> TSO packet mbuf len:65537
> mtnic0: bus_dmamap_load_mbuf_sg error: 22
> xmit_failure:12
> ...
> 
> Note the 65537, I've also seen TSO packets sized 65542.
> 
> There's this old thread talking about it:
> http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2007-02/msg00312.html
> but I've seen no solution for this bug.
> 
> Is there a fix for that?

This bug is supposed to be fixed and the fix should also be included
in 7.0.  The other users of TSO reported no more overflows.  I'll have
another look whether later changes may have had an effect.

-- 
Andre



More information about the freebsd-net mailing list