From d7eb2547dd704dd43481b6744433f9d0862fdc3c Mon Sep 17 00:00:00 2001 From: Achilleas Anagnostopoulos Date: Wed, 31 May 2017 14:07:13 +0100 Subject: [PATCH] Change the Frame type to uintptr and remove Size/Order methods To keep the implementation portable, the Frame type had to be changed from uint64 to uintptr. Using uintptr ensures that the frame will always match the pointer size of the platform. --- kernel/mem/constants_amd64.go | 4 ++++ kernel/mem/pmm/bootmem_allocator_test.go | 8 -------- kernel/mem/pmm/frame.go | 13 +------------ kernel/mem/pmm/frame_test.go | 8 -------- 4 files changed, 5 insertions(+), 28 deletions(-) diff --git a/kernel/mem/constants_amd64.go b/kernel/mem/constants_amd64.go index aea2911..068b23e 100644 --- a/kernel/mem/constants_amd64.go +++ b/kernel/mem/constants_amd64.go @@ -3,6 +3,10 @@ package mem const ( + // PointerShift is equal to log2(unsafe.Sizeof(uintptr)). The pointer + // size for this architecture is defined as (1 << PointerShift). + PointerShift = 3 + // PageShift is equal to log2(PageSize). This constant is used when // we need to convert a physical address to a page number (shift right by PageShift) // and vice-versa. diff --git a/kernel/mem/pmm/bootmem_allocator_test.go b/kernel/mem/pmm/bootmem_allocator_test.go index 8632b66..fc9d394 100644 --- a/kernel/mem/pmm/bootmem_allocator_test.go +++ b/kernel/mem/pmm/bootmem_allocator_test.go @@ -49,14 +49,6 @@ func TestBootMemoryAllocator(t *testing.T) { if !frame.IsValid() { t.Errorf("[frame %d] expected IsValid() to return true", allocFrameCount) } - - if got := frame.PageOrder(); got != mem.PageOrder(0) { - t.Errorf("[frame %d] expected allocated frame page order to be 0; got %d", allocFrameCount, got) - } - - if got := frame.Size(); got != mem.PageSize { - t.Errorf("[frame %d] expected allocated frame size to be %d; got %d", allocFrameCount, mem.PageSize, got) - } } if allocFrameCount != totalFreeFrames { diff --git a/kernel/mem/pmm/frame.go b/kernel/mem/pmm/frame.go index 478406c..5b03dce 100644 --- a/kernel/mem/pmm/frame.go +++ b/kernel/mem/pmm/frame.go @@ -8,7 +8,7 @@ import ( ) // Frame describes a physical memory page index. -type Frame uint64 +type Frame uintptr const ( // InvalidFrame is returned by page allocators when @@ -25,14 +25,3 @@ func (f Frame) IsValid() bool { func (f Frame) Address() uintptr { return uintptr(f << mem.PageShift) } - -// PageOrder returns the page order of this frame. The page order is encoded in the -// 8 MSB of the frame number. -func (f Frame) PageOrder() mem.PageOrder { - return mem.PageOrder((f >> 56) & 0xFF) -} - -// Size returns the size of this frame. -func (f Frame) Size() mem.Size { - return mem.PageSize << ((f >> 56) & 0xFF) -} diff --git a/kernel/mem/pmm/frame_test.go b/kernel/mem/pmm/frame_test.go index 786e465..990794c 100644 --- a/kernel/mem/pmm/frame_test.go +++ b/kernel/mem/pmm/frame_test.go @@ -15,17 +15,9 @@ func TestFrameMethods(t *testing.T) { t.Errorf("[order %d] expected frame %d to be valid", order, frameIndex) } - if got := frame.PageOrder(); got != order { - t.Errorf("[order %d] expected frame (%d, index: %d) call to PageOrder() to return %d; got %d", order, frame, frameIndex, order, got) - } - if exp, got := uintptr(frameIndex<