mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-27 19:33:23 +00:00
Ignore unusable regions for max_paddr
This commit is contained in:
@ -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),
|
||||
|
Reference in New Issue
Block a user