summaryrefslogtreecommitdiff
path: root/sys/src/9/port/dtracysys.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2019-03-30 09:17:46 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2019-03-30 09:17:46 +0100
commit4f0bfe0fb8dc608a94fe429c5ddb12e58997e1ce (patch)
treefc81407d959370278dfdb53da69c5ab8b3fef55c /sys/src/9/port/dtracysys.c
parentac3147a9c58f339f9b978ab087464912c16bc8f8 (diff)
dtracy: avoid dmachlock() race
between being commited to a machno and having acquired the lock, the scheduler could come in an schedule us on a different processor. the solution is to have dtmachlock() take a special -1 argument to mean "current mach" and return the actual mach number after the lock has been acquired and interrupts being disabled.
Diffstat (limited to 'sys/src/9/port/dtracysys.c')
-rw-r--r--sys/src/9/port/dtracysys.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/sys/src/9/port/dtracysys.c b/sys/src/9/port/dtracysys.c
index 367f4738b..1b19d6d9e 100644
--- a/sys/src/9/port/dtracysys.c
+++ b/sys/src/9/port/dtracysys.c
@@ -20,10 +20,10 @@ extern Syscall *systab[];
uintptr rc;\
DTTrigInfo info;\
memset(&info, 0, sizeof(info));\
- dtptrigger(dtpsysentry[y], m->machno, &info);\
+ dtptrigger(dtpsysentry[y], &info);\
rc = z(va);\
info.arg[9] = (uvlong) rc;\
- dtptrigger(dtpsysreturn[y], m->machno, &info);\
+ dtptrigger(dtpsysreturn[y], &info);\
return rc;\
}
#define WRAP1(x,y,z,type0)\
@@ -33,10 +33,10 @@ extern Syscall *systab[];
DTTrigInfo info;\
memset(&info, 0, sizeof(info));\
info.arg[0] = (uvlong) va_arg(vb, type0);\
- dtptrigger(dtpsysentry[y], m->machno, &info);\
+ dtptrigger(dtpsysentry[y], &info);\
rc = z(va);\
info.arg[9] = (uvlong) rc;\
- dtptrigger(dtpsysreturn[y], m->machno, &info);\
+ dtptrigger(dtpsysreturn[y], &info);\
return rc;\
}
#define WRAP2(x,y,z,type0,type1)\
@@ -47,10 +47,10 @@ extern Syscall *systab[];
memset(&info, 0, sizeof(info));\
info.arg[0] = (uvlong) va_arg(vb, type0);\
info.arg[1] = (uvlong) va_arg(vb, type1);\
- dtptrigger(dtpsysentry[y], m->machno, &info);\
+ dtptrigger(dtpsysentry[y], &info);\
rc = z(va);\
info.arg[9] = (uvlong) rc;\
- dtptrigger(dtpsysreturn[y], m->machno, &info);\
+ dtptrigger(dtpsysreturn[y], &info);\
return rc;\
}
#define WRAP3(x,y,z,type0,type1,type2)\
@@ -62,10 +62,10 @@ extern Syscall *systab[];
info.arg[0] = (uvlong) va_arg(vb, type0);\
info.arg[1] = (uvlong) va_arg(vb, type1);\
info.arg[2] = (uvlong) va_arg(vb, type2);\
- dtptrigger(dtpsysentry[y], m->machno, &info);\
+ dtptrigger(dtpsysentry[y], &info);\
rc = z(va);\
info.arg[9] = (uvlong) rc;\
- dtptrigger(dtpsysreturn[y], m->machno, &info);\
+ dtptrigger(dtpsysreturn[y], &info);\
return rc;\
}
#define WRAP4(x,y,z,type0,type1,type2,type3)\
@@ -78,10 +78,10 @@ extern Syscall *systab[];
info.arg[1] = (uvlong) va_arg(vb, type1);\
info.arg[2] = (uvlong) va_arg(vb, type2);\
info.arg[3] = (uvlong) va_arg(vb, type3);\
- dtptrigger(dtpsysentry[y], m->machno, &info);\
+ dtptrigger(dtpsysentry[y], &info);\
rc = z(va);\
info.arg[9] = (uvlong) rc;\
- dtptrigger(dtpsysreturn[y], m->machno, &info);\
+ dtptrigger(dtpsysreturn[y], &info);\
return rc;\
}
/*TODO*/
@@ -96,10 +96,10 @@ extern Syscall *systab[];
info.arg[2] = (uvlong) va_arg(vb, type2);\
info.arg[3] = (uvlong) va_arg(vb, type3);\
info.arg[4] = (uvlong) va_arg(vb, type4);\
- dtptrigger(dtpsysentry[y], m->machno, &info);\
+ dtptrigger(dtpsysentry[y], &info);\
rc = z(va);\
info.arg[9] = (uvlong) rc;\
- dtptrigger(dtpsysreturn[y], m->machno, &info);\
+ dtptrigger(dtpsysreturn[y], &info);\
return rc;\
}