diff options
| author | Meng Zhuo <mzh@golangcn.org> | 2020-11-18 10:28:18 +0800 |
|---|---|---|
| committer | Meng Zhuo <mzh@golangcn.org> | 2021-01-07 01:55:27 +0000 |
| commit | df81a15819d5b264e6451976a2884953e8d28b20 (patch) | |
| tree | 86999dda6a1ac98e2509e0c980b9fccc941ebef2 /src/runtime/sys_linux_mips64x.s | |
| parent | 4787e906cff56ae23028df12c68331745651ec9e (diff) | |
| download | go-df81a15819d5b264e6451976a2884953e8d28b20.tar.xz | |
runtime: check mips64 VDSO clock_gettime return code
We introduced VDSO feature for mips64x in Go1.14, however Linux kernel
didn't ship VDSO safe fallback until 4.13.
This CL checks vdso return code it may fix this issue.
name old time/op new time/op delta
Now 174ns ± 0% 176ns ± 0% +1.20% (p=0.000 n=8+9)
NowUnixNano 175ns ± 0% 177ns ± 0% +1.13% (p=0.000 n=9+7)
FormatNow 1.01µs ± 1% 1.02µs ± 3% ~ (p=0.181 n=10+10)
Fixes #39046
Change-Id: Ibcefe4c8334f634c7ef18fa70f3c7dbe8306f224
Reviewed-on: https://go-review.googlesource.com/c/go/+/270717
Run-TryBot: Meng Zhuo <mzh@golangcn.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Michael Pratt <mpratt@google.com>
Trust: Meng Zhuo <mzh@golangcn.org>
Diffstat (limited to 'src/runtime/sys_linux_mips64x.s')
| -rw-r--r-- | src/runtime/sys_linux_mips64x.s | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/runtime/sys_linux_mips64x.s b/src/runtime/sys_linux_mips64x.s index afad056d06..c3e9f37694 100644 --- a/src/runtime/sys_linux_mips64x.s +++ b/src/runtime/sys_linux_mips64x.s @@ -250,6 +250,14 @@ noswitch: BEQ R25, fallback JAL (R25) + // check on vdso call return for kernel compatibility + // see https://golang.org/issues/39046 + // if we get any error make fallback permanent. + BEQ R2, R0, finish + MOVV R0, runtime·vdsoClockgettimeSym(SB) + MOVW $0, R4 // CLOCK_REALTIME + MOVV $0(R29), R5 + JMP fallback finish: MOVV 0(R29), R3 // sec @@ -311,6 +319,12 @@ noswitch: BEQ R25, fallback JAL (R25) + // see walltime1 for detail + BEQ R2, R0, finish + MOVV R0, runtime·vdsoClockgettimeSym(SB) + MOVW $1, R4 // CLOCK_MONOTONIC + MOVV $0(R29), R5 + JMP fallback finish: MOVV 0(R29), R3 // sec |
