]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: expand/update lfstack address space assumptions
authorAustin Clements <austin@google.com>
Sun, 3 Dec 2017 23:08:57 +0000 (18:08 -0500)
committerAustin Clements <austin@google.com>
Thu, 15 Feb 2018 21:12:09 +0000 (21:12 +0000)
I was spelunking Linux's address space code and found that some of the
information about maximum virtual addresses in lfstack's comments was
out of date. This expands and updates the comment.

Change-Id: I9f54b23e6b266b3c5cc20259a849231fb751f6e7
Reviewed-on: https://go-review.googlesource.com/85875
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/lfstack_64bit.go

index 5367f08c561c9f8741d1a8be856bbca3daaed88f..cf6c02895fdae6b9b514e65d30b860bf55f443ec 100644 (file)
@@ -16,16 +16,25 @@ const (
        //
        // Architecture  Name              Maximum Value (exclusive)
        // ---------------------------------------------------------------------
-       // arm64         TASK_SIZE_64      Depends on configuration.
-       // ppc64{,le}    TASK_SIZE_USER64  0x400000000000UL (46 bit addresses)
-       // mips64{,le}   TASK_SIZE64       0x010000000000UL (40 bit addresses)
-       // s390x         TASK_SIZE         0x020000000000UL (41 bit addresses)
+       // amd64         TASK_SIZE_MAX     0x007ffffffff000 (47 bit addresses)
+       // arm64         TASK_SIZE_64      0x01000000000000 (48 bit addresses)
+       // ppc64{,le}    TASK_SIZE_USER64  0x00400000000000 (46 bit addresses)
+       // mips64{,le}   TASK_SIZE64       0x00010000000000 (40 bit addresses)
+       // s390x         TASK_SIZE         1<<64 (64 bit addresses)
        //
-       // These values may increase over time.
+       // These values may increase over time. In particular, ppc64
+       // and mips64 support arbitrary 64-bit addresses in hardware,
+       // but Linux imposes the above limits. amd64 has hardware
+       // support for 57 bit addresses as of 2017 (56 bits for user
+       // space), but Linux only uses addresses above 1<<47 for
+       // mappings that explicitly pass a high hint address.
        //
-       // On AMD64, virtual addresses are 48-bit numbers sign extended to 64.
+       // On AMD64, virtual addresses are 48-bit (or 57-bit) numbers sign extended to 64.
        // We shift the address left 16 to eliminate the sign extended part and make
        // room in the bottom for the count.
+       //
+       // On s390x, there's not much we can do, so we just hope that
+       // the kernel doesn't get to really high addresses.
        addrBits = 48
 
        // In addition to the 16 bits taken from the top, we can take 3 from the