From: Kirill A. Korinsky Subject: sys/qwz: use BUS_DMA_WAITOK in qwz_dmamem_alloc() like qwx To: OpenBSD tech Date: Mon, 25 May 2026 00:21:21 +0200 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