编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

动态重新配置

要支持最少的一组热插拔操作,驱动程序可能需要实现对总线停止、总线取消停止和总线重置的支持。scsi_hba_tran(9S) 结构支持这些操作。如果硬件不要求停止、取消停止或重置等操作,则无需对驱动程序进行任何更改。

scsi_hba_tran 结构包含以下字段:

int (*tran_quiesce)(dev_info_t *hba-dip);
int (*tran_unquiesce)(dev_info_t *hba-dip);
int (*tran_bus_reset)(dev_info_t *hba-dip, int level);

这些接口用于停止和取消停止 SCSI 总线。

#include <sys/scsi/scsi.h>

int prefixtran_quiesce(dev_info_t *hba-dip);
int prefixtran_unquiesce(dev_info_t *hba-dip);

tran_quiesce(9E)tran_unquiesce(9E) 用于不适于热插拔的 SCSI 设备。HBA 驱动程序必须实现这些函数才能支持动态重新配置 (dynamic reconfiguration, DR)。

在执行 attach(9E) 的过程中,应将 scsi_hba_tran(9S) 结构中的 tran_quiesce()tran_unquiesce() 向量初始化为指向 HBA 入口点。用户启动停止和取消停止操作时,将会调用这些函数。

tran_quiesce() 入口点用于在重新配置连接到 SCSI 总线的设备之前和期间停止 SCSI 总线上的所有活动。完成重新配置操作后,SCSA 框架可调用 tran_unquiesce() 入口点来恢复 SCSI 总线上的活动。

返回成功信息之前,HBA 驱动程序需要处理 tran_quiesce(),方法是等待所有未完成的命令完成。驱动程序停止总线后,必须将任何新的 I/O 请求排入队列,直到 SCSA 框架调用对应的 tran_unquiesce() 入口点为止。

HBA 驱动程序通过启动队列中的所有目标驱动程序 I/O 请求来处理对 tran_unquiesce() 的调用。