Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jun 2008 18:17:20 +0300
From:      "Yony Yossef" <yonyossef.lists@gmail.com>
To:        freebsd-net@freebsd.org
Cc:        liranl@mellanox.co.il
Subject:   TSO bug in FreeBSD 7.0 ?
Message-ID:  <20def4870806120817q5b755805hfafa0d0d1523f2ad@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20def4870806120817q5b755805hfafa0d0d1523f2ad>