diff options
author | jhb <jhb@FreeBSD.org> | 2009-01-23 22:40:35 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2009-01-23 22:40:35 +0000 |
commit | b6d1e3ceffa96ac740685c1acf601f06c92a2df8 (patch) | |
tree | 3b1f62c59ef78b116c0715a7f613996206ae17e3 /sys/kern/kern_sysctl.c | |
parent | d94da54d9573b12d2d1107664273f7db5c5619dc (diff) | |
download | FreeBSD-src-b6d1e3ceffa96ac740685c1acf601f06c92a2df8.zip FreeBSD-src-b6d1e3ceffa96ac740685c1acf601f06c92a2df8.tar.gz |
Add a flag to tag individual sysctl leaf nodes as MPSAFE and thus not
needing Giant.
Submitted by: csjp (an older version)
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r-- | sys/kern/kern_sysctl.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index e56c481..ed14760 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1334,11 +1334,11 @@ sysctl_root(SYSCTL_HANDLER_ARGS) if (error != 0) return (error); #endif - - /* XXX: Handlers are not guaranteed to be Giant safe! */ - mtx_lock(&Giant); + if (!(oid->oid_kind & CTLFLAG_MPSAFE)) + mtx_lock(&Giant); error = oid->oid_handler(oid, arg1, arg2, req); - mtx_unlock(&Giant); + if (!(oid->oid_kind & CTLFLAG_MPSAFE)) + mtx_unlock(&Giant); return (error); } |