Fixup packet fragment unrolling procedure
authormikeb <mikeb@openbsd.org>
Mon, 29 Aug 2016 14:12:58 +0000 (14:12 +0000)
committermikeb <mikeb@openbsd.org>
Mon, 29 Aug 2016 14:12:58 +0000 (14:12 +0000)
commit02808233fed8812c163ffcefdc51496725db1967
tree54a17e35aea363c00adf60ea03ada260d375ee75
parent5b28eaf2b71894219cdbc646b8fc6de656ef741f
Fixup packet fragment unrolling procedure

When bus_dmamap_load fails to load one of the buffers in the mbuf
chain, we need to revert all changes to transmit descriptors.  The
code to do that was prototyped but not tested.  However due to how
the Tx ring is set up in xnf(4) and generic lack of proper fragment
support in the Netfront design we're always limited to having 256
entries for distinct shared memory pages.  The mbuf chain is
traversed and attempt is made to load every data chunk into a 4k
sized DMA map segment which makes it impossible to reference a
buffer composed of multiple pages.  Current implementation lacks
support for this preventing reliable transmission of frames larger
than 4k.

Bug reported by Kirill Miazine <km at krot ! org>, thanks!
sys/dev/pv/if_xnf.c