diff --git a/local/patches/base/P46-storage-audio-msix.patch b/local/patches/base/P46-storage-audio-msix.patch new file mode 100644 index 0000000000..372e7edead --- /dev/null +++ b/local/patches/base/P46-storage-audio-msix.patch @@ -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() diff --git a/recipes/core/base/recipe.toml b/recipes/core/base/recipe.toml index e1fa44ff5b..914d82b1b9 100644 --- a/recipes/core/base/recipe.toml +++ b/recipes/core/base/recipe.toml @@ -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]