1
0
mirror of https://github.com/taigrr/gopher-os synced 2025-01-18 04:43:13 -08:00

Make vmm use the bitmap allocator after it is initialized

This commit is contained in:
Achilleas Anagnostopoulos 2017-06-18 08:58:05 +01:00
parent 4de2d54ed4
commit 6d195d82f5
2 changed files with 19 additions and 3 deletions

View File

@ -306,11 +306,22 @@ func earlyAllocFrame() (pmm.Frame, *kernel.Error) {
return earlyAllocator.AllocFrame()
}
// sysAllocFrame is a helper that delegates a frame allocation request to the
// bitmap allocator instance.
func sysAllocFrame() (pmm.Frame, *kernel.Error) {
return FrameAllocator.AllocFrame()
}
// Init sets up the kernel physical memory allocation sub-system.
func Init(kernelStart, kernelEnd uintptr) *kernel.Error {
earlyAllocator.init(kernelStart, kernelEnd)
earlyAllocator.printMemoryMap()
vmm.SetFrameAllocator(earlyAllocFrame)
return FrameAllocator.init()
if err := FrameAllocator.init(); err != nil {
return err
}
vmm.SetFrameAllocator(sysAllocFrame)
return nil
}

View File

@ -338,7 +338,7 @@ func TestBitmapAllocatorAllocAndFreeFrame(t *testing.T) {
for expFrame := pool.startFrame; expFrame <= pool.endFrame; expFrame++ {
got, err := alloc.AllocFrame()
if err != nil {
t.Fatalf("[pool %d] unexpected error: %v", err)
t.Fatalf("[pool %d] unexpected error: %v", poolIndex, err)
}
if got != expFrame {
@ -364,7 +364,7 @@ func TestBitmapAllocatorAllocAndFreeFrame(t *testing.T) {
for poolIndex, pool := range alloc.pools {
for frame := pool.startFrame; frame <= pool.endFrame; frame++ {
if err := alloc.FreeFrame(frame); err != nil {
t.Fatalf("[pool %d] unexpected error: %v", err)
t.Fatalf("[pool %d] unexpected error: %v", poolIndex, err)
}
}
@ -411,6 +411,11 @@ func TestAllocatorPackageInit(t *testing.T) {
if err := Init(0x100000, 0x1fa7c8); err != nil {
t.Fatal(err)
}
// At this point sysAllocFrame should work
if _, err := sysAllocFrame(); err != nil {
t.Fatal(err)
}
})
t.Run("error", func(t *testing.T) {