diff options
| author | Aram Hăvărneanu <aram@mgk.ro> | 2014-07-09 12:33:42 +0200 |
|---|---|---|
| committer | Aram Hăvărneanu <aram@mgk.ro> | 2014-07-09 12:33:42 +0200 |
| commit | a84e3ad198387019aaef6e979e46e498600ea12f (patch) | |
| tree | e16bcd972e7cb448b6aa57c697af2382698d4846 /src | |
| parent | 0a2083edd7a31f2248da1cdaca6e39466a9fb05b (diff) | |
| download | go-a84e3ad198387019aaef6e979e46e498600ea12f.tar.xz | |
runtime: use the nsec system call instead of /dev/bintime on Plan 9
LGTM=0intro
R=0intro
CC=ality, dave, golang-codereviews, jas, mischief, rsc
https://golang.org/cl/104570043
Diffstat (limited to 'src')
| -rw-r--r-- | src/pkg/runtime/os_plan9.c | 28 | ||||
| -rw-r--r-- | src/pkg/runtime/os_plan9.h | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/sys_plan9_386.s | 10 | ||||
| -rw-r--r-- | src/pkg/runtime/sys_plan9_amd64.s | 5 |
4 files changed, 22 insertions, 22 deletions
diff --git a/src/pkg/runtime/os_plan9.c b/src/pkg/runtime/os_plan9.c index 6da7c7ef52..02723fd9e4 100644 --- a/src/pkg/runtime/os_plan9.c +++ b/src/pkg/runtime/os_plan9.c @@ -150,29 +150,13 @@ runtime·usleep(uint32 µs) int64 runtime·nanotime(void) { - static int32 fd = -1; - byte b[8]; - uint32 hi, lo; + int64 ns, scratch; - // As long as all goroutines share the same file - // descriptor table we can get away with using - // just a static fd. Without a lock the file can - // be opened twice but that's okay. - // - // Using /dev/bintime gives us a latency on the - // order of ten microseconds between two calls. - // - // The naïve implementation (without the cached - // file descriptor) is roughly four times slower - // in 9vx on a 2.16 GHz Intel Core 2 Duo. - - if(fd < 0 && (fd = runtime·open("/dev/bintime", OREAD|OCEXEC, 0)) < 0) - return 0; - if(runtime·pread(fd, b, sizeof b, 0) != sizeof b) - return 0; - hi = b[0]<<24 | b[1]<<16 | b[2]<<8 | b[3]; - lo = b[4]<<24 | b[5]<<16 | b[6]<<8 | b[7]; - return (int64)hi<<32 | (int64)lo; + ns = runtime·nsec(&scratch); + // TODO(aram): remove hack after I fix _nsec in the pc64 kernel. + if(ns == 0) + return scratch; + return ns; } void diff --git a/src/pkg/runtime/os_plan9.h b/src/pkg/runtime/os_plan9.h index 00ea8366d7..8bc57262d9 100644 --- a/src/pkg/runtime/os_plan9.h +++ b/src/pkg/runtime/os_plan9.h @@ -15,6 +15,7 @@ int32 runtime·plan9_tsemacquire(uint32 *addr, int32 ms); int32 runtime·plan9_semrelease(uint32 *addr, int32 count); int32 runtime·notify(void (*fn)(void*, int8*)); int32 runtime·noted(int32); +int64 runtime·nsec(int64*); void runtime·sigtramp(void*, int8*); void runtime·sigpanic(void); void runtime·goexitsall(int8*); diff --git a/src/pkg/runtime/sys_plan9_386.s b/src/pkg/runtime/sys_plan9_386.s index 6a39012059..5e8c7420e2 100644 --- a/src/pkg/runtime/sys_plan9_386.s +++ b/src/pkg/runtime/sys_plan9_386.s @@ -64,6 +64,16 @@ TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0 INT $64 RET +TEXT runtime·nsec(SB),NOSPLIT,$0 + MOVL $53, AX + INT $64 + CMPL AX, $-1 + JNE 4(PC) + MOVL a+0(FP), CX + MOVL AX, 0(CX) + MOVL AX, 4(CX) + RET + TEXT runtime·notify(SB),NOSPLIT,$0 MOVL $28, AX INT $64 diff --git a/src/pkg/runtime/sys_plan9_amd64.s b/src/pkg/runtime/sys_plan9_amd64.s index bcecc39638..8f4a5c05ec 100644 --- a/src/pkg/runtime/sys_plan9_amd64.s +++ b/src/pkg/runtime/sys_plan9_amd64.s @@ -77,6 +77,11 @@ TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0 SYSCALL RET +TEXT runtime·nsec(SB),NOSPLIT,$0 + MOVQ $53, BP + SYSCALL + RET + TEXT runtime·notify(SB),NOSPLIT,$0 MOVQ $28, BP SYSCALL |
