Prechádzať zdrojové kódy

fix(page_alloc): expose global buddy alloc to `mod cpu`

greatbridf 8 mesiacov pred
rodič
commit
cafb8b6bf8
3 zmenil súbory, kde vykonal 9 pridanie a 3 odobranie
  1. 2 3
      src/kernel/cpu.rs
  2. 1 0
      src/kernel/mem.rs
  3. 6 0
      src/kernel/mem/page_alloc.rs

+ 2 - 3
src/kernel/cpu.rs

@@ -1,6 +1,5 @@
-use super::mem::AsMemoryBlock;
+use super::mem::{AsMemoryBlock, GlobalPageAlloc};
 use arch::{PercpuArea, CPU};
-use buddy_allocator::BuddyAllocator;
 use core::{alloc::Layout, pin::Pin, ptr::NonNull};
 use eonix_mm::paging::Page;
 use eonix_sync::LazyLock;
@@ -18,7 +17,7 @@ pub unsafe fn local_cpu() -> Pin<&'static mut CPU> {
 pub fn percpu_allocate(layout: Layout) -> NonNull<u8> {
     // TODO: Use page size defined in `arch`.
     let page_count = layout.size().div_ceil(arch::PAGE_SIZE);
-    let page = Page::<BuddyAllocator>::alloc_at_least(page_count);
+    let page = Page::alloc_at_least_in(page_count, GlobalPageAlloc::buddy_alloc());
     let page_data = page.as_memblk().as_byte_ptr();
     core::mem::forget(page);
 

+ 1 - 0
src/kernel/mem.rs

@@ -9,4 +9,5 @@ mod page_alloc;
 pub use access::{AsMemoryBlock, MemoryBlock, PhysAccess};
 pub(self) use mm_area::MMArea;
 pub use mm_list::{handle_page_fault, FileMapping, MMList, Mapping, Permission};
+pub use page_alloc::GlobalPageAlloc;
 pub use paging::{Page, PageBuffer};

+ 6 - 0
src/kernel/mem/page_alloc.rs

@@ -82,6 +82,12 @@ impl PerCpuPageAlloc {
     }
 }
 
+impl GlobalPageAlloc {
+    pub const fn buddy_alloc() -> &'static BuddyAllocator<RawPagePtr> {
+        BUDDY_ALLOC
+    }
+}
+
 impl PageAlloc for GlobalPageAlloc {
     type RawPage = RawPagePtr;