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 开始注册的区域的长度(以字节为单位)。 长度必须小于或等于第一组 (AdapterPageCount 表示的总字节数,) AdapterPageArray 数组中包含的页面减去 FBO。

[in] BaseVirtualAddress

使用者指定的虚拟地址值,用于引用内存区域的第一个字节位置。 此值必须是 PAGE_SIZE 加 FBO 的倍数。 因此,允许的值包括 FBO,或 FBO 加 n 乘 以PAGE_SIZE ,其中 n 大于或等于零。 仅当 FBO 为零时,零是有效值。

[in] Flags

指定允许的操作的标志的按位 OR。 支持以下标志:

含义
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
指示此请求的成功完成不会在出站完成队列中生成完成事件。 但是,失败的请求会在完成队列中生成事件。
NDK_OP_FLAG_READ_FENCE
0x00000002
指示在硬件开始处理此请求之前,所有以前的读取请求都必须完成。
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
为任何连接的对等方启用对内存区域的读取访问。 若要访问内存区域,连接的对等节点必须具有有效的令牌。
NDK_OP_FLAG_ALLOW_LOCAL_WRITE
0x00000010
允许对内存区域进行本地写入访问。
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
为任何连接的对等方启用对内存区域的写入访问。 若要访问内存区域,连接的对等节点必须具有有效的令牌。
NDK_OP_FLAG_DEFER
0x00000200
向 NDK 提供程序指示它可以延迟指示对硬件的请求进行处理。 有关此标志的详细信息,请参阅 NDKPI 延迟处理方案

注意此标志仅在 NDKPI 1.2 (Windows Server 2012 R2) 及更高版本中受支持。

返回值

NDK_FN_FAST_REGISTER函数返回以下 NTSTATUS 代码之一。

返回代码 说明
STATUS_SUCCESS
已成功发布请求。 完成工作请求后,完成项将排队到 CQ。
STATUS_CONNECTION_INVALID
QP 未连接。
STATUS_ACCESS_VIOLATION
在快速注册初始化期间,未为远程访问初始化内存区域,但 NDK_OP_FLAG_ALLOW_REMOTE_READNDK_OP_FLAG_ALLOW_REMOTE_WRITE指定的快速注册工作请求。
其他状态代码
出现了错误。

注解

NdkFastRegister 在为快速注册初始化的现有内存区域上快速注册适配器逻辑页数组。

此调用返回后,NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR MR) 函数提供用于远程访问的内存区域令牌。

NdkFastRegister 不支持从零开始的虚拟地址。

如果未在 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

另请参阅

NDKPI 延迟处理方案

NDKPI 工作请求发布要求

NDK_ADAPTER_INFO

NDK_FN_GET_REMOTE_TOKEN_FROM_MR

NDK_LOGICAL_ADDRESS

NDK_MR

NDK_QP

NDK_RESULT