Skip to content

Commit c771230

Browse files
committed
refactor(x86_64): migrate to PageBox
1 parent 4d7a635 commit c771230

File tree

3 files changed

+7
-39
lines changed

3 files changed

+7
-39
lines changed

src/arch/x86_64/kernel/apic.rs

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use align_address::Align;
1313
#[cfg(feature = "smp")]
1414
use arch::x86_64::kernel::core_local::*;
1515
use arch::x86_64::kernel::{interrupts, processor};
16-
use free_list::{PageLayout, PageRange};
16+
use free_list::PageLayout;
1717
use hermit_sync::{OnceCell, SpinMutex, without_interrupts};
1818
use memory_addresses::{AddrRange, PhysAddr, VirtAddr};
1919
#[cfg(feature = "smp")]
@@ -30,7 +30,7 @@ use crate::arch::x86_64::mm::paging::{
3030
};
3131
use crate::arch::x86_64::swapgs;
3232
use crate::config::*;
33-
use crate::mm::{PageAlloc, PageRangeAllocator};
33+
use crate::mm::{PageAlloc, PageBox, PageRangeAllocator};
3434
use crate::scheduler::CoreId;
3535
use crate::{arch, env, scheduler};
3636

@@ -387,7 +387,7 @@ fn detect_from_acpi() -> Result<PhysAddr, ()> {
387387
/// Helper function to search Floating Pointer Structure of the Multiprocessing Specification
388388
fn search_mp_floating(memory_range: AddrRange<PhysAddr>) -> Result<&'static ApicMP, ()> {
389389
let layout = PageLayout::from_size(BasePageSize::SIZE as usize).unwrap();
390-
let page_range = PageAlloc::allocate(layout).unwrap();
390+
let page_range = PageBox::new(layout).unwrap();
391391
let virtual_address = VirtAddr::from(page_range.start());
392392

393393
for current_address in memory_range.iter().step_by(BasePageSize::SIZE as usize) {
@@ -412,13 +412,6 @@ fn search_mp_floating(memory_range: AddrRange<PhysAddr>) -> Result<&'static Apic
412412
}
413413
}
414414

415-
// frees obsolete virtual memory region for MMIO devices
416-
let range =
417-
PageRange::from_start_len(virtual_address.as_usize(), BasePageSize::SIZE as usize).unwrap();
418-
unsafe {
419-
PageAlloc::deallocate(range);
420-
}
421-
422415
Err(())
423416
}
424417

@@ -450,7 +443,7 @@ fn detect_from_mp() -> Result<PhysAddr, ()> {
450443
}
451444

452445
let layout = PageLayout::from_size(BasePageSize::SIZE as usize).unwrap();
453-
let page_range = PageAlloc::allocate(layout).unwrap();
446+
let page_range = PageBox::new(layout).unwrap();
454447
let virtual_address = VirtAddr::from(page_range.start());
455448

456449
let mut flags = PageTableEntryFlags::empty();
@@ -467,12 +460,6 @@ fn detect_from_mp() -> Result<PhysAddr, ()> {
467460
let mp_config: &ApicConfigTable = unsafe { &*(ptr::with_exposed_provenance(addr)) };
468461
if mp_config.signature != MP_CONFIG_SIGNATURE {
469462
warn!("MP config table invalid!");
470-
let range =
471-
PageRange::from_start_len(virtual_address.as_usize(), BasePageSize::SIZE as usize)
472-
.unwrap();
473-
unsafe {
474-
PageAlloc::deallocate(range);
475-
}
476463
return Err(());
477464
}
478465

src/arch/x86_64/kernel/mmio.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ fn check_linux_args(
8686
linux_mmio: &'static [String],
8787
) -> Result<(VolatileRef<'static, DeviceRegisters>, u8), &'static str> {
8888
let layout = PageLayout::from_size(BasePageSize::SIZE as usize).unwrap();
89-
let page_range = PageAlloc::allocate(layout).unwrap();
89+
let page_range = PageBox::new(layout).unwrap();
9090
let virtual_address = VirtAddr::from(page_range.start());
9191

9292
for arg in linux_mmio {
@@ -133,21 +133,14 @@ fn check_linux_args(
133133
}
134134
}
135135

136-
// frees obsolete virtual memory region for MMIO devices
137-
let range =
138-
PageRange::from_start_len(virtual_address.as_usize(), BasePageSize::SIZE as usize).unwrap();
139-
unsafe {
140-
PageAlloc::deallocate(range);
141-
}
142-
143136
Err("Network card not found!")
144137
}
145138

146139
fn guess_device() -> Result<(VolatileRef<'static, DeviceRegisters>, u8), &'static str> {
147140
// Trigger page mapping in the first iteration!
148141
let mut current_page = 0;
149142
let layout = PageLayout::from_size(BasePageSize::SIZE as usize).unwrap();
150-
let page_range = PageAlloc::allocate(layout).unwrap();
143+
let page_range = PageBox::new(layout).unwrap();
151144
let virtual_address = VirtAddr::from(page_range.start());
152145

153146
// Look for the device-ID in all possible 64-byte aligned addresses within this range.
@@ -188,13 +181,6 @@ fn guess_device() -> Result<(VolatileRef<'static, DeviceRegisters>, u8), &'stati
188181
return Ok((mmio, IRQ_NUMBER));
189182
}
190183

191-
// frees obsolete virtual memory region for MMIO devices
192-
let range =
193-
PageRange::from_start_len(virtual_address.as_usize(), BasePageSize::SIZE as usize).unwrap();
194-
unsafe {
195-
PageAlloc::deallocate(range);
196-
}
197-
198184
Err("Network card not found!")
199185
}
200186

src/arch/x86_64/mm/mod.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub fn create_new_root_page_table() -> usize {
2121
let physaddr = PhysAddr::from(frame_range.start());
2222

2323
let layout = PageLayout::from_size(2 * BasePageSize::SIZE as usize).unwrap();
24-
let page_range = PageAlloc::allocate(layout).unwrap();
24+
let page_range = PageBox::new(layout).unwrap();
2525
let virtaddr = VirtAddr::from(page_range.start());
2626
let mut flags = PageTableEntryFlags::empty();
2727
flags.normal().writable();
@@ -52,11 +52,6 @@ pub fn create_new_root_page_table() -> usize {
5252
};
5353

5454
paging::unmap::<BasePageSize>(virtaddr, 2);
55-
let range =
56-
PageRange::from_start_len(virtaddr.as_usize(), 2 * BasePageSize::SIZE as usize).unwrap();
57-
unsafe {
58-
PageAlloc::deallocate(range);
59-
}
6055

6156
physaddr.as_usize()
6257
}

0 commit comments

Comments
 (0)