Ignore unusable regions for max_paddr

This commit is contained in:
Ruihan Li
2025-04-01 23:28:14 +08:00
committed by Junyang Zhang
parent 8f72192f07
commit e040dda7a4

View File

@ -53,6 +53,7 @@ use log::info;
use crate::{
arch::mm::PagingConsts,
boot::memory_region::MemoryRegionType,
const_assert,
mm::{
frame::allocator::{self, EarlyAllocatedFrameMeta},
@ -451,7 +452,12 @@ impl_frame_meta_for!(MetaPageMeta);
pub(crate) unsafe fn init() -> Segment<MetaPageMeta> {
let max_paddr = {
let regions = &crate::boot::EARLY_INFO.get().unwrap().memory_regions;
regions.iter().map(|r| r.base() + r.len()).max().unwrap()
regions
.iter()
.filter(|r| r.typ() == MemoryRegionType::Usable)
.map(|r| r.base() + r.len())
.max()
.unwrap()
};
info!(
@ -567,8 +573,11 @@ macro_rules! mark_ranges {
fn mark_unusable_ranges() {
let regions = &crate::boot::EARLY_INFO.get().unwrap().memory_regions;
for region in regions.iter() {
use crate::boot::memory_region::MemoryRegionType;
for region in regions
.iter()
.rev()
.skip_while(|r| r.typ() != MemoryRegionType::Usable)
{
match region.typ() {
MemoryRegionType::BadMemory => mark_ranges!(region, UnusableMemoryMeta),
MemoryRegionType::Unknown => mark_ranges!(region, UnusableMemoryMeta),