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);
}