From 3bf381caf86417264ae5e985dc28668a1fac1875 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 3 Mar 2023 18:56:23 -0700 Subject: [PATCH] Do not panic if ACPI is not available --- src/scheme/acpi.rs | 14 +++++++------- src/scheme/irq.rs | 18 ++++++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/scheme/acpi.rs b/src/scheme/acpi.rs index fd0929e..f9bc738 100644 --- a/src/scheme/acpi.rs +++ b/src/scheme/acpi.rs @@ -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) diff --git a/src/scheme/irq.rs b/src/scheme/irq.rs index abd7b59..c6cb16a 100644 --- a/src/scheme/irq.rs +++ b/src/scheme/irq.rs @@ -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::>() + match unsafe { MADT.as_ref() } { + Some(madt) => { + madt.iter().filter_map(|entry| match entry { + MadtEntry::LocalApic(apic) => Some(apic.id), + _ => None, + }).collect::>() + }, + 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);