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:
parent
4de2d54ed4
commit
6d195d82f5
@ -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
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user