summaryrefslogtreecommitdiffstats
path: root/sys/kern/makesyscalls.sh
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2000-04-03 06:36:14 +0000
committeralfred <alfred@FreeBSD.org>2000-04-03 06:36:14 +0000
commit8d70bb9d1e045628d69036882ef19f126aba915d (patch)
treea85bbdd83bd6e361260506788f79b0b4403512e6 /sys/kern/makesyscalls.sh
parent2d2575e7b2738b94d1d15f9337a2fb41cbb993c9 (diff)
downloadFreeBSD-src-8d70bb9d1e045628d69036882ef19f126aba915d.zip
FreeBSD-src-8d70bb9d1e045628d69036882ef19f126aba915d.tar.gz
Make makesyscalls.sh parse an optional field 'MPSAFE' that specifies
that a syscall does not want the BGL to be grabbed automatically. Add the new MPSAFE flag to the syscalls that dillon has determined to be MPSAFE.
Diffstat (limited to 'sys/kern/makesyscalls.sh')
-rw-r--r--sys/kern/makesyscalls.sh33
1 files changed, 23 insertions, 10 deletions
diff --git a/sys/kern/makesyscalls.sh b/sys/kern/makesyscalls.sh
index bdbd5c6..090616c 100644
--- a/sys/kern/makesyscalls.sh
+++ b/sys/kern/makesyscalls.sh
@@ -253,6 +253,14 @@ s/\$//g
for (i = 5; i <= NF; i++)
comment = comment " " $i
}
+ mpsafe = 0;
+ # if the "MPSAFE" keyword is found, note it and shift the line
+ $2 == "MPSAFE" {
+ for (i = 2; i <= NF; i++)
+ $i = $(i + 1);
+ NF -= 1;
+ mpsafe = 1;
+ }
$2 == "STD" || $2 == "NODEF" || $2 == "NOARGS" || $2 == "NOPROTO" \
|| $2 == "NOIMPL" {
parseline()
@@ -282,19 +290,22 @@ s/\$//g
nosys = 1
if (funcname == "lkmnosys")
lkmnosys = 1
+ printf("\t{ %s%d, (sy_call_t *)",
+ mpsafe == 1 ? "SYF_MPSAFE | " : "", argc+bigargc) > sysent
if ($2 != "NOIMPL") {
- printf("\t{ %d, (sy_call_t *)%s },\t\t",
- argc+bigargc, funcname) > sysent
+ printf("%s },\t",
+ funcname) > sysent
if(length(funcname) < 11)
- printf("\t") > sysent
- printf("/* %d = %s */\n", syscall, funcalias) > sysent
+ printf("\t") > sysent
} else {
- printf("\t{ %d, (sy_call_t *)%s },\t\t",
- argc+bigargc, "nosys") > sysent
+ printf("%s },\t",
+ "nosys") > sysent
if(length("nosys") < 11)
- printf("\t") > sysent
- printf("/* %d = %s */\n", syscall, funcalias) > sysent
+ printf("\t") > sysent
}
+ if (mpsafe == 0)
+ printf("\t") > sysent
+ printf("/* %d = %s */\n", syscall, funcalias) > sysent
printf("\t\"%s\",\t\t\t/* %d = %s */\n",
funcalias, syscall, funcalias) > sysnames
if ($2 != "NODEF") {
@@ -323,7 +334,8 @@ s/\$//g
argalias) > sysarg
printf("%s\to%s __P((struct proc *, struct %s *));\n",
rettype, funcname, argalias) > syscompatdcl
- printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n",
+ printf("\t{ compat(%s%d,%s) },\t\t/* %d = old %s */\n",
+ mpsafe == 1 ? "SYF_MPSAFE | " : "",
argc+bigargc, funcname, syscall, funcalias) > sysent
printf("\t\"old.%s\",\t\t/* %d = old %s */\n",
funcalias, syscall, funcalias) > sysnames
@@ -338,7 +350,8 @@ s/\$//g
ncompat++
parseline()
printf("%s\to%s();\n", rettype, funcname) > syscompatdcl
- printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n",
+ printf("\t{ compat(%s%d,%s) },\t\t/* %d = old %s */\n",
+ mpsafe == 1 ? "SYF_MPSAFE | " : "",
argc+bigargc, funcname, syscall, funcalias) > sysent
printf("\t\"old.%s\",\t\t/* %d = old %s */\n",
funcalias, syscall, funcalias) > sysnames
OpenPOWER on IntegriCloud