Module Name: src
Committed By: thorpej
Date: Sun Dec 3 00:49:46 UTC 2023
Modified Files:
src/sys/arch/vax/include: sgmap.h
src/sys/arch/vax/vax: sgmap.c
Log Message:
Use vmem(9) rather than extent(9) to manage SGMAP space.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/vax/include/sgmap.h
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/vax/vax/sgmap.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/vax/include/sgmap.h
diff -u src/sys/arch/vax/include/sgmap.h:1.7 src/sys/arch/vax/include/sgmap.h:1.8
--- src/sys/arch/vax/include/sgmap.h:1.7 Sun Jul 5 02:03:36 2015
+++ src/sys/arch/vax/include/sgmap.h Sun Dec 3 00:49:46 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: sgmap.h,v 1.7 2015/07/05 02:03:36 matt Exp $ */
+/* $NetBSD: sgmap.h,v 1.8 2023/12/03 00:49:46 thorpej Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -33,21 +33,21 @@
#ifndef _VAX_SGMAP_H
#define _VAX_SGMAP_H
-#include <sys/extent.h>
+#include <sys/vmem.h>
#include <machine/bus.h>
#include <machine/pte.h>
/*
* A VAX SGMAP's state information. Nothing in the sgmap requires
- * locking[*], with the exception of the extent map. Locking of the
- * extent map is handled within the extent manager itself.
+ * locking[*], with the exception of the vmem arena, which takes care
+ * of it on its own.
*
* [*] While the page table is a `global' resource, access to it is
- * controlled by the extent map; once a region has been allocated from
- * the map, that region is effectively `locked'.
+ * controlled by the arena; once a region has been allocated from
+ * the arena, that region is effectively `locked'.
*/
struct vax_sgmap {
- struct extent *aps_ex; /* extent map to manage sgva space */
+ vmem_t *aps_arena; /* arena to manage sgva space */
struct pte *aps_pt; /* page table */
bus_addr_t aps_sgvabase; /* base of the sgva space */
bus_size_t aps_sgvasize; /* size of the sgva space */
Index: src/sys/arch/vax/vax/sgmap.c
diff -u src/sys/arch/vax/vax/sgmap.c:1.19 src/sys/arch/vax/vax/sgmap.c:1.20
--- src/sys/arch/vax/vax/sgmap.c:1.19 Thu Jul 7 06:55:39 2016
+++ src/sys/arch/vax/vax/sgmap.c Sun Dec 3 00:49:46 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: sgmap.c,v 1.19 2016/07/07 06:55:39 msaitoh Exp $ */
+/* $NetBSD: sgmap.c,v 1.20 2023/12/03 00:49:46 thorpej Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sgmap.c,v 1.19 2016/07/07 06:55:39 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sgmap.c,v 1.20 2023/12/03 00:49:46 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -89,16 +89,18 @@ vax_sgmap_init(bus_dma_tag_t t, struct v
}
/*
- * Create the extent map used to manage the virtual address
+ * Create the arena used to manage the virtual address
* space.
*/
- sgmap->aps_ex = extent_create(name, sgvabase, sgvasize - 1,
- NULL, 0, EX_NOWAIT|EX_NOCOALESCE);
- if (sgmap->aps_ex == NULL) {
- printf("unable to create extent map for sgmap `%s'\n", name);
- goto die;
- }
-
+ sgmap->aps_arena = vmem_create(name, sgvabase, sgvasize,
+ VAX_NBPG, /* quantum */
+ NULL, /* importfn */
+ NULL, /* releasefn */
+ NULL, /* source */
+ 0, /* qcache_max */
+ VM_SLEEP,
+ IPL_VM);
+ KASSERT(sgmap->aps_arena != NULL);
return;
die:
panic("vax_sgmap_init");
@@ -131,9 +133,18 @@ vax_sgmap_alloc(bus_dmamap_t map, bus_si
(unsigned int)origlen, (unsigned int)len, (unsigned int)map->_dm_sgvalen, (unsigned int)map->_dm_boundary, 1);
#endif
- error = extent_alloc(sgmap->aps_ex, map->_dm_sgvalen, VAX_NBPG,
- 0, (flags & BUS_DMA_NOWAIT) ? EX_NOWAIT : EX_WAITOK,
- &map->_dm_sgva);
+ const vm_flag_t vmflags = VM_BESTFIT |
+ ((flags & BUS_DMA_NOWAIT) ? VM_NOSLEEP : VM_SLEEP);
+
+ error = vmem_xalloc(sgmap->aps_arena, map->_dm_sgvalen,
+ 0, /* alignment */
+ 0, /* phase */
+ map->_dm_boundary, /* nocross */
+ VMEM_ADDR_MIN, /* minaddr */
+ VMEM_ADDR_MAX, /* maxaddr */
+ vmflags,
+ &map->_dm_sgva);
+
#if DEBUG_SGMAP
printf("error %d _dm_sgva %lx\n", error, map->_dm_sgva);
#endif
@@ -155,9 +166,7 @@ vax_sgmap_free(bus_dmamap_t map, struct
panic("vax_sgmap_free: no sgva space to free");
#endif
- if (extent_free(sgmap->aps_ex, map->_dm_sgva, map->_dm_sgvalen,
- EX_NOWAIT))
- panic("vax_sgmap_free");
+ vmem_xfree(sgmap->aps_arena, map->_dm_sgva, map->_dm_sgvalen);
map->_dm_flags &= ~DMAMAP_HAS_SGMAP;
}
@@ -165,7 +174,7 @@ vax_sgmap_free(bus_dmamap_t map, struct
int
vax_sgmap_reserve(bus_addr_t ba, bus_size_t len, struct vax_sgmap *sgmap)
{
- return extent_alloc_region(sgmap->aps_ex, ba, len, EX_NOWAIT);
+ return vmem_xalloc_addr(sgmap->aps_arena, ba, len, VM_NOSLEEP);
}
int