From 2ceba78d47a3697771f51c36b33c5b6e6a6f76a6 Mon Sep 17 00:00:00 2001 From: nishirong <2201213065@stu.pku.edu.cn> Date: Fri, 14 Jun 2024 16:21:40 +0800 Subject: [PATCH] Refactor alloc_single API for page and frame --- framework/aster-frame/src/mm/frame/options.rs | 7 +++++-- framework/aster-frame/src/mm/page/allocator.rs | 11 ++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) 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) }) }