Module Name: src Committed By: matt Date: Sat Sep 1 00:26:38 UTC 2012
Modified Files: src/sys/kern: kern_kthread.c src/sys/uvm: uvm_extern.h uvm_glue.c Log Message: Add a __HAVE_CPU_UAREA_IDLELWP hook so that the MD code can allocate special UAREAs for idle lwp's. To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 src/sys/kern/kern_kthread.c cvs rdiff -u -r1.183 -r1.184 src/sys/uvm/uvm_extern.h cvs rdiff -u -r1.159 -r1.160 src/sys/uvm/uvm_glue.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/kern_kthread.c diff -u src/sys/kern/kern_kthread.c:1.38 src/sys/kern/kern_kthread.c:1.39 --- src/sys/kern/kern_kthread.c:1.38 Tue Nov 1 15:39:37 2011 +++ src/sys/kern/kern_kthread.c Sat Sep 1 00:26:37 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_kthread.c,v 1.38 2011/11/01 15:39:37 jym Exp $ */ +/* $NetBSD: kern_kthread.c,v 1.39 2012/09/01 00:26:37 matt Exp $ */ /*- * Copyright (c) 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_kthread.c,v 1.38 2011/11/01 15:39:37 jym Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_kthread.c,v 1.39 2012/09/01 00:26:37 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -70,7 +70,8 @@ kthread_create(pri_t pri, int flag, stru KASSERT((flag & KTHREAD_INTR) == 0 || (flag & KTHREAD_MPSAFE) != 0); - uaddr = uvm_uarea_system_alloc(); + uaddr = uvm_uarea_system_alloc( + (flag & (KTHREAD_INTR|KTHREAD_IDLE)) == KTHREAD_IDLE ? ci : NULL); if (uaddr == 0) { return ENOMEM; } Index: src/sys/uvm/uvm_extern.h diff -u src/sys/uvm/uvm_extern.h:1.183 src/sys/uvm/uvm_extern.h:1.184 --- src/sys/uvm/uvm_extern.h:1.183 Sun Apr 8 11:27:45 2012 +++ src/sys/uvm/uvm_extern.h Sat Sep 1 00:26:37 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_extern.h,v 1.183 2012/04/08 11:27:45 martin Exp $ */ +/* $NetBSD: uvm_extern.h,v 1.184 2012/09/01 00:26:37 matt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -601,7 +601,7 @@ bool uvm_kernacc(void *, size_t, vm_pr __dead void uvm_scheduler(void); vaddr_t uvm_uarea_alloc(void); void uvm_uarea_free(vaddr_t); -vaddr_t uvm_uarea_system_alloc(void); +vaddr_t uvm_uarea_system_alloc(struct cpu_info *); void uvm_uarea_system_free(vaddr_t); vaddr_t uvm_lwp_getuarea(lwp_t *); void uvm_lwp_setuarea(lwp_t *, vaddr_t); Index: src/sys/uvm/uvm_glue.c diff -u src/sys/uvm/uvm_glue.c:1.159 src/sys/uvm/uvm_glue.c:1.160 --- src/sys/uvm/uvm_glue.c:1.159 Sun Apr 8 11:27:45 2012 +++ src/sys/uvm/uvm_glue.c Sat Sep 1 00:26:37 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_glue.c,v 1.159 2012/04/08 11:27:45 martin Exp $ */ +/* $NetBSD: uvm_glue.c,v 1.160 2012/09/01 00:26:37 matt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_glue.c,v 1.159 2012/04/08 11:27:45 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_glue.c,v 1.160 2012/09/01 00:26:37 matt Exp $"); #include "opt_kgdb.h" #include "opt_kstack.h" @@ -366,8 +366,12 @@ uvm_uarea_alloc(void) } vaddr_t -uvm_uarea_system_alloc(void) +uvm_uarea_system_alloc(struct cpu_info *ci) { +#ifdef __HAVE_CPU_UAREA_ALLOC_IDLELWP + if (__predict_false(ci != NULL)) + return cpu_uarea_alloc_idlelwp(ci); +#endif return (vaddr_t)pool_cache_get(uvm_uarea_system_cache, PR_WAITOK); }