1
0
mirror of https://github.com/golang/go synced 2024-11-23 15:20:03 -07:00

runtime: expand/update lfstack address space assumptions

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>
This commit is contained in:
Austin Clements 2017-12-03 18:08:57 -05:00
parent 51932c326f
commit 981d0495b7

View 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