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

2012/09/06
ATAはオワコンなので、SATAも見てみる。SATAのターゲットドライバはsdである。SATAのIOはSCSIコマンドとして発行される。
    sdstrategy                                       ターゲットドライバ(sd)
        sd_start_cmds
    biowait()  ←セマフォを獲得する
        sema_p()
            scsi_init_pkt                                              SCSA
            scsi_transport
                sata_scsi_start                          SATAフレームワーク
                    sata_txlt_write
                   (sata_txlt_read)
                   (sata_txlt_inquiry)
                   (sata_txlt_test_unit_ready)
                        sata_hba_start
                            ahci_tran_start               HBAドライバ(ahci)
                            ahci_deliver_satapkt
                                ↓コマンド書き込み
                            デバイス処理
    ↓デバイス割り込み
    ahci_intr
        ahci_check_ctl_handle
        ahci_intr_set_device_bits
            ahci_flush_doneq
                (*satapkt->satapkt_comp)(satapkt)
                    sata_txlt_rw_completion  ←コマンド別のコールバック関数
                        scsi_hba_pkt_comp
                            (*pkt->pkt_comp)(pkt) -> sdintr
                                sd_return_command
                                    biodone()
                                        sema_v()

-> ldi_strategy
-> bdev_strategy driver_lyr.c#2049
-> sdinfo driver.c#460
-> sdstrategy driver.c#472
-> ddi_xbuf_qstrategy sd.c#11514
-> xbuf_iostart sd_xbuf.c#258
-> sd_xbuf_strategy sd_xbuf.c#541
-> sd_xbuf_init sd.c#11541
-> bioerror sd.c#11670
-> sd_mapblockaddr_iostart sd.c#11544
-> cmlb_is_valid sd.c#12592
-> cmlb_partinfo sd.c#12626
-> sd_core_iostart sd.c#12767
-> sd_add_buf_to_waitq sd.c#13565
-> kstat_waitq_enter sd.c#13566
-> sd_start_cmds sd.c#13567
-> sd_initpkt_for_buf sd.c#14999
-> sd_setup_rw_pkt sd.c#13733
-> scsi_init_pkt sd.c#13896
-> sata_scsi_init_pkt scsi_resource.c#586
-> scsi_hba_pkt_alloc sata.c#2229
-> sata_pkt_alloc sata.c#2253
-> sata_get_device_info sata.c#2293
-> sata_adjust_dma_attr sata.c#2296
-> sata_dma_buf_setup sata.c#2308
-> bioaligned
-> sata_check_for_dma_error sata.c#2336
-> kstat_waitq_to_runq sd.c#15170
-> scsi_transport sd.c#15185
-> scsi_address_device
-> sata_scsi_start scsi_transport.c#169
-> sata_get_device_info sata.c#2442
-> sata_txlt_read sata.c#2609
-> sata_txlt_generic_pkt_info sata.c#6071
-> sata_validate_scsi_address sata.c#3170
-> sata_validate_sata_address sata.c#12227
-> sata_get_device_info sata.c#3247
-> sata_get_device_info sata.c#6077
-> sata_hba_start sata.c#6275
-> sata_get_cmd_protocol
-> sata_hba_start_cmn
-> sata_get_device_info
-> ahci_tran_start sata.c#6971
-> ahci_get_ahci_addr ahci.c#1538
-> ahci_check_ctl_handle ahci.c#1691
-> ahci_check_acc_handle ahci.c#3485
-> ahci_deliver_satapkt ahci.c#1722
-> ahci_claim_free_slot ahci.c#2094
-> ahci_check_dma_handle ahci.c#2361
-> ahci_check_acc_handle ahci.c#2386

0 件のコメント:

コメントを投稿