]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: define the AddrRange used for testing in terms of addrRange
authorMichael Anthony Knyszek <mknyszek@google.com>
Tue, 14 Jul 2020 20:27:27 +0000 (20:27 +0000)
committerMichael Knyszek <mknyszek@google.com>
Thu, 22 Oct 2020 15:25:33 +0000 (15:25 +0000)
Currently the AddrRange used for testing is defined separately from
addrRange in the runtime, making it difficult to test it as well as
addrRanges. Redefine AddrRange in terms of addrRange instead.

For #40191.

Change-Id: I3aa5b8df3e4c9a3c494b46ab802dd574b2488141
Reviewed-on: https://go-review.googlesource.com/c/go/+/242677
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/export_test.go
src/runtime/mpagealloc_test.go

index f2fa11dc9884e387f3efef4ce536f77cc52856ad..25b251f4bad76de50ca3c489a3d894baf65677b9 100644 (file)
@@ -749,10 +749,7 @@ func (p *PageAlloc) Scavenge(nbytes uintptr, mayUnlock bool) (r uintptr) {
 func (p *PageAlloc) InUse() []AddrRange {
        ranges := make([]AddrRange, 0, len(p.inUse.ranges))
        for _, r := range p.inUse.ranges {
-               ranges = append(ranges, AddrRange{
-                       Base:  r.base.addr(),
-                       Limit: r.limit.addr(),
-               })
+               ranges = append(ranges, AddrRange{r})
        }
        return ranges
 }
@@ -763,10 +760,29 @@ func (p *PageAlloc) PallocData(i ChunkIdx) *PallocData {
        return (*PallocData)((*pageAlloc)(p).tryChunkOf(ci))
 }
 
-// AddrRange represents a range over addresses.
-// Specifically, it represents the range [Base, Limit).
+// AddrRange is a wrapper around addrRange for testing.
 type AddrRange struct {
-       Base, Limit uintptr
+       addrRange
+}
+
+// MakeAddrRange creates a new address range.
+func MakeAddrRange(base, limit uintptr) AddrRange {
+       return AddrRange{makeAddrRange(base, limit)}
+}
+
+// Base returns the virtual base address of the address range.
+func (a AddrRange) Base() uintptr {
+       return a.addrRange.base.addr()
+}
+
+// Base returns the virtual address of the limit of the address range.
+func (a AddrRange) Limit() uintptr {
+       return a.addrRange.limit.addr()
+}
+
+// Equals returns true if the two address ranges are exactly equal.
+func (a AddrRange) Equals(b AddrRange) bool {
+       return a == b
 }
 
 // BitRange represents a range over a bitmap.
index 65ba71d459ce60248979508b19b8b3dc79e25bab..5d979fa95b9ef55a9beabe0404cf1a178d621f6a 100644 (file)
@@ -54,7 +54,7 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)),
                        },
                },
                "Contiguous2": {
@@ -63,7 +63,7 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 1,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+2, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+2, 0)),
                        },
                },
                "Contiguous5": {
@@ -75,7 +75,7 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 4,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+5, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+5, 0)),
                        },
                },
                "Discontiguous": {
@@ -85,9 +85,9 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 4,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)},
-                               {PageBase(BaseChunkIdx+2, 0), PageBase(BaseChunkIdx+3, 0)},
-                               {PageBase(BaseChunkIdx+4, 0), PageBase(BaseChunkIdx+5, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+2, 0), PageBase(BaseChunkIdx+3, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+4, 0), PageBase(BaseChunkIdx+5, 0)),
                        },
                },
                "Mixed": {
@@ -98,8 +98,8 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 4,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+3, 0)},
-                               {PageBase(BaseChunkIdx+4, 0), PageBase(BaseChunkIdx+5, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+3, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+4, 0), PageBase(BaseChunkIdx+5, 0)),
                        },
                },
                "WildlyDiscontiguous": {
@@ -110,9 +110,9 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 0x21,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+2, 0)},
-                               {PageBase(BaseChunkIdx+0x10, 0), PageBase(BaseChunkIdx+0x11, 0)},
-                               {PageBase(BaseChunkIdx+0x21, 0), PageBase(BaseChunkIdx+0x22, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+2, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+0x10, 0), PageBase(BaseChunkIdx+0x11, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+0x21, 0), PageBase(BaseChunkIdx+0x22, 0)),
                        },
                },
                "ManyDiscontiguous": {
@@ -129,39 +129,39 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 64,
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)},
-                               {PageBase(BaseChunkIdx+2, 0), PageBase(BaseChunkIdx+3, 0)},
-                               {PageBase(BaseChunkIdx+4, 0), PageBase(BaseChunkIdx+5, 0)},
-                               {PageBase(BaseChunkIdx+6, 0), PageBase(BaseChunkIdx+7, 0)},
-                               {PageBase(BaseChunkIdx+8, 0), PageBase(BaseChunkIdx+9, 0)},
-                               {PageBase(BaseChunkIdx+10, 0), PageBase(BaseChunkIdx+11, 0)},
-                               {PageBase(BaseChunkIdx+12, 0), PageBase(BaseChunkIdx+13, 0)},
-                               {PageBase(BaseChunkIdx+14, 0), PageBase(BaseChunkIdx+15, 0)},
-                               {PageBase(BaseChunkIdx+16, 0), PageBase(BaseChunkIdx+17, 0)},
-                               {PageBase(BaseChunkIdx+18, 0), PageBase(BaseChunkIdx+19, 0)},
-                               {PageBase(BaseChunkIdx+20, 0), PageBase(BaseChunkIdx+21, 0)},
-                               {PageBase(BaseChunkIdx+22, 0), PageBase(BaseChunkIdx+23, 0)},
-                               {PageBase(BaseChunkIdx+24, 0), PageBase(BaseChunkIdx+25, 0)},
-                               {PageBase(BaseChunkIdx+26, 0), PageBase(BaseChunkIdx+27, 0)},
-                               {PageBase(BaseChunkIdx+28, 0), PageBase(BaseChunkIdx+29, 0)},
-                               {PageBase(BaseChunkIdx+30, 0), PageBase(BaseChunkIdx+31, 0)},
-                               {PageBase(BaseChunkIdx+32, 0), PageBase(BaseChunkIdx+33, 0)},
-                               {PageBase(BaseChunkIdx+34, 0), PageBase(BaseChunkIdx+35, 0)},
-                               {PageBase(BaseChunkIdx+36, 0), PageBase(BaseChunkIdx+37, 0)},
-                               {PageBase(BaseChunkIdx+38, 0), PageBase(BaseChunkIdx+39, 0)},
-                               {PageBase(BaseChunkIdx+40, 0), PageBase(BaseChunkIdx+41, 0)},
-                               {PageBase(BaseChunkIdx+42, 0), PageBase(BaseChunkIdx+43, 0)},
-                               {PageBase(BaseChunkIdx+44, 0), PageBase(BaseChunkIdx+45, 0)},
-                               {PageBase(BaseChunkIdx+46, 0), PageBase(BaseChunkIdx+47, 0)},
-                               {PageBase(BaseChunkIdx+48, 0), PageBase(BaseChunkIdx+49, 0)},
-                               {PageBase(BaseChunkIdx+50, 0), PageBase(BaseChunkIdx+51, 0)},
-                               {PageBase(BaseChunkIdx+52, 0), PageBase(BaseChunkIdx+53, 0)},
-                               {PageBase(BaseChunkIdx+54, 0), PageBase(BaseChunkIdx+55, 0)},
-                               {PageBase(BaseChunkIdx+56, 0), PageBase(BaseChunkIdx+57, 0)},
-                               {PageBase(BaseChunkIdx+58, 0), PageBase(BaseChunkIdx+59, 0)},
-                               {PageBase(BaseChunkIdx+60, 0), PageBase(BaseChunkIdx+61, 0)},
-                               {PageBase(BaseChunkIdx+62, 0), PageBase(BaseChunkIdx+63, 0)},
-                               {PageBase(BaseChunkIdx+64, 0), PageBase(BaseChunkIdx+65, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+2, 0), PageBase(BaseChunkIdx+3, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+4, 0), PageBase(BaseChunkIdx+5, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+6, 0), PageBase(BaseChunkIdx+7, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+8, 0), PageBase(BaseChunkIdx+9, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+10, 0), PageBase(BaseChunkIdx+11, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+12, 0), PageBase(BaseChunkIdx+13, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+14, 0), PageBase(BaseChunkIdx+15, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+16, 0), PageBase(BaseChunkIdx+17, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+18, 0), PageBase(BaseChunkIdx+19, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+20, 0), PageBase(BaseChunkIdx+21, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+22, 0), PageBase(BaseChunkIdx+23, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+24, 0), PageBase(BaseChunkIdx+25, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+26, 0), PageBase(BaseChunkIdx+27, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+28, 0), PageBase(BaseChunkIdx+29, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+30, 0), PageBase(BaseChunkIdx+31, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+32, 0), PageBase(BaseChunkIdx+33, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+34, 0), PageBase(BaseChunkIdx+35, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+36, 0), PageBase(BaseChunkIdx+37, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+38, 0), PageBase(BaseChunkIdx+39, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+40, 0), PageBase(BaseChunkIdx+41, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+42, 0), PageBase(BaseChunkIdx+43, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+44, 0), PageBase(BaseChunkIdx+45, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+46, 0), PageBase(BaseChunkIdx+47, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+48, 0), PageBase(BaseChunkIdx+49, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+50, 0), PageBase(BaseChunkIdx+51, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+52, 0), PageBase(BaseChunkIdx+53, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+54, 0), PageBase(BaseChunkIdx+55, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+56, 0), PageBase(BaseChunkIdx+57, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+58, 0), PageBase(BaseChunkIdx+59, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+60, 0), PageBase(BaseChunkIdx+61, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+62, 0), PageBase(BaseChunkIdx+63, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+64, 0), PageBase(BaseChunkIdx+65, 0)),
                        },
                },
        }
