1
0
mirror of https://github.com/golang/go synced 2024-11-21 22:04:39 -07:00

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
This commit is contained in:
Joel Sing 2011-08-29 09:35:13 -04:00 committed by Russ Cox
parent 45bd7b07e5
commit 8aa2591b13
2 changed files with 13 additions and 13 deletions

View File

@ -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

View File

@ -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");
}
}