summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Sing <jsing@google.com>2011-08-29 09:35:13 -0400
committerJoel Sing <jsing@google.com>2011-08-29 09:35:13 -0400
commite0958fa2a8494a4bc236c464aaba9bbf2b12ffd5 (patch)
tree5b06019a8db8085aa7fb758c1266e9916eb0d177
parent795590a806702286170f0be0b1837b0c8fc9bbe4 (diff)
downloadgo-e0958fa2a8494a4bc236c464aaba9bbf2b12ffd5.tar.gz
runtime: openbsd thread tweaks
- Rename sys_sched_yield() to osyield() as this is now defined in asm.h. - Only print kern.rtheads message if rfork_thread() failed with ENOTSUP. - Remove unused variables. R=rsc CC=golang-dev http://codereview.appspot.com/4973043 Committer: Russ Cox <rsc@golang.org>
-rw-r--r--src/pkg/runtime/openbsd/amd64/sys.s10
-rw-r--r--src/pkg/runtime/openbsd/thread.c16
2 files changed, 13 insertions, 13 deletions
diff --git a/src/pkg/runtime/openbsd/amd64/sys.s b/src/pkg/runtime/openbsd/amd64/sys.s
index 2a238dffb..38b3dbc9c 100644
--- a/src/pkg/runtime/openbsd/amd64/sys.s
+++ b/src/pkg/runtime/openbsd/amd64/sys.s
@@ -55,10 +55,10 @@ TEXT runtime·rfork_thread(SB),7,$0
// It shouldn't return. If it does, exit
MOVL $302, AX // sys_threxit
SYSCALL
- JMP -3(PC) // keep exiting
+ JMP -3(PC) // keep exiting
-TEXT runtime·sys_sched_yield(SB),7,$0
- MOVL $298, AX
+TEXT runtime·osyield(SB),7,$0
+ MOVL $298, AX // sys_sched_yield
SYSCALL
RET
@@ -123,11 +123,11 @@ TEXT runtime·gettime(SB),7,$32
MOVL $116, AX // sys_gettimeofday
SYSCALL
- MOVQ 8(SP), BX // sec
+ MOVQ 8(SP), BX // sec
MOVQ sec+0(FP), DI
MOVQ BX, (DI)
- MOVL 16(SP), BX // usec
+ MOVL 16(SP), BX // usec
MOVQ usec+8(FP), DI
MOVL BX, (DI)
RET
diff --git a/src/pkg/runtime/openbsd/thread.c b/src/pkg/runtime/openbsd/thread.c
index 7e9ba5d67..909db8cdc 100644
--- a/src/pkg/runtime/openbsd/thread.c
+++ b/src/pkg/runtime/openbsd/thread.c
@@ -9,19 +9,20 @@
extern SigTab runtime·sigtab[];
extern int64 runtime·rfork_thread(int32 flags, void *stack, M *m, G *g, void (*fn)(void));
-extern void runtime·sys_sched_yield(void);
+
+enum
+{
+ ENOTSUP = 91,
+};
// Basic spinlocks using CAS. We can improve on these later.
static void
lock(Lock *l)
{
- uint32 v;
- int32 ret;
-
for(;;) {
if(runtime·cas(&l->key, 0, 1))
return;
- runtime·sys_sched_yield();
+ runtime·osyield();
}
}
@@ -29,7 +30,6 @@ static void
unlock(Lock *l)
{
uint32 v;
- int32 ret;
for (;;) {
v = l->key;
@@ -103,8 +103,8 @@ runtime·newosproc(M *m, G *g, void *stk, void (*fn)(void))
if((ret = runtime·rfork_thread(flags, stk, m, g, fn)) < 0) {
runtime·printf("runtime: failed to create new OS thread (have %d already; errno=%d)\n", runtime·mcount() - 1, -ret);
- runtime·printf("runtime: is kern.rthreads disabled?\n");
-
+ if (ret == -ENOTSUP)
+ runtime·printf("runtime: is kern.rthreads disabled?\n");
runtime·throw("runtime.newosproc");
}
}