Commit 8aa2591b authored by Joel Sing's avatar Joel Sing Committed by Russ Cox

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
https://golang.org/cl/4973043
parent 45bd7b07
...@@ -55,10 +55,10 @@ TEXT runtime·rfork_thread(SB),7,$0 ...@@ -55,10 +55,10 @@ TEXT runtime·rfork_thread(SB),7,$0
// It shouldn't return. If it does, exit // It shouldn't return. If it does, exit
MOVL $302, AX // sys_threxit MOVL $302, AX // sys_threxit
SYSCALL SYSCALL
JMP -3(PC) // keep exiting JMP -3(PC) // keep exiting
TEXT runtime·sys_sched_yield(SB),7,$0 TEXT runtime·osyield(SB),7,$0
MOVL $298, AX MOVL $298, AX // sys_sched_yield
SYSCALL SYSCALL
RET RET
...@@ -123,11 +123,11 @@ TEXT runtime·gettime(SB),7,$32 ...@@ -123,11 +123,11 @@ TEXT runtime·gettime(SB),7,$32
MOVL $116, AX // sys_gettimeofday MOVL $116, AX // sys_gettimeofday
SYSCALL SYSCALL
MOVQ 8(SP), BX // sec MOVQ 8(SP), BX // sec
MOVQ sec+0(FP), DI MOVQ sec+0(FP), DI
MOVQ BX, (DI) MOVQ BX, (DI)
MOVL 16(SP), BX // usec MOVL 16(SP), BX // usec
MOVQ usec+8(FP), DI MOVQ usec+8(FP), DI
MOVL BX, (DI) MOVL BX, (DI)
RET RET
......
...@@ -9,19 +9,20 @@ ...@@ -9,19 +9,20 @@
extern SigTab runtime·sigtab[]; extern SigTab runtime·sigtab[];
extern int64 runtime·rfork_thread(int32 flags, void *stack, M *m, G *g, void (*fn)(void)); 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. // Basic spinlocks using CAS. We can improve on these later.
static void static void
lock(Lock *l) lock(Lock *l)
{ {
uint32 v;
int32 ret;
for(;;) { for(;;) {
if(runtime·cas(&l->key, 0, 1)) if(runtime·cas(&l->key, 0, 1))
return; return;
runtime·sys_sched_yield(); runtime·osyield();
} }
} }
...@@ -29,7 +30,6 @@ static void ...@@ -29,7 +30,6 @@ static void
unlock(Lock *l) unlock(Lock *l)
{ {
uint32 v; uint32 v;
int32 ret;
for (;;) { for (;;) {
v = l->key; v = l->key;
...@@ -103,8 +103,8 @@ runtime·newosproc(M *m, G *g, void *stk, void (*fn)(void)) ...@@ -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) { 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: 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"); runtime·throw("runtime.newosproc");
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment