]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: madvise and SysUnused for Linux
authorSébastien Paolacci <sebastien.paolacci@gmail.com>
Mon, 12 Dec 2011 21:33:13 +0000 (16:33 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 12 Dec 2011 21:33:13 +0000 (16:33 -0500)
SysUnused being a direct call to madvise MADV_DONTNEED.

R=golang-dev, dave
CC=golang-dev
https://golang.org/cl/5477057

src/pkg/runtime/linux/386/defs.h
src/pkg/runtime/linux/386/sys.s
src/pkg/runtime/linux/amd64/defs.h
src/pkg/runtime/linux/amd64/sys.s
src/pkg/runtime/linux/arm/defs.h
src/pkg/runtime/linux/arm/sys.s
src/pkg/runtime/linux/defs.go
src/pkg/runtime/linux/defs2.go
src/pkg/runtime/linux/defs_arm.go
src/pkg/runtime/linux/mem.c

index 19d6d9eec507dc20439dbdb65354531d3029128d..02760f987bce2cd97581e0b0b61554a73895c0fe 100644 (file)
@@ -12,6 +12,8 @@ enum {
        MAP_PRIVATE     = 0x2,
        MAP_FIXED       = 0x10,
 
+       MADV_DONTNEED   = 0x4,
+
        SA_RESTART      = 0x10000000,
        SA_ONSTACK      = 0x8000000,
        SA_RESTORER     = 0x4000000,
index 7baeb34bce62fb00c64902a447a99f02c1db6e02..d96c022d36eccb80b91b906ce858586478116552 100644 (file)
@@ -212,6 +212,17 @@ TEXT runtime·munmap(SB),7,$0
        INT $3
        RET
 
+TEXT runtime·madvise(SB),7,$0
+       MOVL    $219, AX        // madvise
+       MOVL    4(SP), BX
+       MOVL    8(SP), CX
+       MOVL    12(SP), DX
+       CALL    *runtime·_vdso(SB)
+       CMPL    AX, $0xfffff001
+       JLS     2(PC)
+       INT $3
+       RET
+
 // int32 futex(int32 *uaddr, int32 op, int32 val,
 //     struct timespec *timeout, int32 *uaddr2, int32 val2);
 TEXT runtime·futex(SB),7,$0
index 5b44a78530eccbd9969357a8aa6ec464501d1d73..bf5f79b0e4d4e55c231c0eb42763d57f97d47ec7 100644 (file)
@@ -12,6 +12,8 @@ enum {
        MAP_PRIVATE     = 0x2,
        MAP_FIXED       = 0x10,
 
+       MADV_DONTNEED   = 0x4,
+
        SA_RESTART      = 0x10000000,
        SA_ONSTACK      = 0x8000000,
        SA_RESTORER     = 0x4000000,
@@ -95,7 +97,7 @@ struct Siginfo {
        int32   si_signo;
        int32   si_errno;
        int32   si_code;
-       byte    Pad_godefs_0[4];
+       byte    Pad_cgo_0[4];
        byte    _sifields[112];
 };
 struct Itimerval {
@@ -181,7 +183,7 @@ struct Fpreg1 {
 struct Sigaltstack {
        byte    *ss_sp;
        int32   ss_flags;
-       byte    Pad_godefs_0[4];
+       byte    Pad_cgo_0[4];
        uint64  ss_size;
 };
 struct Mcontext {
index ff72a75340815ef50fb96b6fa40c6b3fce2c92ac..76bb48c75a924d216f9997495f67606914f1dd16 100644 (file)
@@ -192,6 +192,17 @@ TEXT runtime·munmap(SB),7,$0
        CALL    runtime·notok(SB)
        RET
 
+TEXT runtime·madvise(SB),7,$0
+       MOVQ    8(SP), DI
+       MOVQ    16(SP), SI
+       MOVQ    24(SP), DX
+       MOVQ    $28, AX // madvise
+       SYSCALL
+       CMPQ    AX, $0xfffffffffffff001
+       JLS     2(PC)
+       CALL    runtime·notok(SB)
+       RET
+
 TEXT runtime·notok(SB),7,$0
        MOVQ    $0xf1, BP
        MOVQ    BP, (BP)
index 09b558ed0f882b0e3478bc8593296edc81d79875..da97a843395890d60ce862473b21fbdbfc6f4a15 100644 (file)
@@ -11,6 +11,7 @@ enum {
        MAP_ANON = 0x20,
        MAP_PRIVATE = 0x2,
        MAP_FIXED = 0x10,
+       MADV_DONTNEED = 0x4,
        SA_RESTART = 0x10000000,
        SA_ONSTACK = 0x8000000,
        SA_RESTORER = 0x4000000,
index 80f956fb08381aa844665a32ae75b5b03b489022..14ea337d02efb95f9c7d201c996e98cfe2dd5693 100644 (file)
@@ -28,6 +28,7 @@
 #define SYS_futex (SYS_BASE + 240)
 #define SYS_exit_group (SYS_BASE + 248)
 #define SYS_munmap (SYS_BASE + 91)
+#define SYS_madvise (SYS_BASE + 220)
 #define SYS_setitimer (SYS_BASE + 104)
 #define SYS_mincore (SYS_BASE + 219)
 #define SYS_gettid (SYS_BASE + 224)
@@ -111,6 +112,14 @@ TEXT runtime·munmap(SB),7,$0
        SWI     $0
        RET
 
+TEXT runtime·madvise(SB),7,$0
+       MOVW    0(FP), R0
+       MOVW    4(FP), R1
+       MOVW    8(FP), R2
+       MOVW    $SYS_madvise, R7
+       SWI     $0
+       RET
+
 TEXT runtime·setitimer(SB),7,$0
        MOVW    0(FP), R0
        MOVW    4(FP), R1
index 85f99db1748c8c4a4a133d5367e7d890c6d6ed9d..bbaab2d33e74d32d898701ae77fef07d0e7cf2a0 100644 (file)
@@ -36,6 +36,8 @@ const (
        MAP_PRIVATE = C.MAP_PRIVATE
        MAP_FIXED   = C.MAP_FIXED
 
+       MADV_DONTNEED = C.MADV_DONTNEED
+
        SA_RESTART  = C.SA_RESTART
        SA_ONSTACK  = C.SA_ONSTACK
        SA_RESTORER = C.SA_RESTORER
index 56da642ed3ea0c363cfd571ca8d987ad837ed86d..1fafb7bfc1cd7fe33c9361231fede4a48ee3adfd 100644 (file)
@@ -17,6 +17,7 @@ package runtime
 /*
 #cgo CFLAGS: -I/home/rsc/pub/linux-2.6/arch/x86/include -I/home/rsc/pub/linux-2.6/include -D_LOOSE_KERNEL_NAMES -D__ARCH_SI_UID_T=__kernel_uid32_t
 
+#define size_t __kernel_size_t
 #include <asm/signal.h>
 #include <asm/mman.h>
 #include <asm/sigcontext.h>
@@ -47,6 +48,8 @@ const (
        MAP_PRIVATE = C.MAP_PRIVATE
        MAP_FIXED   = C.MAP_FIXED
 
+       MADV_DONTNEED = C.MADV_DONTNEED
+
        SA_RESTART  = C.SA_RESTART
        SA_ONSTACK  = C.SA_ONSTACK
        SA_RESTORER = C.SA_RESTORER
index 3312d36e54dcc2ade1d844fb0275eea5cce64663..35f74e8dbac9c7c5175efd852f6f339685e5e316 100644 (file)
@@ -53,6 +53,8 @@ const (
        MAP_PRIVATE = C.MAP_PRIVATE
        MAP_FIXED   = C.MAP_FIXED
 
+       MADV_DONTNEED = C.MADV_DONTNEED
+
        SA_RESTART  = C.SA_RESTART
        SA_ONSTACK  = C.SA_ONSTACK
        SA_RESTORER = C.SA_RESTORER
index fe18e14483194d6f1e7e43e29a2df0731a4a7ab7..62e4eda2c252ef44ab22dcf3d16917e6acf2cec7 100644 (file)
@@ -56,9 +56,7 @@ runtime·SysAlloc(uintptr n)
 void
 runtime·SysUnused(void *v, uintptr n)
 {
-       USED(v);
-       USED(n);
-       // TODO(rsc): call madvise MADV_DONTNEED
+       runtime·madvise(v, n, MADV_DONTNEED);
 }
 
 void