aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAram Hăvărneanu <aram@mgk.ro>2014-07-09 12:33:42 +0200
committerAram Hăvărneanu <aram@mgk.ro>2014-07-09 12:33:42 +0200
commita84e3ad198387019aaef6e979e46e498600ea12f (patch)
treee16bcd972e7cb448b6aa57c697af2382698d4846 /src
parent0a2083edd7a31f2248da1cdaca6e39466a9fb05b (diff)
downloadgo-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.c28
-rw-r--r--src/pkg/runtime/os_plan9.h1
-rw-r--r--src/pkg/runtime/sys_plan9_386.s10
-rw-r--r--src/pkg/runtime/sys_plan9_amd64.s5
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