ディスクIOの関数スタック(cmdk)

2012/09/06
ざっと流れを整理してみる。変なことがあるかもしれないので注意。

cmdk(7d)
ata(7d)

割り込みハンドラ - デバイスドライバの記述

    cmdkread, cmdkwrite                            ターゲットドライバ(cmdk)
        cmdkrw
            physio
                cmdkstrategy
                biowait  ←セマフォを獲得する
                    sema_p
                    dadk_strategy                      Direct Attached Disk
                        dadk_pkt
                        dadk_transport
                            ata_disk_transport             HBAドライバ(ata)
                                ghd_transport
                                    ata_hba_start
                                        ata_pciide_dma_start
                                            ↓コマンド書き込み
                                        デバイス処理
    ↓デバイス割り込み
    ata_intr
        ghd_intr
            (*statfunc)(handle, intr_status) -> ata_get_status
            (*processfunc)(handle, intr_status) -> ata_process_intr
                ghd_complete
                    ghd_waitq_delete
                    ddi_trigger_softintr
    ↓ソフトウェア割り込み
    ghd_doneq_process
        (*cccp->ccc_hba_complete) -> ata_hba_complete
            (*ata_pktp->ap_complete) -> ata_disk_complete
                (*pktp->cp_callback) -> dadk_pktcb
                    dadk_iodone
                        biodone()
                            sema_v()

処理完了がターゲットドライバ層まで返ってるところが見つからない。

0 件のコメント:

コメントを投稿