Fix merge of bounce buffer segments in amd64 bus dma.
authorbluhm <bluhm@openbsd.org>
Thu, 22 Aug 2024 11:36:24 +0000 (11:36 +0000)
committerbluhm <bluhm@openbsd.org>
Thu, 22 Aug 2024 11:36:24 +0000 (11:36 +0000)
commite8c1c6d5997843e8953c48dbf25930ba36957107
tree91526531d704fe68523e2f7833a4121364bbe30d
parent7af0f08f590ac7f13ecd0047a3d6943230ee3df9
Fix merge of bounce buffer segments in amd64 bus dma.

If the physical pages are contiguous, _bus_dmamap_load_buffer()
tries to merge the segments.  In case of mbuf chains, it can happen
that the physical bounce buffers are contiguous, but the virtual
addresses of mbuf m_data are not.  Then during transmit _bus_dmamap_sync()
tries to copy segments where it cannot access the virtual source
address which is mapped in a different mbuf.  So if bounce buffers
are used, physical and virtual buffer must be contigous, to merge
a segment.
While there, split check and decrement of variable i in a for loop
to make the code readable.

with and OK hshoexer@
sys/arch/amd64/amd64/bus_dma.c