Module Name:    src
Committed By:   thorpej
Date:           Sat Dec  2 15:50:57 UTC 2023

Modified Files:
        src/sys/arch/sun2/sun2: machdep.c

Log Message:
Use vmem(9) rather than extent(9) to manage DVMA mappings.


To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.85 src/sys/arch/sun2/sun2/machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sun2/sun2/machdep.c
diff -u src/sys/arch/sun2/sun2/machdep.c:1.84 src/sys/arch/sun2/sun2/machdep.c:1.85
--- src/sys/arch/sun2/sun2/machdep.c:1.84	Tue Aug 17 22:00:31 2021
+++ src/sys/arch/sun2/sun2/machdep.c	Sat Dec  2 15:50:57 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.84 2021/08/17 22:00:31 andvar Exp $	*/
+/*	$NetBSD: machdep.c,v 1.85 2023/12/02 15:50:57 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993
@@ -149,7 +149,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.84 2021/08/17 22:00:31 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.85 2023/12/02 15:50:57 thorpej Exp $");
 
 #include "opt_ddb.h"
 #include "opt_fpu_emulate.h"
@@ -164,7 +164,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 
 #include <sys/device.h>
 #include <sys/exec.h>
 #include <sys/exec_aout.h>		/* for MID_* */
-#include <sys/extent.h>
+#include <sys/vmem.h>
 #include <sys/file.h>
 #include <sys/ioctl.h>
 #include <sys/kcore.h>
@@ -253,7 +253,7 @@ label_t *nofault;
 /*
  * dvmamap is used to manage DVMA memory.
  */
-static struct extent *dvmamap;
+vmem_t *dvma_arena;
 
 /* Our private scratch page for dumping the MMU. */
 static vaddr_t dumppage;
@@ -351,10 +351,15 @@ cpu_startup(void)
 	/*
 	 * Allocate DMA map for devices on the bus.
 	 */
-	dvmamap = extent_create("dvmamap",
-	    DVMA_MAP_BASE, DVMA_MAP_BASE + DVMA_MAP_AVAIL,
-	    0, 0, EX_NOWAIT);
-	if (dvmamap == NULL)
+	dvma_arena = vmem_create("dvmamap", DVMA_MAP_BASE, DVMA_MAP_AVAIL,
+				 PAGE_SIZE,		/* quantum */
+				 NULL,			/* importfn */
+				 NULL,			/* releasefn */
+				 NULL,			/* source */
+				 0,			/* qcache_max */
+				 VM_SLEEP,
+				 IPL_VM);
+	if (dvma_arena == NULL)
 		panic("unable to allocate DVMA map");
 
 	/*
@@ -801,7 +806,7 @@ _bus_dmamap_load_raw(bus_dma_tag_t t, bu
 {
 	struct vm_page *m;
 	paddr_t pa;
-	bus_addr_t dva;
+	vmem_addr_t dva;
 	bus_size_t sgsize;
 	struct pglist *mlist;
 	int pagesz = PAGE_SIZE;
@@ -831,11 +836,17 @@ _bus_dmamap_load_raw(bus_dma_tag_t t, bu
 	 * Otherwise, we need virtual addresses in DVMA space.
 	 */
 	else {
-		error = extent_alloc(dvmamap, sgsize, pagesz,
-					map->_dm_boundary,
-					(flags & BUS_DMA_NOWAIT) == 0
-						? EX_WAITOK : EX_NOWAIT,
-					(u_long *)&dva);
+		const vm_flag_t vmflags = VM_BESTFIT |
+		    ((flags & BUS_DMA_NOWAIT) ? VM_NOSLEEP : VM_SLEEP);
+
+		error = vmem_xalloc(dvma_arena, sgsize,
+				    0,			/* alignment */
+				    0,			/* phase */
+				    map->_dm_boundary,	/* nocross */
+				    VMEM_ADDR_MIN,	/* minaddr */
+				    VMEM_ADDR_MAX,	/* maxaddr */
+				    vmflags,
+				    &dva);
 		if (error)
 			return (error);
 	}
@@ -878,7 +889,7 @@ _bus_dmamap_load(bus_dma_tag_t t, bus_dm
 	bus_size_t sgsize;
 	vaddr_t va = (vaddr_t)buf;
 	int pagesz = PAGE_SIZE;
-	bus_addr_t dva;
+	vmem_addr_t dva;
 	pmap_t pmap;
 	int rv __diagused;
 
@@ -915,9 +926,17 @@ _bus_dmamap_load(bus_dma_tag_t t, bus_dm
 	 */
 	sgsize = m68k_round_page(buflen + (va & (pagesz - 1)));
 
-	if (extent_alloc(dvmamap, sgsize, pagesz, map->_dm_boundary,
-			 (flags & BUS_DMA_NOWAIT) == 0 ? EX_WAITOK : EX_NOWAIT,
-			 (u_long *)&dva) != 0) {
+	const vm_flag_t vmflags = VM_BESTFIT |
+	    ((flags & BUS_DMA_NOWAIT) ? VM_NOSLEEP : VM_SLEEP);
+
+	if (vmem_xalloc(dvma_arena, sgsize,
+			0,			/* alignment */
+			0,			/* phase */
+			map->_dm_boundary,	/* nocross */
+			VMEM_ADDR_MIN,		/* minaddr */
+			VMEM_ADDR_MAX,		/* maxaddr */
+			vmflags,
+			&dva) != 0) {
 		return (ENOMEM);
 	}
 
@@ -982,7 +1001,6 @@ _bus_dmamap_unload(bus_dma_tag_t t, bus_
 	int flags = map->_dm_flags;
 	bus_addr_t dva;
 	bus_size_t len;
-	int s, error;
 
 	if (nsegs != 1)
 		panic("_bus_dmamem_unload: nsegs = %d", nsegs);
@@ -1024,11 +1042,7 @@ _bus_dmamap_unload(bus_dma_tag_t t, bus_
 			 * This map was loaded using _bus_dmamap_load or
 			 * _bus_dmamap_load_raw for a non-24-bit device.
 			 */
-			s = splhigh();
-			error = extent_free(dvmamap, dva, len, EX_NOWAIT);
-			splx(s);
-			if (error != 0)
-				printf("warning: %ld of DVMA space lost\n", len);
+			vmem_xfree(dvma_arena, dva, len);
 		}
 	}
 

Reply via email to