diff --git a/framework/aster-frame/src/mm/frame/options.rs b/framework/aster-frame/src/mm/frame/options.rs index 468b5b3c0..03792509c 100644 --- a/framework/aster-frame/src/mm/frame/options.rs +++ b/framework/aster-frame/src/mm/frame/options.rs @@ -54,7 +54,9 @@ impl FrameAllocOptions { } else { let mut frame_list = Vec::new(); for _ in 0..self.nframes { - frame_list.push(allocator::alloc_single().ok_or(Error::NoMemory)?); + let page = allocator::alloc_single().ok_or(Error::NoMemory)?; + let frame = Frame { page }; + frame_list.push(frame); } FrameVec(frame_list) }; @@ -73,7 +75,8 @@ impl FrameAllocOptions { return Err(Error::InvalidArgs); } - let frame = allocator::alloc_single().ok_or(Error::NoMemory)?; + let page = allocator::alloc_single().ok_or(Error::NoMemory)?; + let frame = Frame { page }; if !self.uninit { frame.writer().fill(0); } diff --git a/framework/aster-frame/src/mm/page/allocator.rs b/framework/aster-frame/src/mm/page/allocator.rs index ea3b2e182..26556237c 100644 --- a/framework/aster-frame/src/mm/page/allocator.rs +++ b/framework/aster-frame/src/mm/page/allocator.rs @@ -12,7 +12,10 @@ use buddy_system_allocator::FrameAllocator; use log::info; use spin::Once; -use super::{meta::FrameMeta, Page}; +use super::{ + meta::{FrameMeta, PageMeta}, + Page, +}; use crate::{ boot::memory_region::MemoryRegionType, mm::{Frame, FrameVec, Segment, PAGE_SIZE}, @@ -40,12 +43,10 @@ pub(crate) fn alloc(nframes: usize) -> Option { }) } -pub(crate) fn alloc_single() -> Option { +pub(crate) fn alloc_single() -> Option> { FRAME_ALLOCATOR.get().unwrap().lock().alloc(1).map(|idx| { let paddr = idx * PAGE_SIZE; - Frame { - page: Page::::from_unused(paddr), - } + Page::::from_unused(paddr) }) }