71 lines
3.4 KiB
Diff
71 lines
3.4 KiB
Diff
diff --git a/drivers/acpid/src/main.rs b/drivers/acpid/src/main.rs
|
|
index 5528ad0a..b05102f6 100644
|
|
--- a/drivers/acpid/src/main.rs
|
|
+++ b/drivers/acpid/src/main.rs
|
|
@@ -50,2 +50,3 @@ fn daemon(daemon: daemon::Daemon) -> ! {
|
|
- log::error!("acpid: failed to parse [RX]SDT: {}", e);
|
|
- std::process::exit(1);
|
|
+ log::warn!("acpid: failed to parse [RX]SDT: {} — booting without ACPI", e);
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
@@ -80,2 +81,3 @@ fn daemon(daemon: daemon::Daemon) -> ! {
|
|
- log::error!("acpid: expected [RX]SDT from kernel to be RSDT or XSDT, got {:?}", String::from_utf8_lossy(&sdt.signature));
|
|
- std::process::exit(1);
|
|
+ log::warn!("acpid: expected [RX]SDT from kernel to be RSDT or XSDT, got {:?} — booting without ACPI", String::from_utf8_lossy(&sdt.signature));
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
@@ -102,2 +104 @@ fn daemon(daemon: daemon::Daemon) -> ! {
|
|
- log::error!("acpid: failed to set I/O privilege level to Ring 3: {}", e);
|
|
- std::process::exit(1);
|
|
+ log::warn!("acpid: failed to set I/O privilege level to Ring 3: {} — continuing without port I/O", e);
|
|
@@ -106,2 +107,17 @@ fn daemon(daemon: daemon::Daemon) -> ! {
|
|
- let shutdown_pipe = File::open("/scheme/kernel.acpi/kstop")
|
|
- .expect("acpid: failed to open `/scheme/kernel.acpi/kstop`");
|
|
+ let shutdown_pipe = match File::open("/scheme/kernel.acpi/kstop") {
|
|
+ Ok(f) => f,
|
|
+ Err(e) => {
|
|
+ log::warn!("acpid: failed to open `/scheme/kernel.acpi/kstop`: {} — booting without ACPI shutdown", e);
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
+ }
|
|
+ };
|
|
+
|
|
+ let mut event_queue = match RawEventQueue::new() {
|
|
+ Ok(q) => q,
|
|
+ Err(e) => {
|
|
+ log::warn!("acpid: failed to create event queue: {} — booting without ACPI", e);
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
+ }
|
|
+ };
|
|
@@ -109,2 +125,8 @@ fn daemon(daemon: daemon::Daemon) -> ! {
|
|
- let mut event_queue = RawEventQueue::new().expect("acpid: failed to create event queue");
|
|
- let socket = Socket::nonblock().expect("acpid: failed to create disk scheme");
|
|
+ let socket = match Socket::nonblock() {
|
|
+ Ok(s) => s,
|
|
+ Err(e) => {
|
|
+ log::warn!("acpid: failed to create scheme socket: {} — booting without ACPI", e);
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
+ }
|
|
+ };
|
|
@@ -115,6 +137,12 @@ fn daemon(daemon: daemon::Daemon) -> ! {
|
|
- event_queue
|
|
- .subscribe(shutdown_pipe.as_raw_fd() as usize, 0, EventFlags::READ)
|
|
- .expect("acpid: failed to register shutdown pipe for event queue");
|
|
- event_queue
|
|
- .subscribe(socket.inner().raw(), 1, EventFlags::READ)
|
|
- .expect("acpid: failed to register scheme socket for event queue");
|
|
+ if let Err(e) = event_queue
|
|
+ .subscribe(shutdown_pipe.as_raw_fd() as usize, 0, EventFlags::READ) {
|
|
+ log::warn!("acpid: failed to register shutdown pipe for event queue: {} — booting without ACPI", e);
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
+ }
|
|
+ if let Err(e) = event_queue
|
|
+ .subscribe(socket.inner().raw(), 1, EventFlags::READ) {
|
|
+ log::warn!("acpid: failed to register scheme socket for event queue: {} — booting without ACPI", e);
|
|
+ daemon.ready();
|
|
+ std::process::exit(0);
|
|
+ }
|