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:
@@ -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()
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user