Do not panic if ACPI is not available
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user