async_port_probe() 调用在 Linux 内核中如何工作?

async_port_probe() 调用在 Linux 内核中如何工作?

为了了解 SATA 设备枚举过程,我正在研究 driver/ata/ata_piix.c,它在命令输出中显示为我的系统的 SATA 主机驱动程序lspci

00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
Subsystem: Elitegroup Computer Systems Device 2672
Kernel driver in use: ata_piix
Kernel modules: pata_acpi

AFAIK,SATA 主机控制器是连接在 PCI 总线上的 PCI 设备。现在,当ata_piix.c 的probe 方法执行时,它将初始化主机控制器,并且许多其他初始化序列将在probe 调用中完成。在探针方法的末尾执行以下代码:

/* perform each probe asynchronously */                                 
for (i = 0; i < host->n_ports; i++) {                                   
            struct ata_port *ap = host->ports[i];                           
            async_schedule(async_port_probe, ap);                           
    }    

因此,根据我的理解,调用aync_schedule()将一一调用连接到主机端口的SATA设备的探测方法。以下是我的一些疑问

  1. 我的上述理解正确吗?这就是 SATA 设备枚举的工作原理,如果没有,则表明 Linux 内核如何处理 SATA 设备的枚举过程。
  2. 请建议具体如何aync_schedule()运作?
  3. 如果ata_piix.c用作 SATA 主机控制器的内核驱动程序,那么为什么用于设备的内核模块显示为 命令输出pata_acpi中的内容lspci

相关内容