diff options
author | ian <ian@FreeBSD.org> | 2014-05-15 19:09:31 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2014-05-15 19:09:31 +0000 |
commit | 24fc8c91c2a303dba31262f57dc8f84b411be5dd (patch) | |
tree | 2e4dfb68203c51cfd6406ba8d87578b7f5b99263 /sys/arm | |
parent | c287c5d5301219fe2fabc25222edae29e314c213 (diff) | |
download | FreeBSD-src-24fc8c91c2a303dba31262f57dc8f84b411be5dd.zip FreeBSD-src-24fc8c91c2a303dba31262f57dc8f84b411be5dd.tar.gz |
MFC r257549, r261642
Don't create a distinct free page pool for segregating allocations that are
accessed through the direct map unless the kernel configuration actually
includes a direct map. Only a few configurations do, and for the rest the
unnecessary free page pool is a small pessimization.
Remove the ARM_USE_SMALL_ALLOC option and code related to it.
Diffstat (limited to 'sys/arm')
-rw-r--r-- | sys/arm/arm/machdep.c | 3 | ||||
-rw-r--r-- | sys/arm/arm/mem.c | 4 | ||||
-rw-r--r-- | sys/arm/arm/pmap.c | 81 | ||||
-rw-r--r-- | sys/arm/arm/vm_machdep.c | 203 | ||||
-rw-r--r-- | sys/arm/conf/AVILA | 1 | ||||
-rw-r--r-- | sys/arm/conf/CAMBRIA | 1 | ||||
-rw-r--r-- | sys/arm/conf/CNS11XXNAS | 1 | ||||
-rw-r--r-- | sys/arm/conf/CRB | 1 | ||||
-rw-r--r-- | sys/arm/conf/EP80219 | 1 | ||||
-rw-r--r-- | sys/arm/conf/IQ31244 | 1 | ||||
-rw-r--r-- | sys/arm/conf/NSLU | 2 | ||||
-rw-r--r-- | sys/arm/include/pmap.h | 11 | ||||
-rw-r--r-- | sys/arm/include/sf_buf.h | 27 | ||||
-rw-r--r-- | sys/arm/include/vmparam.h | 32 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/ep80219_machdep.c | 35 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/iq31244_machdep.c | 35 | ||||
-rw-r--r-- | sys/arm/xscale/i8134x/crb_machdep.c | 37 | ||||
-rw-r--r-- | sys/arm/xscale/ixp425/avila_machdep.c | 33 | ||||
-rw-r--r-- | sys/arm/xscale/pxa/pxa_machdep.c | 36 | ||||
-rw-r--r-- | sys/arm/xscale/pxa/std.pxa | 1 |
20 files changed, 12 insertions, 534 deletions
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index 5082fa9..1fef76c 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -783,9 +783,6 @@ makectx(struct trapframe *tf, struct pcb *pcb) * Make a standard dump_avail array. Can't make the phys_avail * since we need to do that after we call pmap_bootstrap, but this * is needed before pmap_boostrap. - * - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. */ void arm_dump_avail_init(vm_paddr_t physaddr, vm_offset_t ramsize, size_t max) diff --git a/sys/arm/arm/mem.c b/sys/arm/arm/mem.c index e2e8588..460a004 100644 --- a/sys/arm/arm/mem.c +++ b/sys/arm/arm/mem.c @@ -135,10 +135,6 @@ memrw(struct cdev *dev, struct uio *uio, int flags) if (!kernacc((caddr_t)(int)uio->uio_offset, c, uio->uio_rw == UIO_READ ? VM_PROT_READ : VM_PROT_WRITE)) -#ifdef ARM_USE_SMALL_ALLOC - if (addr <= VM_MAXUSER_ADDRESS || - addr >= KERNBASE) -#endif return (EFAULT); error = uiomove((caddr_t)(int)uio->uio_offset, (int)c, uio); continue; diff --git a/sys/arm/arm/pmap.c b/sys/arm/arm/pmap.c index 8ce2944..9bd53fa 100644 --- a/sys/arm/arm/pmap.c +++ b/sys/arm/arm/pmap.c @@ -1069,9 +1069,7 @@ pmap_l2ptp_ctor(void *mem, int size, void *arg, int flags) #ifndef PMAP_INCLUDE_PTE_SYNC struct l2_bucket *l2b; pt_entry_t *ptep, pte; -#ifdef ARM_USE_SMALL_ALLOC - pd_entry_t *pde; -#endif + vm_offset_t va = (vm_offset_t)mem & ~PAGE_MASK; /* @@ -1082,10 +1080,6 @@ pmap_l2ptp_ctor(void *mem, int size, void *arg, int flags) * page tables, we simply fix up the cache-mode here if it's not * correct. */ -#ifdef ARM_USE_SMALL_ALLOC - pde = &kernel_pmap->pm_l1->l1_kva[L1_IDX(va)]; - if (!l1pte_section_p(*pde)) { -#endif l2b = pmap_get_l2_bucket(pmap_kernel(), va); ptep = &l2b->l2b_kva[l2pte_index(va)]; pte = *ptep; @@ -1100,9 +1094,6 @@ pmap_l2ptp_ctor(void *mem, int size, void *arg, int flags) cpu_tlb_flushD_SE(va); cpu_cpwait(); } -#ifdef ARM_USE_SMALL_ALLOC - } -#endif #endif memset(mem, 0, L2_TABLE_SIZE_REAL); PTE_SYNC_RANGE(mem, L2_TABLE_SIZE_REAL / sizeof(pt_entry_t)); @@ -2259,10 +2250,6 @@ pmap_alloc_specials(vm_offset_t *availp, int pages, vm_offset_t *vap, * (physical) address starting relative to 0] */ #define PMAP_STATIC_L2_SIZE 16 -#ifdef ARM_USE_SMALL_ALLOC -extern struct mtx smallalloc_mtx; -#endif - void pmap_bootstrap(vm_offset_t firstaddr, struct pv_addr *l1pt) { @@ -2425,10 +2412,6 @@ pmap_bootstrap(vm_offset_t firstaddr, struct pv_addr *l1pt) kernel_vm_end = pmap_curmaxkvaddr; mtx_init(&cmtx, "TMP mappings mtx", NULL, MTX_DEF); -#ifdef ARM_USE_SMALL_ALLOC - mtx_init(&smallalloc_mtx, "Small alloc page list", NULL, MTX_DEF); - arm_init_smallalloc(); -#endif pmap_set_pcb_pagedir(kernel_pmap, thread0.td_pcb); } @@ -2672,11 +2655,7 @@ pmap_remove_pages(pmap_t pmap) KASSERT(l2b != NULL, ("No L2 bucket in pmap_remove_pages")); pt = &l2b->l2b_kva[l2pte_index(pv->pv_va)]; m = PHYS_TO_VM_PAGE(*pt & L2_ADDR_MASK); -#ifdef ARM_USE_SMALL_ALLOC - KASSERT((vm_offset_t)m >= alloc_firstaddr, ("Trying to access non-existent page va %x pte %x", pv->pv_va, *pt)); -#else KASSERT((vm_offset_t)m >= KERNBASE, ("Trying to access non-existent page va %x pte %x", pv->pv_va, *pt)); -#endif *pt = 0; PTE_SYNC(pt); npv = TAILQ_NEXT(pv, pv_plist); @@ -2935,9 +2914,6 @@ pmap_kremove(vm_offset_t va) vm_offset_t pmap_map(vm_offset_t *virt, vm_offset_t start, vm_offset_t end, int prot) { -#ifdef ARM_USE_SMALL_ALLOC - return (arm_ptovirt(start)); -#else vm_offset_t sva = *virt; vm_offset_t va = sva; @@ -2952,7 +2928,6 @@ pmap_map(vm_offset_t *virt, vm_offset_t start, vm_offset_t end, int prot) } *virt = va; return (sva); -#endif } static void @@ -4010,27 +3985,11 @@ pmap_remove(pmap_t pm, vm_offset_t sva, vm_offset_t eva) void pmap_zero_page_generic(vm_paddr_t phys, int off, int size) { -#ifdef ARM_USE_SMALL_ALLOC - char *dstpg; -#endif if (_arm_bzero && size >= _min_bzero_size && _arm_bzero((void *)(phys + off), size, IS_PHYSICAL) == 0) return; -#ifdef ARM_USE_SMALL_ALLOC - dstpg = (char *)arm_ptovirt(phys); - if (off || size != PAGE_SIZE) { - bzero(dstpg + off, size); - cpu_dcache_wbinv_range((vm_offset_t)(dstpg + off), size); - cpu_l2cache_wbinv_range((vm_offset_t)(dstpg + off), size); - } else { - bzero_page((vm_offset_t)dstpg); - cpu_dcache_wbinv_range((vm_offset_t)dstpg, PAGE_SIZE); - cpu_l2cache_wbinv_range((vm_offset_t)dstpg, PAGE_SIZE); - } -#else - mtx_lock(&cmtx); /* * Hook in the page, zero it, invalidate the TLB as needed. @@ -4048,7 +4007,6 @@ pmap_zero_page_generic(vm_paddr_t phys, int off, int size) bzero_page(cdstp); mtx_unlock(&cmtx); -#endif } #endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */ @@ -4056,23 +4014,11 @@ pmap_zero_page_generic(vm_paddr_t phys, int off, int size) void pmap_zero_page_xscale(vm_paddr_t phys, int off, int size) { -#ifdef ARM_USE_SMALL_ALLOC - char *dstpg; -#endif if (_arm_bzero && size >= _min_bzero_size && _arm_bzero((void *)(phys + off), size, IS_PHYSICAL) == 0) return; -#ifdef ARM_USE_SMALL_ALLOC - dstpg = (char *)arm_ptovirt(phys); - if (off || size != PAGE_SIZE) { - bzero(dstpg + off, size); - cpu_dcache_wbinv_range((vm_offset_t)(dstpg + off), size); - } else { - bzero_page((vm_offset_t)dstpg); - cpu_dcache_wbinv_range((vm_offset_t)dstpg, PAGE_SIZE); - } -#else + mtx_lock(&cmtx); /* * Hook in the page, zero it, and purge the cache for that @@ -4090,7 +4036,6 @@ pmap_zero_page_xscale(vm_paddr_t phys, int off, int size) bzero_page(cdstp); mtx_unlock(&cmtx); xscale_cache_clean_minidata(); -#endif } /* @@ -4415,9 +4360,6 @@ pmap_copy_page_offs_xscale(vm_paddr_t a_phys, vm_offset_t a_offs, void pmap_copy_page(vm_page_t src, vm_page_t dst) { -#ifdef ARM_USE_SMALL_ALLOC - vm_offset_t srcpg, dstpg; -#endif cpu_dcache_wbinv_all(); cpu_l2cache_wbinv_all(); @@ -4425,15 +4367,7 @@ pmap_copy_page(vm_page_t src, vm_page_t dst) _arm_memcpy((void *)VM_PAGE_TO_PHYS(dst), (void *)VM_PAGE_TO_PHYS(src), PAGE_SIZE, IS_PHYSICAL) == 0) return; -#ifdef ARM_USE_SMALL_ALLOC - srcpg = arm_ptovirt(VM_PAGE_TO_PHYS(src)); - dstpg = arm_ptovirt(VM_PAGE_TO_PHYS(dst)); - bcopy_page(srcpg, dstpg); - cpu_dcache_wbinv_range(dstpg, PAGE_SIZE); - cpu_l2cache_wbinv_range(dstpg, PAGE_SIZE); -#else pmap_copy_page_func(VM_PAGE_TO_PHYS(src), VM_PAGE_TO_PHYS(dst)); -#endif } int unmapped_buf_allowed = 1; @@ -4445,9 +4379,6 @@ pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], vm_page_t a_pg, b_pg; vm_offset_t a_pg_offset, b_pg_offset; int cnt; -#ifdef ARM_USE_SMALL_ALLOC - vm_offset_t a_va, b_va; -#endif cpu_dcache_wbinv_all(); cpu_l2cache_wbinv_all(); @@ -4458,16 +4389,8 @@ pmap_copy_pages(vm_page_t ma[], vm_offset_t a_offset, vm_page_t mb[], b_pg = mb[b_offset >> PAGE_SHIFT]; b_pg_offset = b_offset & PAGE_MASK; cnt = min(cnt, PAGE_SIZE - b_pg_offset); -#ifdef ARM_USE_SMALL_ALLOC - a_va = arm_ptovirt(VM_PAGE_TO_PHYS(a_pg)) + a_pg_offset; - b_va = arm_ptovirt(VM_PAGE_TO_PHYS(b_pg)) + b_pg_offset; - bcopy((char *)a_va, (char *)b_va, cnt); - cpu_dcache_wbinv_range(b_va, cnt); - cpu_l2cache_wbinv_range(b_va, cnt); -#else pmap_copy_page_offs_func(VM_PAGE_TO_PHYS(a_pg), a_pg_offset, VM_PAGE_TO_PHYS(b_pg), b_pg_offset, cnt); -#endif xfersize -= cnt; a_offset += cnt; b_offset += cnt; diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c index fdfeca4..c51ae56 100644 --- a/sys/arm/arm/vm_machdep.c +++ b/sys/arm/arm/vm_machdep.c @@ -82,8 +82,6 @@ __FBSDID("$FreeBSD$"); CTASSERT(sizeof(struct switchframe) == 24); CTASSERT(sizeof(struct trapframe) == 80); -#ifndef ARM_USE_SMALL_ALLOC - #ifndef NSFBUFS #define NSFBUFS (512 + maxusers * 16) #endif @@ -119,7 +117,6 @@ static u_int sf_buf_alloc_want; * A lock used to synchronize access to the hash table and free list */ static struct mtx sf_buf_lock; -#endif /* !ARM_USE_SMALL_ALLOC */ /* * Finish a fork operation, with process p2 nearly set up. @@ -191,7 +188,7 @@ cpu_thread_swapout(struct thread *td) void sf_buf_free(struct sf_buf *sf) { -#ifndef ARM_USE_SMALL_ALLOC + mtx_lock(&sf_buf_lock); sf->ref_count--; if (sf->ref_count == 0) { @@ -204,10 +201,8 @@ sf_buf_free(struct sf_buf *sf) wakeup(&sf_buf_freelist); } mtx_unlock(&sf_buf_lock); -#endif } -#ifndef ARM_USE_SMALL_ALLOC /* * Allocate a pool of sf_bufs (sendfile(2) or "super-fast" if you prefer. :-)) */ @@ -233,7 +228,6 @@ sf_buf_init(void *arg) sf_buf_alloc_want = 0; mtx_init(&sf_buf_lock, "sf_buf", NULL, MTX_DEF); } -#endif /* * Get an sf_buf from the freelist. Will block if none are available. @@ -241,9 +235,6 @@ sf_buf_init(void *arg) struct sf_buf * sf_buf_alloc(struct vm_page *m, int flags) { -#ifdef ARM_USE_SMALL_ALLOC - return ((struct sf_buf *)m); -#else struct sf_head *hash_list; struct sf_buf *sf; int error; @@ -289,7 +280,6 @@ sf_buf_alloc(struct vm_page *m, int flags) done: mtx_unlock(&sf_buf_lock); return (sf); -#endif } void @@ -492,194 +482,3 @@ cpu_exit(struct thread *td) { } -#ifdef ARM_USE_SMALL_ALLOC - -static TAILQ_HEAD(,arm_small_page) pages_normal = - TAILQ_HEAD_INITIALIZER(pages_normal); -static TAILQ_HEAD(,arm_small_page) pages_wt = - TAILQ_HEAD_INITIALIZER(pages_wt); -static TAILQ_HEAD(,arm_small_page) free_pgdesc = - TAILQ_HEAD_INITIALIZER(free_pgdesc); - -extern uma_zone_t l2zone; - -struct mtx smallalloc_mtx; - -vm_offset_t alloc_firstaddr; - -#ifdef ARM_HAVE_SUPERSECTIONS -#define S_FRAME L1_SUP_FRAME -#define S_SIZE L1_SUP_SIZE -#else -#define S_FRAME L1_S_FRAME -#define S_SIZE L1_S_SIZE -#endif - -vm_offset_t -arm_ptovirt(vm_paddr_t pa) -{ - int i; - vm_offset_t addr = alloc_firstaddr; - - KASSERT(alloc_firstaddr != 0, ("arm_ptovirt called too early ?")); - for (i = 0; dump_avail[i + 1]; i += 2) { - if (pa >= dump_avail[i] && pa < dump_avail[i + 1]) - break; - addr += (dump_avail[i + 1] & S_FRAME) + S_SIZE - - (dump_avail[i] & S_FRAME); - } - KASSERT(dump_avail[i + 1] != 0, ("Trying to access invalid physical address")); - return (addr + (pa - (dump_avail[i] & S_FRAME))); -} - -void -arm_init_smallalloc(void) -{ - vm_offset_t to_map = 0, mapaddr; - int i; - - /* - * We need to use dump_avail and not phys_avail, since we want to - * map the whole memory and not just the memory available to the VM - * to be able to do a pa => va association for any address. - */ - - for (i = 0; dump_avail[i + 1]; i+= 2) { - to_map += (dump_avail[i + 1] & S_FRAME) + S_SIZE - - (dump_avail[i] & S_FRAME); - } - alloc_firstaddr = mapaddr = KERNBASE - to_map; - for (i = 0; dump_avail[i + 1]; i+= 2) { - vm_offset_t size = (dump_avail[i + 1] & S_FRAME) + - S_SIZE - (dump_avail[i] & S_FRAME); - vm_offset_t did = 0; - while (size > 0) { -#ifdef ARM_HAVE_SUPERSECTIONS - pmap_kenter_supersection(mapaddr, - (dump_avail[i] & L1_SUP_FRAME) + did, - SECTION_CACHE); -#else - pmap_kenter_section(mapaddr, - (dump_avail[i] & L1_S_FRAME) + did, SECTION_CACHE); -#endif - mapaddr += S_SIZE; - did += S_SIZE; - size -= S_SIZE; - } - } -} - -void -arm_add_smallalloc_pages(void *list, void *mem, int bytes, int pagetable) -{ - struct arm_small_page *pg; - - bytes &= ~PAGE_MASK; - while (bytes > 0) { - pg = (struct arm_small_page *)list; - pg->addr = mem; - if (pagetable) - TAILQ_INSERT_HEAD(&pages_wt, pg, pg_list); - else - TAILQ_INSERT_HEAD(&pages_normal, pg, pg_list); - list = (char *)list + sizeof(*pg); - mem = (char *)mem + PAGE_SIZE; - bytes -= PAGE_SIZE; - } -} - -void * -uma_small_alloc(uma_zone_t zone, int bytes, u_int8_t *flags, int wait) -{ - void *ret; - struct arm_small_page *sp; - TAILQ_HEAD(,arm_small_page) *head; - vm_page_t m; - - *flags = UMA_SLAB_PRIV; - /* - * For CPUs where we setup page tables as write back, there's no - * need to maintain two separate pools. - */ - if (zone == l2zone && pte_l1_s_cache_mode != pte_l1_s_cache_mode_pt) - head = (void *)&pages_wt; - else - head = (void *)&pages_normal; - - mtx_lock(&smallalloc_mtx); - sp = TAILQ_FIRST(head); - - if (!sp) { - int pflags; - - mtx_unlock(&smallalloc_mtx); - if (zone == l2zone && - pte_l1_s_cache_mode != pte_l1_s_cache_mode_pt) { - *flags = UMA_SLAB_KMEM; - ret = ((void *)kmem_malloc(kmem_arena, bytes, - M_NOWAIT)); - return (ret); - } - pflags = malloc2vm_flags(wait) | VM_ALLOC_WIRED; - for (;;) { - m = vm_page_alloc(NULL, 0, pflags | VM_ALLOC_NOOBJ); - if (m == NULL) { - if (wait & M_NOWAIT) - return (NULL); - VM_WAIT; - } else - break; - } - ret = (void *)arm_ptovirt(VM_PAGE_TO_PHYS(m)); - if ((wait & M_ZERO) && (m->flags & PG_ZERO) == 0) - bzero(ret, PAGE_SIZE); - return (ret); - } - TAILQ_REMOVE(head, sp, pg_list); - TAILQ_INSERT_HEAD(&free_pgdesc, sp, pg_list); - ret = sp->addr; - mtx_unlock(&smallalloc_mtx); - if ((wait & M_ZERO)) - bzero(ret, bytes); - return (ret); -} - -void -uma_small_free(void *mem, int size, u_int8_t flags) -{ - pd_entry_t *pd; - pt_entry_t *pt; - - if (flags & UMA_SLAB_KMEM) - kmem_free(kmem_arena, (vm_offset_t)mem, size); - else { - struct arm_small_page *sp; - - if ((vm_offset_t)mem >= KERNBASE) { - mtx_lock(&smallalloc_mtx); - sp = TAILQ_FIRST(&free_pgdesc); - KASSERT(sp != NULL, ("No more free page descriptor ?")); - TAILQ_REMOVE(&free_pgdesc, sp, pg_list); - sp->addr = mem; - pmap_get_pde_pte(kernel_pmap, (vm_offset_t)mem, &pd, - &pt); - if ((*pd & pte_l1_s_cache_mask) == - pte_l1_s_cache_mode_pt && - pte_l1_s_cache_mode_pt != pte_l1_s_cache_mode) - TAILQ_INSERT_HEAD(&pages_wt, sp, pg_list); - else - TAILQ_INSERT_HEAD(&pages_normal, sp, pg_list); - mtx_unlock(&smallalloc_mtx); - } else { - vm_page_t m; - vm_paddr_t pa = vtophys((vm_offset_t)mem); - - m = PHYS_TO_VM_PAGE(pa); - m->wire_count--; - vm_page_free(m); - atomic_subtract_int(&cnt.v_wire_count, 1); - } - } -} - -#endif diff --git a/sys/arm/conf/AVILA b/sys/arm/conf/AVILA index 4246462..502fd25 100644 --- a/sys/arm/conf/AVILA +++ b/sys/arm/conf/AVILA @@ -24,7 +24,6 @@ include "../xscale/ixp425/std.ixp425" # NB: memory mapping is defined in std.avila include "../xscale/ixp425/std.avila" options XSCALE_CACHE_READ_WRITE_ALLOCATE -#options ARM_USE_SMALL_ALLOC #To statically compile in device wiring instead of /boot/device.hints hints "AVILA.hints" #Default places to look for devices. makeoptions MODULES_OVERRIDE="" diff --git a/sys/arm/conf/CAMBRIA b/sys/arm/conf/CAMBRIA index 377f45d..57c6387 100644 --- a/sys/arm/conf/CAMBRIA +++ b/sys/arm/conf/CAMBRIA @@ -24,7 +24,6 @@ include "../xscale/ixp425/std.ixp435" # NB: memory mapping is defined in std.avila include "../xscale/ixp425/std.avila" options XSCALE_CACHE_READ_WRITE_ALLOCATE -#options ARM_USE_SMALL_ALLOC #To statically compile in device wiring instead of /boot/device.hints hints "CAMBRIA.hints" # Default places to look for devices. diff --git a/sys/arm/conf/CNS11XXNAS b/sys/arm/conf/CNS11XXNAS index 18d84e5..c459d0e 100644 --- a/sys/arm/conf/CNS11XXNAS +++ b/sys/arm/conf/CNS11XXNAS @@ -102,7 +102,6 @@ device loop device md device random # Entropy device -#options ARM_USE_SMALL_ALLOC device usb #options USB_DEBUG diff --git a/sys/arm/conf/CRB b/sys/arm/conf/CRB index 850121e..0a19f3b 100644 --- a/sys/arm/conf/CRB +++ b/sys/arm/conf/CRB @@ -106,6 +106,5 @@ device md device random # Entropy device device iopwdog -options ARM_USE_SMALL_ALLOC # Floppy drives diff --git a/sys/arm/conf/EP80219 b/sys/arm/conf/EP80219 index 8d2c5bf..107ef4b 100644 --- a/sys/arm/conf/EP80219 +++ b/sys/arm/conf/EP80219 @@ -101,7 +101,6 @@ options XSCALE_CACHE_READ_WRITE_ALLOCATE device md device random # Entropy device -options ARM_USE_SMALL_ALLOC # Floppy drives options INCLUDE_CONFIG_FILE # Include this file in kernel diff --git a/sys/arm/conf/IQ31244 b/sys/arm/conf/IQ31244 index c1cbc13..ba303c7 100644 --- a/sys/arm/conf/IQ31244 +++ b/sys/arm/conf/IQ31244 @@ -106,6 +106,5 @@ options XSCALE_CACHE_READ_WRITE_ALLOCATE device md device random # Entropy device -options ARM_USE_SMALL_ALLOC # Floppy drives diff --git a/sys/arm/conf/NSLU b/sys/arm/conf/NSLU index efbdbd1..3da5adf 100644 --- a/sys/arm/conf/NSLU +++ b/sys/arm/conf/NSLU @@ -105,8 +105,6 @@ device loop device md device random # Entropy device -#options ARM_USE_SMALL_ALLOC - device usb options USB_DEBUG device ohci diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h index d796c46..8b98f6c 100644 --- a/sys/arm/include/pmap.h +++ b/sys/arm/include/pmap.h @@ -708,17 +708,6 @@ extern char *_tmppt; void pmap_postinit(void); -#ifdef ARM_USE_SMALL_ALLOC -void arm_add_smallalloc_pages(void *, void *, int, int); -vm_offset_t arm_ptovirt(vm_paddr_t); -void arm_init_smallalloc(void); -struct arm_small_page { - void *addr; - TAILQ_ENTRY(arm_small_page) pg_list; -}; - -#endif - extern vm_paddr_t dump_avail[]; #endif /* _KERNEL */ diff --git a/sys/arm/include/sf_buf.h b/sys/arm/include/sf_buf.h index fc00cc5..2ec07de 100644 --- a/sys/arm/include/sf_buf.h +++ b/sys/arm/include/sf_buf.h @@ -29,33 +29,10 @@ #ifndef _MACHINE_SF_BUF_H_ #define _MACHINE_SF_BUF_H_ +#include <sys/queue.h> struct vm_page; -#ifdef ARM_USE_SMALL_ALLOC - -#include <vm/vm.h> -#include <vm/vm_param.h> -#include <vm/vm_page.h> - -struct sf_buf; - -static __inline vm_offset_t -sf_buf_kva(struct sf_buf *sf) -{ - return arm_ptovirt(VM_PAGE_TO_PHYS((vm_page_t)sf)); -} - -static __inline vm_page_t -sf_buf_page(struct sf_buf *sf) -{ - return ((vm_page_t)sf); -} - -#else - -#include <sys/queue.h> - struct sf_buf { LIST_ENTRY(sf_buf) list_entry; /* list of buffers */ TAILQ_ENTRY(sf_buf) free_entry; /* list of buffers */ @@ -78,8 +55,6 @@ sf_buf_page(struct sf_buf *sf) return (sf->m); } -#endif - struct sf_buf * sf_buf_alloc(struct vm_page *m, int flags); void sf_buf_free(struct sf_buf *sf); diff --git a/sys/arm/include/vmparam.h b/sys/arm/include/vmparam.h index 93d7587..010834d 100644 --- a/sys/arm/include/vmparam.h +++ b/sys/arm/include/vmparam.h @@ -82,15 +82,15 @@ #define VM_PHYSSEG_DENSE /* - * Create three free page pools: VM_FREEPOOL_DEFAULT is the default pool - * from which physical pages are allocated and VM_FREEPOOL_DIRECT is - * the pool from which physical pages for small UMA objects are - * allocated. + * Create two free page pools. Since the ARM kernel virtual address + * space does not include a mapping onto the machine's entire physical + * memory, VM_FREEPOOL_DIRECT is defined as an alias for the default + * pool, VM_FREEPOOL_DEFAULT. */ -#define VM_NFREEPOOL 3 -#define VM_FREEPOOL_CACHE 2 +#define VM_NFREEPOOL 2 +#define VM_FREEPOOL_CACHE 1 #define VM_FREEPOOL_DEFAULT 0 -#define VM_FREEPOOL_DIRECT 1 +#define VM_FREEPOOL_DIRECT 0 /* * we support 2 free lists: @@ -126,23 +126,9 @@ #define UPT_MIN_ADDRESS VADDR(UPTPTDI, 0) #define VM_MIN_ADDRESS (0x00001000) -#ifdef ARM_USE_SMALL_ALLOC -/* - * ARM_KERN_DIRECTMAP is used to make sure there's enough space between - * VM_MAXUSER_ADDRESS and KERNBASE to map the whole memory. - * It has to be a compile-time constant, even if arm_init_smallalloc(), - * which will do the mapping, gets the real amount of memory at runtime, - * because VM_MAXUSER_ADDRESS is a constant. - */ -#ifndef ARM_KERN_DIRECTMAP -#define ARM_KERN_DIRECTMAP 512 * 1024 * 1024 /* 512 MB */ -#endif -#define VM_MAXUSER_ADDRESS KERNBASE - ARM_KERN_DIRECTMAP -#else /* ARM_USE_SMALL_ALLOC */ #ifndef VM_MAXUSER_ADDRESS #define VM_MAXUSER_ADDRESS KERNBASE #endif /* VM_MAXUSER_ADDRESS */ -#endif /* ARM_USE_SMALL_ALLOC */ #define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS #define USRSTACK VM_MAXUSER_ADDRESS @@ -176,10 +162,6 @@ VM_MIN_KERNEL_ADDRESS + 1) * 2 / 5) #endif -#ifdef ARM_USE_SMALL_ALLOC -#define UMA_MD_SMALL_ALLOC -#endif /* ARM_USE_SMALL_ALLOC */ - extern vm_offset_t vm_max_kernel_address; #define ZERO_REGION_SIZE (64 * 1024) /* 64KB */ diff --git a/sys/arm/xscale/i80321/ep80219_machdep.c b/sys/arm/xscale/i80321/ep80219_machdep.c index 4857fcd..c5e9141 100644 --- a/sys/arm/xscale/i80321/ep80219_machdep.c +++ b/sys/arm/xscale/i80321/ep80219_machdep.c @@ -231,21 +231,6 @@ initarm(struct arm_boot_params *abp) valloc_pages(kernelstack, KSTACK_PAGES); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); -#ifdef ARM_USE_SMALL_ALLOC - freemempos -= PAGE_SIZE; - freemem_pt = trunc_page(freemem_pt); - freemem_after = freemempos - ((freemem_pt - 0xa0100000) / - PAGE_SIZE) * sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0x20000000), - (void *)0xc0100000, freemem_pt - 0xa0100000, 1); - freemem_after -= ((freemem_after - 0xa0001000) / PAGE_SIZE) * - sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0x20000000), - (void *)0xc0001000, trunc_page(freemem_after) - 0xa0001000, 0); - - freemempos = trunc_page(freemem_after); - freemempos -= PAGE_SIZE; -#endif /* * Allocate memory for the l1 and l2 page tables. The scheme to avoid * wasting memory by allocating the l1pt on the first 16k memory was @@ -285,15 +270,6 @@ initarm(struct arm_boot_params *abp) VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); -#ifdef ARM_USE_SMALL_ALLOC - if ((freemem_after + 2 * PAGE_SIZE) <= afterkern) { - arm_add_smallalloc_pages((void *)(freemem_after), - (void*)(freemem_after + PAGE_SIZE), - afterkern - (freemem_after + PAGE_SIZE), 0); - - } -#endif - /* Map the Mini-Data cache clean area. */ xscale_setup_minidata(l1pagetable, afterkern, minidataclean.pv_pa); @@ -359,10 +335,6 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + PAGE_SIZE; - /* - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ dump_avail[0] = 0xa0000000; dump_avail[1] = 0xa0000000 + memsize; dump_avail[2] = 0; @@ -375,13 +347,6 @@ initarm(struct arm_boot_params *abp) mutex_init(); i = 0; -#ifdef ARM_USE_SMALL_ALLOC - phys_avail[i++] = 0xa0000000; - phys_avail[i++] = 0xa0001000; /* - *XXX: Gross hack to get our - * pages in the vm_page_array - . */ -#endif phys_avail[i++] = round_page(virtual_avail - KERNBASE + IQ80321_SDRAM_START); phys_avail[i++] = trunc_page(0xa0000000 + memsize - 1); phys_avail[i++] = 0; diff --git a/sys/arm/xscale/i80321/iq31244_machdep.c b/sys/arm/xscale/i80321/iq31244_machdep.c index e706280..31b9d70 100644 --- a/sys/arm/xscale/i80321/iq31244_machdep.c +++ b/sys/arm/xscale/i80321/iq31244_machdep.c @@ -232,21 +232,6 @@ initarm(struct arm_boot_params *abp) valloc_pages(kernelstack, KSTACK_PAGES); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); -#ifdef ARM_USE_SMALL_ALLOC - freemempos -= PAGE_SIZE; - freemem_pt = trunc_page(freemem_pt); - freemem_after = freemempos - ((freemem_pt - 0xa0100000) / - PAGE_SIZE) * sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0x20000000), - (void *)0xc0100000, freemem_pt - 0xa0100000, 1); - freemem_after -= ((freemem_after - 0xa0001000) / PAGE_SIZE) * - sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0x20000000), - (void *)0xc0001000, trunc_page(freemem_after) - 0xa0001000, 0); - - freemempos = trunc_page(freemem_after); - freemempos -= PAGE_SIZE; -#endif /* * Allocate memory for the l1 and l2 page tables. The scheme to avoid * wasting memory by allocating the l1pt on the first 16k memory was @@ -286,15 +271,6 @@ initarm(struct arm_boot_params *abp) VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); -#ifdef ARM_USE_SMALL_ALLOC - if ((freemem_after + 2 * PAGE_SIZE) <= afterkern) { - arm_add_smallalloc_pages((void *)(freemem_after), - (void*)(freemem_after + PAGE_SIZE), - afterkern - (freemem_after + PAGE_SIZE), 0); - - } -#endif - /* Map the Mini-Data cache clean area. */ xscale_setup_minidata(l1pagetable, afterkern, minidataclean.pv_pa); @@ -360,10 +336,6 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + PAGE_SIZE; - /* - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ dump_avail[0] = 0xa0000000; dump_avail[1] = 0xa0000000 + memsize; dump_avail[2] = 0; @@ -376,13 +348,6 @@ initarm(struct arm_boot_params *abp) mutex_init(); i = 0; -#ifdef ARM_USE_SMALL_ALLOC - phys_avail[i++] = 0xa0000000; - phys_avail[i++] = 0xa0001000; /* - *XXX: Gross hack to get our - * pages in the vm_page_array - . */ -#endif phys_avail[i++] = round_page(virtual_avail - KERNBASE + SDRAM_START); phys_avail[i++] = trunc_page(0xa0000000 + memsize - 1); phys_avail[i++] = 0; diff --git a/sys/arm/xscale/i8134x/crb_machdep.c b/sys/arm/xscale/i8134x/crb_machdep.c index 5bc6c10..1cf79b9 100644 --- a/sys/arm/xscale/i8134x/crb_machdep.c +++ b/sys/arm/xscale/i8134x/crb_machdep.c @@ -230,22 +230,6 @@ initarm(struct arm_boot_params *abp) valloc_pages(undstack, UND_STACK_SIZE); valloc_pages(kernelstack, KSTACK_PAGES); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); -#ifdef ARM_USE_SMALL_ALLOC - freemempos -= PAGE_SIZE; - freemem_pt = trunc_page(freemem_pt); - freemem_after = freemempos - ((freemem_pt - 0x00100000) / - PAGE_SIZE) * sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0xc0000000) - , (void *)0xc0100000, freemem_pt - 0x00100000, 1); - freemem_after -= ((freemem_after - 0x00001000) / PAGE_SIZE) * - sizeof(struct arm_small_page); -#if 0 - arm_add_smallalloc_pages((void *)(freemem_after + 0xc0000000) - , (void *)0xc0001000, trunc_page(freemem_after) - 0x00001000, 0); -#endif - freemempos = trunc_page(freemem_after); - freemempos -= PAGE_SIZE; -#endif /* * Now we start construction of the L1 page table * We start by mapping the L2 page tables into the L1. @@ -274,15 +258,6 @@ initarm(struct arm_boot_params *abp) } -#ifdef ARM_USE_SMALL_ALLOC - if ((freemem_after + 2 * PAGE_SIZE) <= afterkern) { - arm_add_smallalloc_pages((void *)(freemem_after), - (void*)(freemem_after + PAGE_SIZE), - afterkern - (freemem_after + PAGE_SIZE), 0); - - } -#endif - /* Map the vector page. */ pmap_map_entry(l1pagetable, ARM_VECTORS_HIGH, systempage.pv_pa, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); @@ -338,10 +313,7 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + PAGE_SIZE; - /* - * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ + dump_avail[0] = 0x00000000; dump_avail[1] = 0x00000000 + memsize; dump_avail[2] = 0; @@ -354,13 +326,6 @@ initarm(struct arm_boot_params *abp) mutex_init(); i = 0; -#ifdef ARM_USE_SMALL_ALLOC - phys_avail[i++] = 0x00001000; - phys_avail[i++] = 0x00002000; /* - *XXX: Gross hack to get our - * pages in the vm_page_array - . */ -#endif phys_avail[i++] = round_page(virtual_avail - KERNBASE + SDRAM_START); phys_avail[i++] = trunc_page(0x00000000 + memsize - 1); phys_avail[i++] = 0; diff --git a/sys/arm/xscale/ixp425/avila_machdep.c b/sys/arm/xscale/ixp425/avila_machdep.c index 8166a4b..3abdf22 100644 --- a/sys/arm/xscale/ixp425/avila_machdep.c +++ b/sys/arm/xscale/ixp425/avila_machdep.c @@ -301,24 +301,6 @@ initarm(struct arm_boot_params *abp) valloc_pages(kernelstack, KSTACK_PAGES); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); -#ifdef ARM_USE_SMALL_ALLOC - freemempos -= PAGE_SIZE; - freemem_pt = trunc_page(freemem_pt); - freemem_after = freemempos - ((freemem_pt - (PHYSADDR + 0x100000)) / - PAGE_SIZE) * sizeof(struct arm_small_page); - arm_add_smallalloc_pages( - (void *)(freemem_after + (KERNVIRTADDR - KERNPHYSADDR)), - (void *)0xc0100000, - freemem_pt - (PHYSADDR + 0x100000), 1); - freemem_after -= ((freemem_after - (PHYSADDR + 0x1000)) / PAGE_SIZE) * - sizeof(struct arm_small_page); - arm_add_smallalloc_pages( - (void *)(freemem_after + (KERNVIRTADDR - KERNPHYSADDR)), - (void *)0xc0001000, - trunc_page(freemem_after) - (PHYSADDR + 0x1000), 0); - freemempos = trunc_page(freemem_after); - freemempos -= PAGE_SIZE; -#endif /* * Now construct the L1 page table. First map the L2 @@ -354,14 +336,6 @@ initarm(struct arm_boot_params *abp) pmap_map_entry(l1pagetable, afterkern, minidataclean.pv_pa, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); -#ifdef ARM_USE_SMALL_ALLOC - if ((freemem_after + 2 * PAGE_SIZE) <= afterkern) { - arm_add_smallalloc_pages((void *)(freemem_after), - (void*)(freemem_after + PAGE_SIZE), - afterkern - (freemem_after + PAGE_SIZE), 0); - - } -#endif /* Map the Mini-Data cache clean area. */ xscale_setup_minidata(l1pagetable, afterkern, @@ -442,13 +416,6 @@ initarm(struct arm_boot_params *abp) mutex_init(); i = 0; -#ifdef ARM_USE_SMALL_ALLOC - phys_avail[i++] = PHYSADDR; - phys_avail[i++] = PHYSADDR + PAGE_SIZE; /* - *XXX: Gross hack to get our - * pages in the vm_page_array. - */ -#endif phys_avail[i++] = round_page(virtual_avail - KERNBASE + PHYSADDR); phys_avail[i++] = trunc_page(PHYSADDR + memsize - 1); phys_avail[i++] = 0; diff --git a/sys/arm/xscale/pxa/pxa_machdep.c b/sys/arm/xscale/pxa/pxa_machdep.c index 0843088..a9cf13f 100644 --- a/sys/arm/xscale/pxa/pxa_machdep.c +++ b/sys/arm/xscale/pxa/pxa_machdep.c @@ -213,20 +213,6 @@ initarm(struct arm_boot_params *abp) valloc_pages(kernelstack, KSTACK_PAGES); alloc_pages(minidataclean.pv_pa, 1); valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); -#ifdef ARM_USE_SMALL_ALLOC - freemempos -= PAGE_SIZE; - freemem_pt = trunc_page(freemem_pt); - freemem_after = freemempos - ((freemem_pt - 0xa0100000) / - PAGE_SIZE) * sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0x20000000) - , (void *)0xc0100000, freemem_pt - 0xa0100000, 1); - freemem_after -= ((freemem_after - 0xa0001000) / PAGE_SIZE) * - sizeof(struct arm_small_page); - arm_add_smallalloc_pages((void *)(freemem_after + 0x20000000) - , (void *)0xc0001000, trunc_page(freemem_after) - 0xa0001000, 0); - freemempos = trunc_page(freemem_after); - freemempos -= PAGE_SIZE; -#endif /* * Allocate memory for the l1 and l2 page tables. The scheme to avoid * wasting memory by allocating the l1pt on the first 16k memory was @@ -267,13 +253,6 @@ initarm(struct arm_boot_params *abp) pmap_map_entry(l1pagetable, afterkern, minidataclean.pv_pa, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); -#ifdef ARM_USE_SMALL_ALLOC - if ((freemem_after + 2 * PAGE_SIZE) <= afterkern) { - arm_add_smallalloc_pages((void *)(freemem_after), - (void*)(freemem_after + PAGE_SIZE), - afterkern - (freemem_after + PAGE_SIZE), 0); - } -#endif /* Map the Mini-Data cache clean area. */ xscale_setup_minidata(l1pagetable, afterkern, @@ -350,10 +329,6 @@ initarm(struct arm_boot_params *abp) arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); pmap_curmaxkvaddr = afterkern + PAGE_SIZE; - /* - * ARM USE_SMALL_ALLOC uses dump_avail, so it must be filled before - * calling pmap_bootstrap. - */ i = 0; for (j = 0; j < PXA2X0_SDRAM_BANKS; j++) { if (memsize[j] > 0) { @@ -371,13 +346,6 @@ initarm(struct arm_boot_params *abp) mutex_init(); i = 0; -#ifdef ARM_USE_SMALL_ALLOC - phys_avail[i++] = 0xa0000000; - phys_avail[i++] = 0xa0001000; /* - *XXX: Gross hack to get our - * pages in the vm_page_array - . */ -#endif for (j = 0; j < PXA2X0_SDRAM_BANKS; j++) { if (memsize[j] > 0) { phys_avail[i] = round_page(memstart[j]); @@ -393,11 +361,7 @@ initarm(struct arm_boot_params *abp) phys_avail[i++] = 0; dump_avail[i] = 0; phys_avail[i] = 0; -#ifdef ARM_USE_SMALL_ALLOC - phys_avail[2] = round_page(virtual_avail - KERNBASE + phys_avail[2]); -#else phys_avail[0] = round_page(virtual_avail - KERNBASE + phys_avail[0]); -#endif init_param2(physmem); kdb_init(); diff --git a/sys/arm/xscale/pxa/std.pxa b/sys/arm/xscale/pxa/std.pxa index 63ef885..b8e3484 100644 --- a/sys/arm/xscale/pxa/std.pxa +++ b/sys/arm/xscale/pxa/std.pxa @@ -6,5 +6,4 @@ makeoptions KERNPHYSADDR=0xa0200000 makeoptions KERNVIRTADDR=0xc0200000 makeoptions CONF_CFLAGS=-mcpu=xscale options XSCALE_CACHE_READ_WRITE_ALLOCATE -options ARM_USE_SMALL_ALLOC machine arm |