Module Name: src Committed By: rmind Date: Sat Jan 28 00:00:06 UTC 2012
Modified Files: src/sys/kern: subr_pool.c vfs_bio.c src/sys/ufs/ffs: ffs_vfsops.c src/sys/uvm: uvm_init.c uvm_kmguard.c uvm_map.c uvm_pdpolicy_clock.c uvm_swap.c Log Message: pool_page_alloc, pool_page_alloc_meta: avoid extra compare, use const. ffs_mountfs,sys_swapctl: replace memset with kmem_zalloc. sys_swapctl: move kmem_free outside the lock path. uvm_init: fix comment, remove pointless numeration of steps. uvm_map_enter: remove meflagval variable. Fix some indentation. To generate a diff of this commit: cvs rdiff -u -r1.191 -r1.192 src/sys/kern/subr_pool.c cvs rdiff -u -r1.234 -r1.235 src/sys/kern/vfs_bio.c cvs rdiff -u -r1.273 -r1.274 src/sys/ufs/ffs/ffs_vfsops.c cvs rdiff -u -r1.42 -r1.43 src/sys/uvm/uvm_init.c cvs rdiff -u -r1.6 -r1.7 src/sys/uvm/uvm_kmguard.c cvs rdiff -u -r1.311 -r1.312 src/sys/uvm/uvm_map.c cvs rdiff -u -r1.15 -r1.16 src/sys/uvm/uvm_pdpolicy_clock.c cvs rdiff -u -r1.159 -r1.160 src/sys/uvm/uvm_swap.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/kern/subr_pool.c diff -u src/sys/kern/subr_pool.c:1.191 src/sys/kern/subr_pool.c:1.192 --- src/sys/kern/subr_pool.c:1.191 Fri Jan 27 19:48:40 2012 +++ src/sys/kern/subr_pool.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_pool.c,v 1.191 2012/01/27 19:48:40 para Exp $ */ +/* $NetBSD: subr_pool.c,v 1.192 2012/01/28 00:00:06 rmind Exp $ */ /*- * Copyright (c) 1997, 1999, 2000, 2002, 2007, 2008, 2010 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.191 2012/01/27 19:48:40 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_pool.c,v 1.192 2012/01/28 00:00:06 rmind Exp $"); #include "opt_ddb.h" #include "opt_pool.h" @@ -531,8 +531,8 @@ pr_rmpage(struct pool *pp, struct pool_i void pool_subsystem_init(void) { - int idx; size_t size; + int idx; mutex_init(&pool_head_lock, MUTEX_DEFAULT, IPL_NONE); mutex_init(&pool_allocator_lock, MUTEX_DEFAULT, IPL_NONE); @@ -2718,7 +2718,9 @@ void pool_page_free(struct pool *, void #ifdef POOL_SUBPAGE struct pool_allocator pool_allocator_kmem_fullpage = { - pool_page_alloc, pool_page_free, 0 + .pa_alloc = pool_page_alloc, + .pa_free = pool_page_free, + .pa_pagesz = 0 }; #else struct pool_allocator pool_allocator_kmem = { @@ -2733,7 +2735,9 @@ void pool_page_free_nointr(struct pool * #ifdef POOL_SUBPAGE struct pool_allocator pool_allocator_nointr_fullpage = { - pool_page_alloc_nointr, pool_page_free_nointr, 0, + .pa_alloc = pool_page_alloc_nointr, + .pa_free = pool_page_free_nointr, + .pa_pagesz = 0 }; #else struct pool_allocator pool_allocator_nointr = { @@ -2755,7 +2759,9 @@ void *pool_subpage_alloc_nointr(struct p void pool_subpage_free_nointr(struct pool *, void *); struct pool_allocator pool_allocator_nointr = { - pool_subpage_alloc, pool_subpage_free, POOL_SUBPAGE, + .pa_alloc = pool_subpage_alloc, + .pa_free = pool_subpage_free, + .pa_pagesz = POOL_SUBPAGE }; #endif /* POOL_SUBPAGE */ @@ -2791,18 +2797,14 @@ pool_allocator_free(struct pool *pp, voi void * pool_page_alloc(struct pool *pp, int flags) { - bool waitok = (flags & PR_WAITOK) ? true : false; - int rc; + const vm_flag_t vflags = (flags & PR_WAITOK) ? VM_SLEEP: VM_NOSLEEP; vmem_addr_t va; + int ret; - rc = uvm_km_kmem_alloc(kmem_va_arena, - pp->pr_alloc->pa_pagesz, - ((waitok ? VM_SLEEP : VM_NOSLEEP) | VM_INSTANTFIT), &va); + ret = uvm_km_kmem_alloc(kmem_va_arena, pp->pr_alloc->pa_pagesz, + vflags | VM_INSTANTFIT, &va); - if (rc != 0) - return NULL; - else - return (void *)va; + return ret ? NULL : (void *)va; } void @@ -2815,25 +2817,21 @@ pool_page_free(struct pool *pp, void *v) static void * pool_page_alloc_meta(struct pool *pp, int flags) { - bool waitok = (flags & PR_WAITOK) ? true : false; - int rc; - vmem_addr_t addr; + const vm_flag_t vflags = (flags & PR_WAITOK) ? VM_SLEEP: VM_NOSLEEP; + vmem_addr_t va; + int ret; - rc = vmem_alloc(kmem_meta_arena, pp->pr_alloc->pa_pagesz, - (waitok ? VM_SLEEP : VM_NOSLEEP) | VM_INSTANTFIT, &addr); + ret = vmem_alloc(kmem_meta_arena, pp->pr_alloc->pa_pagesz, + vflags | VM_INSTANTFIT, &va); - if (rc != 0) - return 0; - else - return (void *)addr; + return ret ? NULL : (void *)va; } static void pool_page_free_meta(struct pool *pp, void *v) { - vmem_free(kmem_meta_arena, (vmem_addr_t)v, - pp->pr_alloc->pa_pagesz); + vmem_free(kmem_meta_arena, (vmem_addr_t)v, pp->pr_alloc->pa_pagesz); } #ifdef POOL_SUBPAGE Index: src/sys/kern/vfs_bio.c diff -u src/sys/kern/vfs_bio.c:1.234 src/sys/kern/vfs_bio.c:1.235 --- src/sys/kern/vfs_bio.c:1.234 Fri Jan 27 19:48:40 2012 +++ src/sys/kern/vfs_bio.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_bio.c,v 1.234 2012/01/27 19:48:40 para Exp $ */ +/* $NetBSD: vfs_bio.c,v 1.235 2012/01/28 00:00:06 rmind Exp $ */ /*- * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -123,7 +123,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_bio.c,v 1.234 2012/01/27 19:48:40 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_bio.c,v 1.235 2012/01/28 00:00:06 rmind Exp $"); #include "opt_bufcache.h" @@ -231,17 +231,14 @@ static struct vm_map *buf_map; static void * bufpool_page_alloc(struct pool *pp, int flags) { - int rc; + const vm_flag_t vflags = (flags & PR_WAITOK) ? VM_SLEEP: VM_NOSLEEP; vmem_addr_t va; + int ret; - rc = uvm_km_kmem_alloc(kmem_va_arena, MAXBSIZE, - ((flags & PR_WAITOK) ? VM_SLEEP : VM_NOSLEEP) | VM_INSTANTFIT, - &va); + ret = uvm_km_kmem_alloc(kmem_va_arena, MAXBSIZE, + vflags | VM_INSTANTFIT, &va); - if (rc != 0) - return NULL; - else - return (void *)va; + return ret ? NULL : (void *)va; } static void Index: src/sys/ufs/ffs/ffs_vfsops.c diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.273 src/sys/ufs/ffs/ffs_vfsops.c:1.274 --- src/sys/ufs/ffs/ffs_vfsops.c:1.273 Fri Jan 27 19:22:49 2012 +++ src/sys/ufs/ffs/ffs_vfsops.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_vfsops.c,v 1.273 2012/01/27 19:22:49 para Exp $ */ +/* $NetBSD: ffs_vfsops.c,v 1.274 2012/01/28 00:00:06 rmind Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.273 2012/01/27 19:22:49 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.274 2012/01/28 00:00:06 rmind Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -890,8 +890,7 @@ ffs_mountfs(struct vnode *devvp, struct if (error) return error; - ump = kmem_alloc(sizeof(*ump), KM_SLEEP); - memset(ump, 0, sizeof *ump); + ump = kmem_zalloc(sizeof(*ump), KM_SLEEP); mutex_init(&ump->um_lock, MUTEX_DEFAULT, IPL_NONE); error = ffs_snapshot_init(ump); if (error) Index: src/sys/uvm/uvm_init.c diff -u src/sys/uvm/uvm_init.c:1.42 src/sys/uvm/uvm_init.c:1.43 --- src/sys/uvm/uvm_init.c:1.42 Fri Jan 27 19:48:41 2012 +++ src/sys/uvm/uvm_init.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_init.c,v 1.42 2012/01/27 19:48:41 para Exp $ */ +/* $NetBSD: uvm_init.c,v 1.43 2012/01/28 00:00:06 rmind Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_init.c,v 1.42 2012/01/27 19:48:41 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_init.c,v 1.43 2012/01/28 00:00:06 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -78,62 +78,59 @@ uvm_init(void) vaddr_t kvm_start, kvm_end; /* - * step 0: ensure that the hardware set the page size + * Ensure that the hardware set the page size, zero the UVM structure. */ if (uvmexp.pagesize == 0) { panic("uvm_init: page size not set"); } - /* - * step 1: zero the uvm structure - */ - memset(&uvm, 0, sizeof(uvm)); averunnable.fscale = FSCALE; /* - * step 2: init the page sub-system. this includes allocating the - * vm_page structures, and setting up all the page queues (and - * locks). available memory will be put in the "free" queue. - * kvm_start and kvm_end will be set to the area of kernel virtual - * memory which is available for general use. + * Init the page sub-system. This includes allocating the vm_page + * structures, and setting up all the page queues (and locks). + * Available memory will be put in the "free" queue, kvm_start and + * kvm_end will be set to the area of kernel virtual memory which + * is available for general use. */ uvm_page_init(&kvm_start, &kvm_end); /* - * step 3: init the map sub-system. + * Init the map sub-system. */ uvm_map_init(); /* - * step 4: setup the kernel's virtual memory data structures. this - * includes setting up the kernel_map/kernel_object. - * Bootstrap all kernel memory allocators. + * Setup the kernel's virtual memory data structures. This includes + * setting up the kernel_map/kernel_object. Bootstrap all kernel + * memory allocators. */ uao_init(); uvm_km_bootstrap(kvm_start, kvm_end); - /* - * step 5: setup uvm_map pool_caches and init the amap. + /* + * Setup uvm_map caches and init the amap. */ uvm_map_init_caches(); uvm_amap_init(); /* - * step 5: init the pmap module. the pmap module is free to allocate + * Init the pmap module. The pmap module is free to allocate * memory for its private use (e.g. pvlists). */ pmap_init(); - /* step 6: init the kernel maps virtual address caches. - * make kernel memory allocator ready for use. - * After this call the pool/kmem memory allocators can be used. + /* + * Init the kernel maps virtual address caches. Make kernel memory + * allocator ready for use. After this call the pool/kmem memory + * allocators can be used. */ uvm_km_init(); @@ -143,7 +140,7 @@ uvm_init(void) #endif /* - * step 6: init all pagers and the pager_map. + * Init all pagers and the pager_map. */ uvm_pager_init(); @@ -155,13 +152,13 @@ uvm_init(void) uvm_loan_init(); /* - * init emap subsystem. + * Init emap subsystem. */ uvm_emap_sysinit(); /* - * the VM system is now up! now that kmem is up we can resize the + * The VM system is now up! Now that kmem is up we can resize the * <obj,off> => <page> hash table for general use and enable paging * of kernel objects. */ @@ -172,7 +169,7 @@ uvm_init(void) uvmpdpol_reinit(); /* - * init anonymous memory systems + * Init anonymous memory systems. */ uvm_anon_init(); @@ -180,7 +177,7 @@ uvm_init(void) uvm_uarea_init(); /* - * init readahead module + * Init readahead mechanism. */ uvm_ra_init(); Index: src/sys/uvm/uvm_kmguard.c diff -u src/sys/uvm/uvm_kmguard.c:1.6 src/sys/uvm/uvm_kmguard.c:1.7 --- src/sys/uvm/uvm_kmguard.c:1.6 Fri Jan 27 19:48:41 2012 +++ src/sys/uvm/uvm_kmguard.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_kmguard.c,v 1.6 2012/01/27 19:48:41 para Exp $ */ +/* $NetBSD: uvm_kmguard.c,v 1.7 2012/01/28 00:00:06 rmind Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ * - Use-after-free */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_kmguard.c,v 1.6 2012/01/27 19:48:41 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_kmguard.c,v 1.7 2012/01/28 00:00:06 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -121,15 +121,14 @@ uvm_kmguard_alloc(struct uvm_kmguard *kg va = vm_map_min(kg->kg_map); if (__predict_false(uvm_map(kg->kg_map, &va, PAGE_SIZE*2, NULL, UVM_UNKNOWN_OFFSET, PAGE_SIZE, UVM_MAPFLAG(UVM_PROT_ALL, - UVM_PROT_ALL, UVM_INH_NONE, UVM_ADV_RANDOM, flag)) - != 0)) { + UVM_PROT_ALL, UVM_INH_NONE, UVM_ADV_RANDOM, flag)) != 0)) { return NULL; } /* * allocate a single page and map in at the start of the two page * block. - */ + */ for (;;) { pg = uvm_pagealloc(NULL, va - vm_map_min(kg->kg_map), NULL, 0); Index: src/sys/uvm/uvm_map.c diff -u src/sys/uvm/uvm_map.c:1.311 src/sys/uvm/uvm_map.c:1.312 --- src/sys/uvm/uvm_map.c:1.311 Fri Jan 27 19:48:41 2012 +++ src/sys/uvm/uvm_map.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_map.c,v 1.311 2012/01/27 19:48:41 para Exp $ */ +/* $NetBSD: uvm_map.c,v 1.312 2012/01/28 00:00:06 rmind Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.311 2012/01/27 19:48:41 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.312 2012/01/28 00:00:06 rmind Exp $"); #include "opt_ddb.h" #include "opt_uvmhist.h" @@ -919,7 +919,7 @@ uvm_map_init(void) */ void uvm_map_init_caches(void) -{ +{ /* * initialize caches. */ @@ -1266,7 +1266,6 @@ uvm_map_enter(struct vm_map *map, const const int amapwaitflag = (flags & UVM_FLAG_NOWAIT) ? AMAP_EXTEND_NOWAIT : 0; const int advice = UVM_ADVICE(flags); - const int meflagval = 0; vaddr_t start = args->uma_start; vsize_t size = args->uma_size; @@ -1310,7 +1309,7 @@ uvm_map_enter(struct vm_map *map, const if (prev_entry->end == start && prev_entry != &map->header && - UVM_ET_ISCOMPATIBLE(prev_entry, newetype, uobj, meflagval, + UVM_ET_ISCOMPATIBLE(prev_entry, newetype, uobj, 0, prot, maxprot, inherit, advice, 0)) { if (uobj && prev_entry->offset + @@ -1367,7 +1366,7 @@ uvm_map_enter(struct vm_map *map, const forwardmerge: if (prev_entry->next->start == (start + size) && prev_entry->next != &map->header && - UVM_ET_ISCOMPATIBLE(prev_entry->next, newetype, uobj, meflagval, + UVM_ET_ISCOMPATIBLE(prev_entry->next, newetype, uobj, 0, prot, maxprot, inherit, advice, 0)) { if (uobj && prev_entry->next->offset != uoffset + size) Index: src/sys/uvm/uvm_pdpolicy_clock.c diff -u src/sys/uvm/uvm_pdpolicy_clock.c:1.15 src/sys/uvm/uvm_pdpolicy_clock.c:1.16 --- src/sys/uvm/uvm_pdpolicy_clock.c:1.15 Fri Jan 27 19:48:42 2012 +++ src/sys/uvm/uvm_pdpolicy_clock.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_pdpolicy_clock.c,v 1.15 2012/01/27 19:48:42 para Exp $ */ +/* $NetBSD: uvm_pdpolicy_clock.c,v 1.16 2012/01/28 00:00:06 rmind Exp $ */ /* NetBSD: uvm_pdaemon.c,v 1.72 2006/01/05 10:47:33 yamt Exp $ */ /* @@ -69,7 +69,7 @@ #else /* defined(PDSIM) */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clock.c,v 1.15 2012/01/27 19:48:42 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clock.c,v 1.16 2012/01/28 00:00:06 rmind Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -419,10 +419,9 @@ uvmpdpol_reinit(void) bool uvmpdpol_needsscan_p(void) { - vmem_size_t kva_size; - vmem_size_t kva_free; + vmem_size_t kva_size, kva_free; - kva_size = vmem_size(kmem_arena, VMEM_FREE|VMEM_ALLOC); + kva_size = vmem_size(kmem_arena, VMEM_FREE | VMEM_ALLOC); kva_free = vmem_size(kmem_arena, VMEM_FREE); if (kva_free < (kva_size / 10)) { @@ -432,7 +431,7 @@ uvmpdpol_needsscan_p(void) if (pdpol_state.s_inactive < pdpol_state.s_inactarg) { return true; } - if (pdpol_state.s_inactive < pdpol_state.s_inactarg) { + if (pdpol_state.s_inactive < pdpol_state.s_inactarg) { return true; } return false; Index: src/sys/uvm/uvm_swap.c diff -u src/sys/uvm/uvm_swap.c:1.159 src/sys/uvm/uvm_swap.c:1.160 --- src/sys/uvm/uvm_swap.c:1.159 Fri Jan 27 19:48:42 2012 +++ src/sys/uvm/uvm_swap.c Sat Jan 28 00:00:06 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_swap.c,v 1.159 2012/01/27 19:48:42 para Exp $ */ +/* $NetBSD: uvm_swap.c,v 1.160 2012/01/28 00:00:06 rmind Exp $ */ /* * Copyright (c) 1995, 1996, 1997, 2009 Matthew R. Green @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.159 2012/01/27 19:48:42 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.160 2012/01/28 00:00:06 rmind Exp $"); #include "opt_uvmhist.h" #include "opt_compat_netbsd.h" @@ -638,9 +638,8 @@ sys_swapctl(struct lwp *l, const struct */ priority = SCARG(uap, misc); - sdp = kmem_alloc(sizeof(*sdp), KM_SLEEP); + sdp = kmem_zalloc(sizeof(*sdp), KM_SLEEP); spp = kmem_alloc(sizeof(*spp), KM_SLEEP); - memset(sdp, 0, sizeof(*sdp)); sdp->swd_flags = SWF_FAKE; sdp->swd_vp = vp; sdp->swd_dev = (vp->v_type == VBLK) ? vp->v_rdev : NODEV; @@ -713,10 +712,9 @@ sys_swapctl(struct lwp *l, const struct * done! release the ref gained by namei() and unlock. */ vput(vp); - out: - kmem_free(userpath, SWAP_PATH_MAX); rw_exit(&swap_syscall_lock); + kmem_free(userpath, SWAP_PATH_MAX); UVMHIST_LOG(pdhist, "<- done! error=%d", error, 0, 0, 0); return (error);