Index: machdep.c =================================================================== RCS file: /cvs/src/sys/arch/sparc64/sparc64/machdep.c,v diff -u -p -r1.218 machdep.c --- machdep.c 22 May 2024 05:51:49 -0000 1.218 +++ machdep.c 7 Sep 2024 00:36:21 -0000 @@ -991,12 +991,20 @@ _bus_dmamap_load_mbuf(bus_dma_tag_t t, b buflen -= incr; vaddr += incr; - if (i > 0 && pa == (segs[i - 1].ds_addr + - segs[i - 1].ds_len) && ((segs[i - 1].ds_len + incr) - < map->_dm_maxsegsz)) { - /* Hey, waddyaknow, they're contiguous */ - segs[i - 1].ds_len += incr; - continue; + if (i > 0) { + bus_dma_segment_t *pseg = &segs[i - 1]; + if (pa == pseg->ds_addr + pseg->ds_len) { + /* waddyaknow, they're contiguous */ + long nlen = pseg->ds_len + incr; + if (nlen <= map->_dm_maxsegsz) { + pseg->ds_len = nlen; + continue; + } + pseg->ds_len = map->_dm_maxsegsz; + + pa = pseg->ds_addr + map->_dm_maxsegsz; + incr = nlen - map->_dm_maxsegsz; + } } segs[i].ds_addr = pa; segs[i].ds_len = incr;