TSO bug in FreeBSD 7.0 ?

Yony Yossef yonyossef.lists at gmail.com
Thu Jun 12 15:17:21 UTC 2008


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?

Thanks,

Yony


More information about the freebsd-net mailing list