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 ドライバで動的再構成 (DR) をサポートするためには、これらの関数を実装する必要があります。

scsi_hba_tran(9S) 構造体の tran_quiesce() および tran_unquiesce() ベクトルは、attach(9E) の実行中に HBA エントリポイントを指すように初期化されます。これらの関数は、ユーザーが休止および休止解除操作を開始したときに呼び出されます。

tran_quiesce() エントリポイントは、SCSI バスに接続されているデバイスの再構成前または再構成中に SCSI バス上のすべての動作を停止します。tran_unquiesce() エントリポイントは、SCSA フレームワークによって呼び出され、再構成操作が完了したあとで、SCSI バス上の動作を再開します。

HBA ドライバは、すべての未処理コマンドが完了するのを待ってから成功を返すことで、tran_quiesce() を処理する必要があります。ドライバがバスを休止したあとは、対応する tran_unquiesce() エントリポイントを SCSA フレームワークが呼び出すまで、新しい入出力要求をすべてキューに入れる必要があります。

HBA ドライバは、キューに入っているターゲットドライバの入出力要求を開始することで、tran_unquiesce() の呼び出しを処理します。