SCSI 微型端口驱动程序的 HwScsiInterrupt 例程
输入时, HwScsiInterrupt 例程应确定其 HBA 是否实际生成了中断。 如果 HwScsiInterrupt 检测到虚假中断,则必须尽快返回 FALSE,以便可以快速调用实际生成中断的设备 ISR。
否则,微型端口驱动程序的 HwScsiInterrupt 例程通常负责完成导致中断的 I/O 操作。 根据 HBA 和微型端口驱动程序的设计, HwScsiInterrupt 例程执行以下部分或全部操作:
消除 HBA 上的中断 (所需的)
如果 HBA 指示 (在操作过程中发生了某些 SCSI 错误条件并可能记录错误,则通过调用 ScsiPortNotification 或 ScsiPortCompleteRequest) 通知端口驱动程序。
有关日志记录错误的详细信息,请参阅 SCSI 微型端口驱动程序中的错误处理。
完成导致中断的请求操作,例如调用 ScsiPortIoMapTransfer (如果中断来自以前选择的目标 TID 和 LU,请参阅 SCSI 微型端口驱动程序的 HwScsiDmaStarted 例程) ,指示已准备好传输数据。
当 HwScsiInterrupt 例程 (或内部微型端口驱动程序例程) 完成 SRB 时,它会调用 ScsiPortNotification 两次:
首先,使用 NotificationTypeRequestComplete 和刚刚满足的 SRB。
接下来,使用 NotificationTypeNextRequest;如果 HBA 支持标记队列或每个逻辑单元多个请求,则使用 NextLuRequest 。
为了提高整体系统性能,微型端口驱动程序的 HwScsiInterrupt 例程应仅执行处理 I/O 请求所需的最低要求。 也就是说,微型端口驱动程序应设计为尽快从 HwScsiInterrupt 例程返回控制权。 HwScsiInterrupt 例程不得以较大的间隔调用 ScsiPortStallExecution,从而垄断处理器并阻止其他驱动程序为其设备中断提供服务。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