mirror of
https://github.com/taigrr/gopher-os
synced 2025-01-18 04:43:13 -08:00
Function EarlyReserveRegion reserves contiguous virtual address space regions beginning at the end of the available kernel space and moving towards lower virtual addresses. The only state that is tracked by this function is the last allocated virtual page address which is adjusted after each reservation request. Starting at the end of the kernel address space ensures that we will not step on the virtual addresses used by the kernel code and data sections.
30 lines
629 B
Go
30 lines
629 B
Go
package vmm
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
func TestEarlyReserveAmd64(t *testing.T) {
|
|
if runtime.GOARCH != "amd64" {
|
|
t.Skip("test requires amd64 runtime; skipping")
|
|
}
|
|
|
|
defer func(origLastUsed uintptr) {
|
|
earlyReserveLastUsed = origLastUsed
|
|
}(earlyReserveLastUsed)
|
|
|
|
earlyReserveLastUsed = 4096
|
|
next, err := EarlyReserveRegion(42)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if exp := uintptr(0); next != exp {
|
|
t.Fatal("expected reservation request to be rounded to nearest page")
|
|
}
|
|
|
|
if _, err = EarlyReserveRegion(1); err != errEarlyReserveNoSpace {
|
|
t.Fatalf("expected to get errEarlyReserveNoSpace; got %v", err)
|
|
}
|
|
}
|