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()
|
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.
|
// Init sets up the kernel physical memory allocation sub-system.
|
||||||
func Init(kernelStart, kernelEnd uintptr) *kernel.Error {
|
func Init(kernelStart, kernelEnd uintptr) *kernel.Error {
|
||||||
earlyAllocator.init(kernelStart, kernelEnd)
|
earlyAllocator.init(kernelStart, kernelEnd)
|
||||||
earlyAllocator.printMemoryMap()
|
earlyAllocator.printMemoryMap()
|
||||||
|
|
||||||
vmm.SetFrameAllocator(earlyAllocFrame)
|
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++ {
|
for expFrame := pool.startFrame; expFrame <= pool.endFrame; expFrame++ {
|
||||||
got, err := alloc.AllocFrame()
|
got, err := alloc.AllocFrame()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("[pool %d] unexpected error: %v", err)
|
t.Fatalf("[pool %d] unexpected error: %v", poolIndex, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if got != expFrame {
|
if got != expFrame {
|
||||||
@ -364,7 +364,7 @@ func TestBitmapAllocatorAllocAndFreeFrame(t *testing.T) {
|
|||||||
for poolIndex, pool := range alloc.pools {
|
for poolIndex, pool := range alloc.pools {
|
||||||
for frame := pool.startFrame; frame <= pool.endFrame; frame++ {
|
for frame := pool.startFrame; frame <= pool.endFrame; frame++ {
|
||||||
if err := alloc.FreeFrame(frame); err != nil {
|
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 {
|
if err := Init(0x100000, 0x1fa7c8); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// At this point sysAllocFrame should work
|
||||||
|
if _, err := sysAllocFrame(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("error", func(t *testing.T) {
|
t.Run("error", func(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user