From: Martin Pieuchot Subject: Convert envy(4) to bus_dmamem_alloc_range(9) To: tech@openbsd.org Date: Thu, 4 Sep 2025 17:18:57 +0200 Straightforward conversion. I don't own any envy(4) and I'd greatly appreciate a test. ok? Index: dev/pci/envy.c =================================================================== RCS file: /cvs/src/sys/dev/pci/envy.c,v diff -u -p -r1.88 envy.c --- dev/pci/envy.c 24 May 2024 06:02:53 -0000 1.88 +++ dev/pci/envy.c 4 Sep 2025 15:06:18 -0000 @@ -1811,6 +1811,8 @@ envy_allocm(void *self, int dir, size_t int err, wait; struct envy_buf *buf; bus_addr_t dma_addr; + bus_dma_segment_t seg; + int rseg; buf = (dir == AUMODE_RECORD) ? &sc->ibuf : &sc->obuf; if (buf->addr != NULL) { @@ -1823,13 +1825,18 @@ envy_allocm(void *self, int dir, size_t #define ENVY_ALIGN 4 #define ENVY_MAXADDR ((1 << 28) - 1) - buf->addr = (caddr_t)uvm_km_kmemalloc_pla(kernel_map, - uvm.kernel_object, buf->size, 0, UVM_KMF_NOWAIT, 0, - (paddr_t)ENVY_MAXADDR, 0, 0, 1); - if (buf->addr == NULL) { - DPRINTF("%s: unable to alloc dma segment\n", DEVNAME(sc)); + err = bus_dmamem_alloc_range(sc->pci_dmat, buf->size, 0, 0, &seg, 1, + &rseg, BUS_DMA_NOWAIT, (bus_addr_t)0, (bus_addr_t)ENVY_MAXADDR); + if (err) { + DPRINTF("%s: dmamem_alloc_range failed %d", DEVNAME(sc), err); goto err_ret; } + err = bus_dmamem_map(sc->pci_dmat, &seg, rseg, buf->size, &buf->addr, + BUS_DMA_NOWAIT); + if (err) { + DPRINTF("%s: dmamem_map failed %d\n", DEVNAME(sc), err); + goto err_unmap; + } err = bus_dmamap_create(sc->pci_dmat, buf->size, 1, buf->size, 0, wait, &buf->map); if (err) { @@ -1855,7 +1862,7 @@ envy_allocm(void *self, int dir, size_t err_destroy: bus_dmamap_destroy(sc->pci_dmat, buf->map); err_unmap: - uvm_km_free(kernel_map, (vaddr_t)buf->addr, buf->size); + bus_dmamem_free(sc->pci_dmat, &seg, rseg); err_ret: return NULL; }