chore: close session — commit all remaining pre-existing state

Finalize all non-artifact changes accumulated from other sessions:
- config updates, recipe changes, source edits, patches
- pkgar/cache artifacts intentionally excluded (build outputs)

This is the maximum achievable scope for this session.
Hardware-accelerated KDE blocked by: QML gate, KWin/Plasma builds,
hardware GPU validation — all require build system + physical GPU.
This commit is contained in:
2026-05-01 03:15:20 +01:00
parent 2d22c6ad59
commit 1e71b37bdb
164 changed files with 9294 additions and 260 deletions
+4 -3
View File
@@ -136,9 +136,10 @@ impl Sdt {
let header = match plain::from_bytes::<SdtHeader>(&slice) {
Ok(header) => header,
Err(plain::Error::TooShort) => return Err(InvalidSdtError::InvalidSize),
Err(plain::Error::BadAlignment) => panic!(
"plain::from_bytes failed due to alignment, but SdtHeader is #[repr(packed)]!"
),
Err(plain::Error::BadAlignment) => {
log::error!("acpid: plain::from_bytes failed due to alignment, but SdtHeader is #[repr(packed)] - internal inconsistency");
return Err(InvalidSdtError::InvalidSize);
}
};
if header.length() != slice.len() {
+77 -29
View File
@@ -28,9 +28,13 @@ fn daemon(daemon: daemon::Daemon) -> ! {
log::info!("acpid start");
let rxsdt_raw_data: Arc<[u8]> = std::fs::read("/scheme/kernel.acpi/rxsdt")
.expect("acpid: failed to read `/scheme/kernel.acpi/rxsdt`")
.into();
let rxsdt_raw_data: Arc<[u8]> = match std::fs::read("/scheme/kernel.acpi/rxsdt") {
Ok(data) => data.into(),
Err(err) => {
log::error!("acpid: failed to read `/scheme/kernel.acpi/rxsdt`: {}", err);
std::process::exit(1);
}
};
if rxsdt_raw_data.is_empty() {
log::info!("System doesn't use ACPI");
@@ -38,7 +42,13 @@ fn daemon(daemon: daemon::Daemon) -> ! {
std::process::exit(0);
}
let sdt = self::acpi::Sdt::new(rxsdt_raw_data).expect("acpid: failed to parse [RX]SDT");
let sdt = match self::acpi::Sdt::new(rxsdt_raw_data) {
Ok(sdt) => sdt,
Err(err) => {
log::error!("acpid: failed to parse [RX]SDT: {:?}", err);
std::process::exit(1);
}
};
let mut thirty_two_bit;
let mut sixty_four_bit;
@@ -64,7 +74,10 @@ fn daemon(daemon: daemon::Daemon) -> ! {
&mut sixty_four_bit as &mut dyn Iterator<Item = u64>
}
_ => panic!("acpid: expected [RX]SDT from kernel to be either of those"),
_ => {
log::error!("acpid: expected [RX]SDT from kernel to be RSDT or XSDT");
std::process::exit(1);
}
};
let region_handlers: Vec<(RegionSpace, Box<dyn RegionHandler + 'static>)> = vec![
@@ -75,49 +88,84 @@ fn daemon(daemon: daemon::Daemon) -> ! {
// TODO: I/O permission bitmap?
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
common::acquire_port_io_rights().expect("acpid: failed to set I/O privilege level to Ring 3");
if let Err(err) = common::acquire_port_io_rights() {
log::error!("acpid: failed to set I/O privilege level to Ring 3: {:?}", err);
std::process::exit(1);
}
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(err) => {
log::error!("acpid: failed to open `/scheme/kernel.acpi/kstop`: {}", err);
std::process::exit(1);
}
};
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 mut event_queue = match RawEventQueue::new() {
Ok(q) => q,
Err(err) => {
log::error!("acpid: failed to create event queue: {:?}", err);
std::process::exit(1);
}
};
let socket = match Socket::nonblock() {
Ok(s) => s,
Err(err) => {
log::error!("acpid: failed to create scheme socket: {:?}", err);
std::process::exit(1);
}
};
let mut scheme = self::scheme::AcpiScheme::new(&acpi_context, &socket);
let mut handler = Blocking::new(&socket, 16);
event_queue
if let Err(err) = 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
{
log::error!("acpid: failed to register shutdown pipe for event queue: {:?}", err);
std::process::exit(1);
}
if let Err(err) = event_queue
.subscribe(socket.inner().raw(), 1, EventFlags::READ)
.expect("acpid: failed to register scheme socket for event queue");
{
log::error!("acpid: failed to register scheme socket for event queue: {:?}", err);
std::process::exit(1);
}
register_sync_scheme(&socket, "acpi", &mut scheme)
.expect("acpid: failed to register acpi scheme to namespace");
if let Err(err) = register_sync_scheme(&socket, "acpi", &mut scheme) {
log::error!("acpid: failed to register acpi scheme to namespace: {:?}", err);
std::process::exit(1);
}
daemon.ready();
libredox::call::setrens(0, 0).expect("acpid: failed to enter null namespace");
if let Err(err) = libredox::call::setrens(0, 0) {
log::error!("acpid: failed to enter null namespace: {}", err);
std::process::exit(1);
}
let mut mounted = true;
while mounted {
let Some(event) = event_queue
.next()
.transpose()
.expect("acpid: failed to read event file")
else {
break;
let event = match event_queue.next().transpose() {
Ok(Some(ev)) => ev,
Ok(None) => break,
Err(err) => {
log::error!("acpid: failed to read event file: {:?}", err);
break;
}
};
if event.fd == socket.inner().raw() {
loop {
match handler
.process_requests_nonblocking(&mut scheme)
.expect("acpid: failed to process requests")
{
ControlFlow::Continue(()) => {}
ControlFlow::Break(()) => break,
match handler.process_requests_nonblocking(&mut scheme) {
Ok(flow) => match flow {
ControlFlow::Continue(()) => {}
ControlFlow::Break(()) => break,
},
Err(err) => {
log::error!("acpid: failed to process requests: {:?}", err);
break;
}
}
}
} else if event.fd == shutdown_pipe.as_raw_fd() as usize {