Module Name: src
Committed By: thorpej
Date: Thu Dec 7 16:56:09 UTC 2023
Modified Files:
src/sys/arch/atari/atari: atari_init.c bus.c machdep.c
src/sys/arch/atari/include: bus_funcs.h
Log Message:
extent(9) -> vmem(9)
To generate a diff of this commit:
cvs rdiff -u -r1.107 -r1.108 src/sys/arch/atari/atari/atari_init.c
cvs rdiff -u -r1.68 -r1.69 src/sys/arch/atari/atari/bus.c
cvs rdiff -u -r1.188 -r1.189 src/sys/arch/atari/atari/machdep.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/atari/include/bus_funcs.h
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/atari/atari/atari_init.c
diff -u src/sys/arch/atari/atari/atari_init.c:1.107 src/sys/arch/atari/atari/atari_init.c:1.108
--- src/sys/arch/atari/atari/atari_init.c:1.107 Fri Jan 6 10:28:27 2023
+++ src/sys/arch/atari/atari/atari_init.c Thu Dec 7 16:56:09 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: atari_init.c,v 1.107 2023/01/06 10:28:27 tsutsui Exp $ */
+/* $NetBSD: atari_init.c,v 1.108 2023/12/07 16:56:09 thorpej Exp $ */
/*
* Copyright (c) 1995 Leo Weppelman
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: atari_init.c,v 1.107 2023/01/06 10:28:27 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: atari_init.c,v 1.108 2023/12/07 16:56:09 thorpej Exp $");
#include "opt_ddb.h"
#include "opt_mbtype.h"
@@ -671,10 +671,10 @@ start_c(int id, u_int ttphystart, u_int
init_stmem();
/*
- * Initialize the iomem extent for bus_space(9) to manage address
+ * Initialize the iomem arena for bus_space(9) to manage address
* spaces and allocate the physical RAM from the extent map.
*/
- atari_bus_space_extent_init(0x0, 0xffffffff);
+ atari_bus_space_arena_init(0x0, 0xffffffff);
for (i = 0; i < NMEM_SEGS && boot_segs[i].end != 0; i++) {
if (atari_bus_space_alloc_physmem(boot_segs[i].start,
boot_segs[i].end)) {
Index: src/sys/arch/atari/atari/bus.c
diff -u src/sys/arch/atari/atari/bus.c:1.68 src/sys/arch/atari/atari/bus.c:1.69
--- src/sys/arch/atari/atari/bus.c:1.68 Fri Jan 6 10:28:27 2023
+++ src/sys/arch/atari/atari/bus.c Thu Dec 7 16:56:09 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: bus.c,v 1.68 2023/01/06 10:28:27 tsutsui Exp $ */
+/* $NetBSD: bus.c,v 1.69 2023/12/07 16:56:09 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
#include "opt_m68k_arch.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.68 2023/01/06 10:28:27 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.69 2023/12/07 16:56:09 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -41,6 +41,7 @@ __KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.68
#include <sys/kmem.h>
#include <sys/mbuf.h>
#include <sys/proc.h>
+#include <sys/vmem_impl.h>
#include <uvm/uvm.h>
@@ -50,16 +51,16 @@ __KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.68
#include <sys/bus.h>
/*
- * Extent maps to manage all memory space, including I/O ranges. Allocate
- * storage for 16 regions in each, initially. Later, iomem_malloc_safe
- * will indicate that it's safe to use malloc() to dynamically allocate
- * region descriptors.
+ * Vmem arena to manage all memory space, including I/O ranges. Allocate
+ * storage for 16 regions in each, initially.
+ *
* This means that the fixed static storage is only used for registrating
* the found memory regions and the bus-mapping of the console.
*/
-static long iomem_ex_storage[EXTENT_FIXED_STORAGE_SIZE(16) / sizeof(long)];
-static struct extent *iomem_ex;
-static int iomem_malloc_safe = 0;
+#define IOMEM_BTAG_COUNT VMEM_EST_BTCOUNT(1, 16)
+static struct vmem iomem_arena_store;
+static struct vmem_btag iomem_btag_store[IOMEM_BTAG_COUNT];
+static vmem_t *iomem_arena;
static int _bus_dmamap_load_buffer(bus_dma_tag_t tag, bus_dmamap_t,
void *, bus_size_t, struct vmspace *, int, paddr_t *,
@@ -80,9 +81,12 @@ extern paddr_t avail_end;
* very early stage of the system configuration.
*/
static pt_entry_t *bootm_ptep;
-static long bootm_ex_storage[EXTENT_FIXED_STORAGE_SIZE(32) /
- sizeof(long)];
-static struct extent *bootm_ex;
+static vaddr_t bootm_start;
+static vaddr_t bootm_end; /* inclusive */
+#define BOOTM_BTAG_COUNT VMEM_EST_BTCOUNT(1, 32)
+static struct vmem bootm_arena_store;
+static struct vmem_btag bootm_btag_store[BOOTM_BTAG_COUNT];
+static vmem_t * bootm_arena;
static vaddr_t bootm_alloc(paddr_t pa, u_long size, int flags);
static int bootm_free(vaddr_t va, u_long size);
@@ -91,10 +95,24 @@ void
bootm_init(vaddr_t va, void *ptep, vsize_t size)
{
- bootm_ex = extent_create("bootmem", va, va + size,
- (void *)bootm_ex_storage, sizeof(bootm_ex_storage),
- EX_NOCOALESCE|EX_NOWAIT);
+ bootm_start = va;
+ bootm_end = va + size - 1;
bootm_ptep = (pt_entry_t *)ptep;
+
+ bootm_arena = vmem_init(&bootm_arena_store,
+ "bootmem", /* name */
+ 0, /* addr */
+ 0, /* size */
+ PAGE_SIZE, /* quantum */
+ NULL, /* importfn */
+ NULL, /* releasefn */
+ NULL, /* source */
+ 0, /* qcache_max */
+ VM_NOSLEEP | VM_PRIVTAGS,
+ IPL_NONE);
+
+ vmem_add_bts(bootm_arena, bootm_btag_store, BOOTM_BTAG_COUNT);
+ vmem_add(bootm_arena, va, size, VM_NOSLEEP);
}
vaddr_t
@@ -102,16 +120,17 @@ bootm_alloc(paddr_t pa, u_long size, int
{
pt_entry_t *pg, *epg;
pt_entry_t pg_proto;
- vaddr_t va, rva;
+ vmem_addr_t rva;
+ vaddr_t va;
- if (extent_alloc(bootm_ex, size, PAGE_SIZE, 0, EX_NOWAIT, &rva) != 0) {
- printf("bootm_alloc fails! Not enough fixed extents?\n");
+ if (vmem_alloc(bootm_arena, size, VM_NOSLEEP, &rva) != 0) {
+ printf("bootm_alloc fails! Not enough fixed boundary tags?\n");
printf("Requested extent: pa=%lx, size=%lx\n",
(u_long)pa, size);
return 0;
}
- pg = &bootm_ptep[btoc(rva - bootm_ex->ex_start)];
+ pg = &bootm_ptep[btoc(rva - bootm_start)];
epg = &pg[btoc(size)];
va = rva;
pg_proto = pa | PG_RW | PG_V;
@@ -136,51 +155,57 @@ int
bootm_free(vaddr_t va, u_long size)
{
- if ((va < bootm_ex->ex_start) || ((va + size) > bootm_ex->ex_end))
+ if ((va < bootm_start) || ((va + size - 1) > bootm_end))
return 0; /* Not for us! */
- extent_free(bootm_ex, va, size, EX_NOWAIT);
+ vmem_free(bootm_arena, va, size);
return 1;
}
void
-atari_bus_space_extent_init(paddr_t startpa, paddr_t endpa)
+atari_bus_space_arena_init(paddr_t startpa, paddr_t endpa)
{
+ vmem_size_t size;
/*
- * Initialize the I/O mem extent map.
+ * Initialize the I/O mem vmem arena.
+ *
* Note: we don't have to check the return value since
* creation of a fixed extent map will never fail (since
* descriptor storage has already been allocated).
*
- * N.B. The iomem extent manages _all_ physical addresses
+ * N.B. The iomem arena manages _all_ physical addresses
* on the machine. When the amount of RAM is found, all
* extents of RAM are allocated from the map.
*/
- iomem_ex = extent_create("iomem", startpa, endpa,
- (void *)iomem_ex_storage, sizeof(iomem_ex_storage),
- EX_NOCOALESCE | EX_NOWAIT);
-}
-int
-atari_bus_space_alloc_physmem(paddr_t startpa, paddr_t endpa)
-{
-
- return extent_alloc_region(iomem_ex, startpa, endpa - startpa,
- EX_NOWAIT);
-}
-
-void
-atari_bus_space_malloc_set_safe(void)
-{
-
- iomem_malloc_safe = EX_MALLOCOK;
+ iomem_arena = vmem_init(&iomem_arena_store,
+ "iomem", /* name */
+ 0, /* addr */
+ 0, /* size */
+ 1, /* quantum */
+ NULL, /* importfn */
+ NULL, /* releasefn */
+ NULL, /* source */
+ 0, /* qcache_max */
+ VM_NOSLEEP | VM_PRIVTAGS,
+ IPL_NONE);
+
+ vmem_add_bts(iomem_arena, iomem_btag_store, IOMEM_BTAG_COUNT);
+
+ /* XXX kern/57748 */
+ size = (vmem_size_t)(endpa - startpa) + 1;
+ if (size == 0) {
+ size--;
+ }
+ vmem_add(iomem_arena, startpa, size, VM_NOSLEEP);
}
int
-atari_bus_space_extent_malloc_flag(void)
+atari_bus_space_alloc_physmem(paddr_t startpa, paddr_t endpa)
{
- return iomem_malloc_safe;
+ return vmem_xalloc_addr(iomem_arena, startpa, endpa - startpa,
+ VM_NOSLEEP);
}
int
@@ -193,20 +218,14 @@ bus_space_map(bus_space_tag_t t, bus_add
* Before we go any further, let's make sure that this
* region is available.
*/
- error = extent_alloc_region(iomem_ex, bpa + t->base, size,
- EX_NOWAIT | iomem_malloc_safe);
-
+ error = vmem_xalloc_addr(iomem_arena, bpa + t->base, size,
+ VM_NOSLEEP);
if (error != 0)
return error;
error = bus_mem_add_mapping(t, bpa, size, flags, mhp);
if (error != 0) {
- if (extent_free(iomem_ex, bpa + t->base, size,
- EX_NOWAIT | iomem_malloc_safe)) {
- printf("%s: pa 0x%lx, size 0x%lx\n",
- __func__, bpa, size);
- printf("%s: can't free region\n", __func__);
- }
+ vmem_xfree(iomem_arena, bpa + t->base, size);
}
return error;
}
@@ -216,27 +235,20 @@ bus_space_alloc(bus_space_tag_t t, bus_a
bus_size_t size, bus_size_t alignment, bus_size_t boundary, int flags,
bus_addr_t *bpap, bus_space_handle_t *bshp)
{
- u_long bpa;
+ vmem_addr_t bpa;
int error;
-#ifdef DIAGNOSTIC
- /*
- * Sanity check the allocation against the extent's boundaries.
- * XXX: Since we manage the whole of memory in a single map,
- * this is nonsense for now! Brace it DIAGNOSTIC....
- */
- if ((rstart + t->base) < iomem_ex->ex_start ||
- (rend + t->base) > iomem_ex->ex_end)
- panic("%s: bad region start/end", __func__);
-#endif /* DIAGNOSTIC */
-
/*
* Do the requested allocation.
*/
- error = extent_alloc_subregion(iomem_ex, rstart + t->base,
- rend + t->base, size, alignment, boundary,
- EX_FAST | EX_NOWAIT | iomem_malloc_safe, &bpa);
-
+ error = vmem_xalloc(iomem_arena, size,
+ alignment, /* align */
+ 0, /* phase */
+ boundary, /* boundary */
+ rstart + t->base, /* minaddr */
+ rend + t->base, /* maxaddr */
+ VM_BESTFIT | VM_NOSLEEP,
+ &bpa);
if (error != 0)
return error;
@@ -245,12 +257,7 @@ bus_space_alloc(bus_space_tag_t t, bus_a
*/
error = bus_mem_add_mapping(t, bpa, size, flags, bshp);
if (error != 0) {
- if (extent_free(iomem_ex, bpa, size,
- EX_NOWAIT | iomem_malloc_safe) != 0) {
- printf("%s: pa 0x%lx, size 0x%lx\n",
- __func__, bpa, size);
- printf("%s: can't free region\n", __func__);
- }
+ vmem_xfree(iomem_arena, bpa, size);
}
*bpap = bpa;
@@ -341,11 +348,7 @@ bus_space_unmap(bus_space_tag_t t, bus_s
/*
* Mark as free in the extent map.
*/
- if (extent_free(iomem_ex, bpa, size, EX_NOWAIT | iomem_malloc_safe)
- != 0) {
- printf("%s: pa 0x%lx, size 0x%lx\n", __func__, bpa, size);
- printf("%s: can't free region\n", __func__);
- }
+ vmem_xfree(iomem_arena, bpa, size);
}
/*
Index: src/sys/arch/atari/atari/machdep.c
diff -u src/sys/arch/atari/atari/machdep.c:1.188 src/sys/arch/atari/atari/machdep.c:1.189
--- src/sys/arch/atari/atari/machdep.c:1.188 Sun Jul 3 16:03:08 2022
+++ src/sys/arch/atari/atari/machdep.c Thu Dec 7 16:56:09 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.188 2022/07/03 16:03:08 tsutsui Exp $ */
+/* $NetBSD: machdep.c,v 1.189 2023/12/07 16:56:09 thorpej Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.188 2022/07/03 16:03:08 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.189 2023/12/07 16:56:09 thorpej Exp $");
#include "opt_ddb.h"
#include "opt_compat_netbsd.h"
@@ -213,11 +213,6 @@ cpu_startup(void)
#endif
format_bytes(pbuf, sizeof(pbuf), ptoa(uvm_availmem(false)));
printf("avail memory = %s\n", pbuf);
-
- /*
- * Alloc extent allocation to use malloc
- */
- atari_bus_space_malloc_set_safe();
}
/*
Index: src/sys/arch/atari/include/bus_funcs.h
diff -u src/sys/arch/atari/include/bus_funcs.h:1.2 src/sys/arch/atari/include/bus_funcs.h:1.3
--- src/sys/arch/atari/include/bus_funcs.h:1.2 Sun Jul 3 16:03:08 2022
+++ src/sys/arch/atari/include/bus_funcs.h Thu Dec 7 16:56:09 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_funcs.h,v 1.2 2022/07/03 16:03:08 tsutsui Exp $ */
+/* $NetBSD: bus_funcs.h,v 1.3 2023/12/07 16:56:09 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -62,10 +62,8 @@
/* machine dependent utility functions */
void bootm_init(vaddr_t, void *, vsize_t);
-void atari_bus_space_extent_init(paddr_t, paddr_t);
+void atari_bus_space_arena_init(paddr_t, paddr_t);
int atari_bus_space_alloc_physmem(paddr_t, paddr_t);
-void atari_bus_space_malloc_set_safe(void);
-int atari_bus_space_extent_malloc_flag(void);
/* functions for machine independent bus_space(9) API */
int bus_space_alloc(bus_space_tag_t, bus_addr_t, bus_addr_t, bus_size_t,