Quellcode durchsuchen

fix: 修复存在多个virtio设备时,中断号冲突的问题 (#904)

LoGin vor 6 Monaten
Ursprung
Commit
232570ae98
2 geänderte Dateien mit 6 neuen und 4 gelöschten Zeilen
  1. 2 2
      kernel/src/driver/pci/pci_irq.rs
  2. 4 2
      kernel/src/init/initial_kthread.rs

+ 2 - 2
kernel/src/driver/pci/pci_irq.rs

@@ -369,7 +369,7 @@ pub trait PciInterrupt: PciDeviceStructure {
                         irq_num,
                         common_msg.irq_name.clone(),
                         common_msg.irq_hander,
-                        IrqHandleFlags::empty(),
+                        IrqHandleFlags::IRQF_SHARED,
                         Some(common_msg.dev_id.clone()),
                     );
 
@@ -532,7 +532,7 @@ pub trait PciInterrupt: PciDeviceStructure {
                         irq_num,
                         common_msg.irq_name.clone(),
                         common_msg.irq_hander,
-                        IrqHandleFlags::empty(),
+                        IrqHandleFlags::IRQF_SHARED,
                         Some(common_msg.dev_id.clone()),
                     );
 

+ 4 - 2
kernel/src/init/initial_kthread.rs

@@ -33,9 +33,11 @@ fn kernel_init() -> Result<(), SystemError> {
     // 由于目前加锁,速度过慢,所以先不开启双缓冲
     // scm_enable_double_buffer().expect("Failed to enable double buffer");
 
-    #[cfg(target_arch = "x86_64")]
-    crate::driver::disk::ahci::ahci_init().expect("Failed to initialize AHCI");
     virtio_probe();
+    #[cfg(target_arch = "x86_64")]
+    crate::driver::disk::ahci::ahci_init()
+        .inspect_err(|e| log::warn!("Failed to initialize AHCI: {e:?}"))
+        .ok();
     mount_root_fs().expect("Failed to mount root fs");
     e1000e_init();
     net_init().unwrap_or_else(|err| {