base: Migrate ahcid and ac97d to MSI-X interrupts (P46)

Switch storage and audio drivers from legacy INTx to
pci_allocate_interrupt_vector which auto-prefers MSI-X > MSI > Legacy.
This commit is contained in:
2026-05-20 17:12:51 +03:00
parent e178e0fd86
commit 1a0a684765
2 changed files with 63 additions and 0 deletions
@@ -0,0 +1,61 @@
diff --git a/drivers/audio/ac97d/src/main.rs b/drivers/audio/ac97d/src/main.rs
index 5878bf2d..a7e87373 100644
--- a/drivers/audio/ac97d/src/main.rs
+++ b/drivers/audio/ac97d/src/main.rs
@@ -5,0 +6 @@ use event::{user_data, EventQueue};
+use pcid_interface::irq_helpers::pci_allocate_interrupt_vector;
@@ -40,5 +40,0 @@ fn daemon(daemon: daemon::Daemon, pcid_handle: PciFunctionHandle) -> ! {
- let irq = pci_config
- .func
- .legacy_interrupt_line
- .expect("ac97d: no legacy interrupts supported");
-
@@ -57 +53,7 @@ fn daemon(daemon: daemon::Daemon, pcid_handle: PciFunctionHandle) -> ! {
- let mut irq_file = irq.irq_handle("ac97d");
+ let irq_file = match pci_allocate_interrupt_vector(&mut pcid_handle, "ac97d") {
+ Some(iv) => iv,
+ None => {
+ log::error!("ac97d: no interrupt vector available, exiting");
+ std::process::exit(1);
+ }
+ };
@@ -74 +76 @@ fn daemon(daemon: daemon::Daemon, pcid_handle: PciFunctionHandle) -> ! {
- irq_file.as_raw_fd() as usize,
+ irq_file.irq_handle().as_raw_fd() as usize,
@@ -101 +103 @@ fn daemon(daemon: daemon::Daemon, pcid_handle: PciFunctionHandle) -> ! {
- irq_file.read(&mut irq).expect("ac97d: failed");
+ irq_file.irq_handle().read(&mut irq).expect("ac97d: failed");
@@ -106 +108 @@ fn daemon(daemon: daemon::Daemon, pcid_handle: PciFunctionHandle) -> ! {
- irq_file.write(&mut irq).expect("ac97d: failed");
+ irq_file.irq_handle().write(&mut irq).expect("ac97d: failed");
diff --git a/drivers/storage/ahcid/src/main.rs b/drivers/storage/ahcid/src/main.rs
index 4c7a1412..da92036b 100644
--- a/drivers/storage/ahcid/src/main.rs
+++ b/drivers/storage/ahcid/src/main.rs
@@ -9,0 +10 @@ use event::{EventFlags, RawEventQueue};
+use pcid_interface::irq_helpers::pci_allocate_interrupt_vector;
@@ -26,5 +26,0 @@ fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! {
- let irq = pci_config
- .func
- .legacy_interrupt_line
- .expect("ahcid: no legacy interrupts supported");
-
@@ -40,0 +37,8 @@ fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! {
+ let irq_file = match pci_allocate_interrupt_vector(&mut pcid_handle, "ahcid") {
+ Some(iv) => iv,
+ None => {
+ error!("ahcid: no interrupt vector available, exiting");
+ std::process::exit(1);
+ }
+ };
+
@@ -57,2 +61 @@ fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! {
- let mut irq_file = irq.irq_handle("ahcid");
- let irq_fd = irq_file.as_raw_fd() as usize;
+ let irq_fd = irq_file.irq_handle().as_raw_fd() as usize;
@@ -77 +80 @@ fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! {
- if irq_file
+ if irq_file.irq_handle()
@@ -95 +98 @@ fn daemon(daemon: daemon::Daemon, mut pcid_handle: PciFunctionHandle) -> ! {
- irq_file
+ irq_file.irq_handle()
+2
View File
@@ -91,6 +91,8 @@ patches = [
"P44-acpid-thermal-zones.patch",
# P45: Migrate e1000d and ixgbed to MSI-X via pci_allocate_interrupt_vector
"P45-net-msix-adoption.patch",
# P46: Migrate ahcid and ac97d to MSI-X via pci_allocate_interrupt_vector
"P46-storage-audio-msix.patch",
]
[package]