Download raw body.
sys/qwz: use BUS_DMA_WAITOK in qwz_dmamem_alloc() like qwx
tech@,
I had investigated errors:
qwz0: failed to setup rxd tid queue for tid 15: 12
qwz0: failed to setup dp for peer b6:fb:e4:9b:48:af on vdev 0 (12)
and 12 here is ENOMEM, and that invstigation, with comparing agains qwx,
revealed that qwz uses BUS_DMA_NOWAIT when qwx uses BUS_DMA_WAITOK which
was a fix by kettenis@ at qwx.c,v 1.99 and 1.101.
Ok?
Index: sys/dev/ic/qwz.c
===================================================================
RCS file: /home/cvs/src/sys/dev/ic/qwz.c,v
diff -u -p -r1.34 qwz.c
--- sys/dev/ic/qwz.c 23 May 2026 12:27:41 -0000 1.34
+++ sys/dev/ic/qwz.c 24 May 2026 21:36:27 -0000
@@ -24649,25 +24649,23 @@ qwz_dmamem_alloc(bus_dma_tag_t dmat, bus
struct qwz_dmamem *adm;
int nsegs;
- adm = malloc(sizeof(*adm), M_DEVBUF, M_NOWAIT | M_ZERO);
- if (adm == NULL)
- return NULL;
+ adm = malloc(sizeof(*adm), M_DEVBUF, M_WAITOK | M_ZERO);
adm->size = size;
if (bus_dmamap_create(dmat, size, 1, size, 0,
- BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &adm->map) != 0)
+ BUS_DMA_WAITOK | BUS_DMA_ALLOCNOW, &adm->map) != 0)
goto admfree;
if (bus_dmamem_alloc_range(dmat, size, align, 0, &adm->seg, 1,
- &nsegs, BUS_DMA_NOWAIT | BUS_DMA_ZERO, 0, 0xffffffff) != 0)
+ &nsegs, BUS_DMA_WAITOK | BUS_DMA_ZERO, 0, 0xffffffff) != 0)
goto destroy;
if (bus_dmamem_map(dmat, &adm->seg, nsegs, size,
- &adm->kva, BUS_DMA_NOWAIT | BUS_DMA_COHERENT) != 0)
+ &adm->kva, BUS_DMA_WAITOK | BUS_DMA_COHERENT) != 0)
goto free;
if (bus_dmamap_load_raw(dmat, adm->map, &adm->seg, nsegs, size,
- BUS_DMA_NOWAIT) != 0)
+ BUS_DMA_WAITOK) != 0)
goto unmap;
bzero(adm->kva, size);
@@ -24689,6 +24687,7 @@ admfree:
void
qwz_dmamem_free(bus_dma_tag_t dmat, struct qwz_dmamem *adm)
{
+ bus_dmamap_unload(dmat, adm->map);
bus_dmamem_unmap(dmat, adm->kva, adm->size);
bus_dmamem_free(dmat, &adm->seg, 1);
bus_dmamap_destroy(dmat, adm->map);
--
wbr, Kirill
sys/qwz: use BUS_DMA_WAITOK in qwz_dmamem_alloc() like qwx