Linuxカーネルでasync_port_probe()呼び出しはどのように機能しますか?

Linuxカーネルでasync_port_probe()呼び出しはどのように機能しますか?

SATAデバイスの列挙プロセスを理解するために、コマンド出力に私のシステムのSATAホストドライバとして表示されるドライバ/ata/ata_piix.cを見ました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

SATAホストコントローラであるAFAIKは、PCIバスに接続されたPCIデバイスです。 ata_piix.cのプローブメソッドが実行されると、ホストコントローラが初期化され、プローブ呼び出しで他の多くの初期化シーケンスが完了します。プローブメソッドの最後で次のコードを実行します。

/* 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つずつ呼び出します。私の質問は次のとおりです。

  1. 上記の理解は正しいですか?これはSATAデバイスの列挙が機能する方法であり、そうでない場合はLinuxカーネルがSATAデバイスの列挙プロセスを処理する方法です。
  2. aync_schedule()正確にどのように機能するかを提案してください。
  3. SATAホストコントローラ用のカーネルドライバとして使用されている場合、ata_piix.cデバイス用のカーネルモジュールがコマンドpata_acpi出力に表示されるのはなぜですかlspci

関連情報