Download raw body.
sys/qwz: use BUS_DMA_WAITOK in qwz_dmamem_alloc() like qwx
> Date: Mon, 25 May 2026 00:21:21 +0200
> From: Kirill A. Korinsky <kirill@korins.ky>
>
> 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?
ok kettenis@
> 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