]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: openbsd thread tweaks
authorJoel Sing <jsing@google.com>
Mon, 29 Aug 2011 13:35:13 +0000 (09:35 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 29 Aug 2011 13:35:13 +0000 (09:35 -0400)
- 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

src/pkg/runtime/openbsd/amd64/sys.s
src/pkg/runtime/openbsd/thread.c

index 2a238dffb47730d40f3134b3c930a98af43702cc..38b3dbc9c0d50e30caf83c0975e29bd3a667481d 100644 (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
index 7e9ba5d67e8240b73d6e976277236e17243d1efb..909db8cdc97811a080564dc972b9fb905421f112 100644 (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");
        }
 }