@@ -172,8 +172,8 @@ func TestPageAllocGrow(t *testing.T) {
                                BaseChunkIdx + 0x100000, // constant translates to O(TiB)
                        },
                        inUse: []AddrRange{
-                               {PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)},
-                               {PageBase(BaseChunkIdx+0x100000, 0), PageBase(BaseChunkIdx+0x100001, 0)},
+                               MakeAddrRange(PageBase(BaseChunkIdx, 0), PageBase(BaseChunkIdx+1, 0)),
+                               MakeAddrRange(PageBase(BaseChunkIdx+0x100000, 0), PageBase(BaseChunkIdx+0x100001, 0)),
                        },
                }
        }
@@ -197,7 +197,7 @@ func TestPageAllocGrow(t *testing.T) {
                                t.Fail()
                        } else {
                                for i := range want {
-                                       if want[i] != got[i] {
+                                       if !want[i].Equals(got[i]) {
                                                t.Fail()
                                                break
                                        }
@@ -207,11 +207,11 @@ func TestPageAllocGrow(t *testing.T) {
                                t.Logf("found inUse mismatch")
                                t.Logf("got:")
                                for i, r := range got {
-                                       t.Logf("\t#%d [0x%x, 0x%x)", i, r.Base, r.Limit)
+                                       t.Logf("\t#%d [0x%x, 0x%x)", i, r.Base(), r.Limit())
                                }
                                t.Logf("want:")
                                for i, r := range want {
-                                       t.Logf("\t#%d [0x%x, 0x%x)", i, r.Base, r.Limit)
+                                       t.Logf("\t#%d [0x%x, 0x%x)", i, r.Base(), r.Limit())
                                }
                        }
                })