From 13d5f494e2305d4c6c7c269c628181195ce553c8 Mon Sep 17 00:00:00 2001 From: Achilleas Anagnostopoulos Date: Mon, 15 May 2017 10:00:41 +0100 Subject: [PATCH] Rename pfn pkg to pmm and export boot allocator Init method --- kernel/kmain.go | 4 +++- kernel/mem/{pfn => pmm}/bootmem_allocator.go | 13 +++---------- kernel/mem/{pfn => pmm}/bootmem_allocator_test.go | 4 ++-- kernel/mem/{pfn => pmm}/frame.go | 5 ++--- kernel/mem/{pfn => pmm}/frame_test.go | 2 +- 5 files changed, 11 insertions(+), 17 deletions(-) rename kernel/mem/{pfn => pmm}/bootmem_allocator.go (95%) rename kernel/mem/{pfn => pmm}/bootmem_allocator_test.go (98%) rename kernel/mem/{pfn => pmm}/frame.go (86%) rename kernel/mem/{pfn => pmm}/frame_test.go (98%) diff --git a/kernel/kmain.go b/kernel/kmain.go index 41d1cb3..b2a4ae6 100644 --- a/kernel/kmain.go +++ b/kernel/kmain.go @@ -3,6 +3,7 @@ package kernel import ( "github.com/achilleasa/gopher-os/kernel/hal" "github.com/achilleasa/gopher-os/kernel/hal/multiboot" + "github.com/achilleasa/gopher-os/kernel/mem/pmm" ) // Kmain is the only Go symbol that is visible (exported) from the rt0 initialization @@ -19,7 +20,8 @@ import ( func Kmain(multibootInfoPtr uintptr) { multiboot.SetInfoPtr(multibootInfoPtr) - // Initialize and clear the terminal hal.InitTerminal() hal.ActiveTerminal.Clear() + + pmm.EarlyAllocator.Init() } diff --git a/kernel/mem/pfn/bootmem_allocator.go b/kernel/mem/pmm/bootmem_allocator.go similarity index 95% rename from kernel/mem/pfn/bootmem_allocator.go rename to kernel/mem/pmm/bootmem_allocator.go index c9532be..93f7020 100644 --- a/kernel/mem/pfn/bootmem_allocator.go +++ b/kernel/mem/pmm/bootmem_allocator.go @@ -1,4 +1,4 @@ -package pfn +package pmm import ( "github.com/achilleasa/gopher-os/kernel/hal/multiboot" @@ -30,8 +30,6 @@ var ( // blocks will be handed over to a more advanced memory allocator that does // support freeing. type BootMemAllocator struct { - initialized bool - // allocCount tracks the total number of allocated frames. allocCount uint64 @@ -39,11 +37,10 @@ type BootMemAllocator struct { lastAllocIndex int64 } -// init sets up the boot memory allocator internal state and prints out the +// Init sets up the boot memory allocator internal state and prints out the // system memory map. -func (alloc *BootMemAllocator) init() { +func (alloc *BootMemAllocator) Init() { alloc.lastAllocIndex = -1 - alloc.initialized = true early.Printf("[boot_mem_alloc] system memory map:\n") var totalFree mem.Size @@ -69,10 +66,6 @@ func (alloc *BootMemAllocator) init() { // error then the compiler would call runtime.convT2I which in turn invokes the // yet uninitialized Go allocator. func (alloc *BootMemAllocator) AllocFrame(order mem.PageOrder) (Frame, bool) { - if !alloc.initialized { - alloc.init() - } - if order > 0 { return InvalidFrame, false } diff --git a/kernel/mem/pfn/bootmem_allocator_test.go b/kernel/mem/pmm/bootmem_allocator_test.go similarity index 98% rename from kernel/mem/pfn/bootmem_allocator_test.go rename to kernel/mem/pmm/bootmem_allocator_test.go index 052aeb4..8632b66 100644 --- a/kernel/mem/pfn/bootmem_allocator_test.go +++ b/kernel/mem/pmm/bootmem_allocator_test.go @@ -1,4 +1,4 @@ -package pfn +package pmm import ( "testing" @@ -35,7 +35,7 @@ func TestBootMemoryAllocator(t *testing.T) { alloc BootMemAllocator allocFrameCount uint64 ) - for ; ; allocFrameCount++ { + for alloc.Init(); ; allocFrameCount++ { frame, ok := alloc.AllocFrame(mem.PageOrder(0)) if !ok { break diff --git a/kernel/mem/pfn/frame.go b/kernel/mem/pmm/frame.go similarity index 86% rename from kernel/mem/pfn/frame.go rename to kernel/mem/pmm/frame.go index 11b2c4c..478406c 100644 --- a/kernel/mem/pfn/frame.go +++ b/kernel/mem/pmm/frame.go @@ -1,6 +1,5 @@ -// Package pfn provides physical memory allocator implementations that allow -// allocations of physical memory frames. -package pfn +// Package pmm contains code that manages physical memory frame allocations. +package pmm import ( "math" diff --git a/kernel/mem/pfn/frame_test.go b/kernel/mem/pmm/frame_test.go similarity index 98% rename from kernel/mem/pfn/frame_test.go rename to kernel/mem/pmm/frame_test.go index 1f53fde..786e465 100644 --- a/kernel/mem/pfn/frame_test.go +++ b/kernel/mem/pmm/frame_test.go @@ -1,4 +1,4 @@ -package pfn +package pmm import ( "testing"