Calculate used bounce buffers in amd64 bus dma correctly.
authorbluhm <bluhm@openbsd.org>
Tue, 20 Aug 2024 11:45:31 +0000 (11:45 +0000)
committerbluhm <bluhm@openbsd.org>
Tue, 20 Aug 2024 11:45:31 +0000 (11:45 +0000)
commit46c0d5d12ecd7808a3eddef011c06e241054e295
tree4390587765032e6709674cd1904ae79231bb9c1a
parenta45ce29e10daead1cd4b718fd36b143e5d76892a
Calculate used bounce buffers in amd64 bus dma correctly.

There was an off-by-one bug when comparing the used pages for bounce
buffers with the available pages.  As a result _bus_dmamap_load_buffer()
returned ENOMEM although there was one buffer left.
Also the _dm_nused field was updated and never reset in case of an
error.  Use a local variable to count the used pages and update
global map->_dm_nused only if _bus_dmamap_load_buffer() was successful.
This fixes hanging network transmits if bounce buffers are enforced
for vio(4).

OK sf@ hshoexer@
sys/arch/amd64/amd64/bus_dma.c