summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sysctl.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2009-01-23 22:40:35 +0000
committerjhb <jhb@FreeBSD.org>2009-01-23 22:40:35 +0000
commitb6d1e3ceffa96ac740685c1acf601f06c92a2df8 (patch)
tree3b1f62c59ef78b116c0715a7f613996206ae17e3 /sys/kern/kern_sysctl.c
parentd94da54d9573b12d2d1107664273f7db5c5619dc (diff)
downloadFreeBSD-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.c8
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);
}
OpenPOWER on IntegriCloud