Do not panic if ACPI is not available

This commit is contained in:
Jeremy Soller
2023-03-03 18:56:23 -07:00
parent 11e6dd7b24
commit 3bf381caf8
2 changed files with 19 additions and 13 deletions

View File

@@ -87,13 +87,13 @@ impl AcpiScheme {
DATA.call_once(|| {
data_init = true;
let rsdt_or_xsdt = RXSDT_ENUM
.get()
.expect("expected RXSDT_ENUM to be initialized before AcpiScheme");
let table = match rsdt_or_xsdt {
RxsdtEnum::Rsdt(rsdt) => rsdt.as_slice(),
RxsdtEnum::Xsdt(xsdt) => xsdt.as_slice(),
let table = match RXSDT_ENUM.get() {
Some(RxsdtEnum::Rsdt(rsdt)) => rsdt.as_slice(),
Some(RxsdtEnum::Xsdt(xsdt)) => xsdt.as_slice(),
None => {
log::warn!("expected RXSDT_ENUM to be initialized before AcpiScheme, is ACPI available?");
&[]
}
};
Box::from(table)

View File

@@ -87,12 +87,18 @@ impl IrqScheme {
let cpus = {
use crate::acpi::madt::*;
let madt: &Madt = unsafe { MADT.as_ref().unwrap() };
madt.iter().filter_map(|entry| match entry {
MadtEntry::LocalApic(apic) => Some(apic.id),
_ => None,
}).collect::<Vec<_>>()
match unsafe { MADT.as_ref() } {
Some(madt) => {
madt.iter().filter_map(|entry| match entry {
MadtEntry::LocalApic(apic) => Some(apic.id),
_ => None,
}).collect::<Vec<_>>()
},
None => {
log::warn!("no MADT found, defaulting to 1 CPU");
vec!(0)
}
}
};
#[cfg(not(all(feature = "acpi", any(target_arch = "x86", target_arch = "x86_64"))))]
let cpus = vec!(0);