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,