mirror of
https://github.com/golang/go
synced 2024-11-25 03:37:58 -07:00
runtime: set runtime ncpu on openbsd
Set the runtime ncpu based on the hw.ncpu sysctl. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/5191043
This commit is contained in:
parent
457dfd7546
commit
b2f1eba324
@ -269,4 +269,22 @@ TEXT runtime·osyield(SB),7,$-4
|
||||
INT $0x80
|
||||
RET
|
||||
|
||||
TEXT runtime·sysctl(SB),7,$28
|
||||
LEAL arg0+0(FP), SI
|
||||
LEAL 4(SP), DI
|
||||
CLD
|
||||
MOVSL // arg 1 - name
|
||||
MOVSL // arg 2 - namelen
|
||||
MOVSL // arg 3 - oldp
|
||||
MOVSL // arg 4 - oldlenp
|
||||
MOVSL // arg 5 - newp
|
||||
MOVSL // arg 6 - newlen
|
||||
MOVL $202, AX // sys___sysctl
|
||||
INT $0x80
|
||||
JCC 3(PC)
|
||||
NEGL AX
|
||||
RET
|
||||
MOVL $0, AX
|
||||
RET
|
||||
|
||||
GLOBL runtime·tlsoffset(SB),$4
|
||||
|
@ -235,3 +235,19 @@ TEXT runtime·settls(SB),7,$8
|
||||
JCC 2(PC)
|
||||
CALL runtime·notok(SB)
|
||||
RET
|
||||
|
||||
TEXT runtime·sysctl(SB),7,$0
|
||||
MOVQ 8(SP), DI // arg 1 - name
|
||||
MOVL 16(SP), SI // arg 2 - namelen
|
||||
MOVQ 24(SP), DX // arg 3 - oldp
|
||||
MOVQ 32(SP), R10 // arg 4 - oldlenp
|
||||
MOVQ 40(SP), R8 // arg 5 - newp
|
||||
MOVQ 48(SP), R9 // arg 6 - newlen
|
||||
MOVQ $202, AX // sys___sysctl
|
||||
SYSCALL
|
||||
JCC 3(PC)
|
||||
NEGL AX
|
||||
RET
|
||||
MOVL $0, AX
|
||||
RET
|
||||
|
||||
|
@ -8,5 +8,6 @@ void runtime·sigaltstack(Sigaltstack*, Sigaltstack*);
|
||||
void runtime·sigaction(int32, struct sigaction*, struct sigaction*);
|
||||
void runtime·setitimerval(int32, Itimerval*, Itimerval*);
|
||||
void runtime·setitimer(int32, Itimerval*, Itimerval*);
|
||||
int32 runtime·sysctl(uint32*, uint32, byte*, uintptr*, byte*, uintptr);
|
||||
|
||||
void runtime·raisesigpipe(void);
|
||||
|
@ -15,6 +15,30 @@ enum
|
||||
ENOTSUP = 91,
|
||||
};
|
||||
|
||||
// From OpenBSD's <sys/sysctl.h>
|
||||
#define CTL_HW 6
|
||||
#define HW_NCPU 3
|
||||
|
||||
static int32
|
||||
getncpu(void)
|
||||
{
|
||||
uint32 mib[2];
|
||||
uint32 out;
|
||||
int32 ret;
|
||||
uintptr nout;
|
||||
|
||||
// Fetch hw.ncpu via sysctl.
|
||||
mib[0] = CTL_HW;
|
||||
mib[1] = HW_NCPU;
|
||||
nout = sizeof out;
|
||||
out = 0;
|
||||
ret = runtime·sysctl(mib, 2, (byte*)&out, &nout, nil, 0);
|
||||
if(ret >= 0)
|
||||
return out;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Basic spinlocks using CAS. We can improve on these later.
|
||||
static void
|
||||
lock(Lock *l)
|
||||
@ -80,10 +104,10 @@ runtime·notewakeup(Note *n)
|
||||
}
|
||||
|
||||
// From OpenBSD's sys/param.h
|
||||
#define RFPROC (1<<4) /* change child (else changes curproc) */
|
||||
#define RFMEM (1<<5) /* share `address space' */
|
||||
#define RFNOWAIT (1<<6) /* parent need not wait() on child */
|
||||
#define RFTHREAD (1<<13) /* create a thread, not a process */
|
||||
#define RFPROC (1<<4) /* change child (else changes curproc) */
|
||||
#define RFMEM (1<<5) /* share `address space' */
|
||||
#define RFNOWAIT (1<<6) /* parent need not wait() on child */
|
||||
#define RFTHREAD (1<<13) /* create a thread, not a process */
|
||||
|
||||
void
|
||||
runtime·newosproc(M *m, G *g, void *stk, void (*fn)(void))
|
||||
@ -112,6 +136,7 @@ runtime·newosproc(M *m, G *g, void *stk, void (*fn)(void))
|
||||
void
|
||||
runtime·osinit(void)
|
||||
{
|
||||
runtime·ncpu = getncpu();
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user