NDK_FN_FAST_REGISTER コールバック関数 (ndkpi.h)
NdkFastRegister (NDK_FN_FAST_REGISTER) 関数は、アダプター論理ページの配列を既存のメモリ領域に高速登録します。
構文
NDK_FN_FAST_REGISTER NdkFnFastRegister;
NTSTATUS NdkFnFastRegister(
[in] NDK_QP *pNdkQp,
[in, optional] PVOID RequestContext,
[in] NDK_MR *pMr,
[in] ULONG AdapterPageCount,
const NDK_LOGICAL_ADDRESS *AdapterPageArray,
[in] ULONG FBO,
[in] SIZE_T Length,
[in] PVOID BaseVirtualAddress,
[in] ULONG Flags
)
{...}
パラメーター
[in] pNdkQp
NDK キュー ペア (QP) オブジェクト (NDK_QP) へのポインター。
[in, optional] RequestContext
この要求のNDK_RESULT構造体の RequestContext メンバーで返されるコンテキスト値。
[in] pMr
高速登録用に初期化された NDK メモリ領域 (MR) オブジェクト (NDK_MR) へのポインター。
[in] AdapterPageCount
AdapterPageArray パラメーター内のページ数。 AdapterPageArray の各ページのサイズはPAGE_SIZE バイトです。
AdapterPageArray
各アドレスがページの開始論理アドレスであるアダプター論理アドレス (NDK_LOGICAL_ADDRESS) の配列。 各アドレスは、 PAGE_SIZEバイト長 のページを配置する必要があります。 配列内の連続するアドレスは、必ずしも論理アドレス空間の観点から連続するとは限りませんが、配列全体は、ホスト システムの観点から見ると、事実上連続したメモリ領域を表します。
[in] FBO
最初のページ内の最初のバイト オフセット (FBO)。 登録済みリージョンは、このオフセットから開始されます。
[in] Length
FBO 以降に登録される領域の長さ (バイト単位)。 この長さは、AdapterPageArray 配列に含まれるページの最初のセット (AdapterPageCount) によって表される合計バイト数から FBO を引いたバイト数以下である必要があります。
[in] BaseVirtualAddress
メモリ領域の最初のバイト位置を参照するコンシューマー指定の仮想アドレス値。 この値は、 PAGE_SIZE と FBO の倍数である必要があります。 そのため、許可される値には、FBO、または FBO に n を加えた値が 、n が 0 以上であるPAGE_SIZEの 1 倍になります。 ゼロは、FBO が 0 の場合にのみ有効な値です。
[in] Flags
許可される操作を指定するフラグのビットごとの OR。 次のフラグがサポートされています。
値 | 意味 |
---|---|
|
この要求が正常に完了しても、送信完了キューに完了イベントが生成されないことを示します。 ただし、失敗した要求では、完了キューにイベントが生成されます。 |
|
ハードウェアがこの要求の処理を開始する前に、以前のすべての読み取り要求を完了する必要があることを示します。 |
|
接続されているピアのメモリ領域への読み取りアクセスを有効にします。 メモリ領域にアクセスするには、接続されているピアに有効なトークンが必要です。 |
|
メモリ領域へのローカル書き込みアクセスを許可します。 |
|
接続されているピアのメモリ領域への書き込みアクセスを有効にします。 メモリ領域にアクセスするには、接続されているピアに有効なトークンが必要です。 |
|
NDK プロバイダーに対して、処理のためにハードウェアへの要求を示す遅延が発生する可能性があることを示します。 このフラグの詳細については、「 NDKPI 遅延処理スキーム」を参照してください。
メモこのフラグは、NDKPI 1.2 (Windows Server 2012 R2) 以降でのみサポートされます。 |
戻り値
NDK_FN_FAST_REGISTER関数は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
要求が正常に投稿されました。 作業要求が完了すると、完了エントリが CQ にキューに入れられます。 |
|
QP が接続されていません。 |
|
メモリ領域は、高速レジスタの初期化中にリモート アクセス用に初期化されませんでしたが、高速登録の作業要求で NDK_OP_FLAG_ALLOW_REMOTE_READ または NDK_OP_FLAG_ALLOW_REMOTE_WRITE指定されました。 |
|
エラーが発生しました。 |
解説
NdkFastRegister は、高速登録用に初期化された既存のメモリ領域にアダプター論理ページの配列を高速登録します。
この呼び出しが戻った後、リモート アクセスのメモリ領域トークンは、MR の NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR) 関数で使用できます。
NdkFastRegister では、0 から始まる仮想アドレスはサポートされていません。
NDK_ADAPTER_INFO構造体のAdapterFlags メンバーに NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED フラグが設定されていない場合、NDK コンシューマーは、RDMA 読み取り要求のシンク バッファーとして使用できるメモリを登録するときに、NDK_OP_FLAG_RDMA_READ_SINK フラグを渡す必要があります。 特定の NDK プロバイダーでは、RDMA 読み取り要求のシンク バッファーに対して特別なアクセス権を有効にする必要がある場合があります。 このフラグを使用すると、このようなプロバイダーは登録要求を適切にサポートできます。 バッファーは複数の目的で登録される可能性があるため、このフラグには他のフラグが伴う場合があることに注意してください。
NDK コンシューマーが、NDK_ADAPTER_INFO構造体の AdapterFlags メンバーにNDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED フラグが設定されているアダプターでNDK_OP_FLAG_RDMA_READ_SINK フラグを渡す場合、プロバイダーはNDK_OP_FLAG_RDMA_READ_SINK フラグを処理する必要はありません。また、このフラグが存在するため、要求を失敗させてはなりません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | サポートされていません。NDIS 6.30 以降でサポートされています。 |
サポートされている最小のサーバー | Windows Server 2012 |
対象プラットフォーム | Windows |
ヘッダー | ndkpi.h (Ndkpi.h を含む) |
IRQL | <=DISPATCH_LEVEL |