Compartir a través de


NDK_FN_FAST_REGISTER función de devolución de llamada (ndkpi.h)

La función NdkFastRegister (NDK_FN_FAST_REGISTER) registra rápidamente una matriz de páginas lógicas del adaptador en una región de memoria existente.

Sintaxis

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
)
{...}

Parámetros

[in] pNdkQp

Puntero a un objeto de par de cola NDK (QP) (NDK_QP).

[in, optional] RequestContext

Valor de contexto que se va a devolver en el miembro requestContext de de la estructura de NDK_RESULT para esta solicitud.

[in] pMr

Puntero a un objeto de región de memoria NDK (MR) (NDK_MR) que se inicializó para el registro rápido.

[in] AdapterPageCount

Número de páginas del parámetro AdapterPageArray. El tamaño de cada página del adapterPageArray de es PAGE_SIZE bytes.

AdapterPageArray

Matriz de direcciones lógicas del adaptador (NDK_LOGICAL_ADDRESS) donde cada dirección es la dirección lógica inicial de una página. Cada dirección debe estar alineada con páginas que sean PAGE_SIZE bytes de longitud. Las direcciones consecutivas de la matriz no son necesariamente consecutivas en términos del espacio de direcciones lógicos, pero la matriz en su conjunto representa una región de memoria prácticamente contigua desde la perspectiva del sistema host.

[in] FBO

Primer desplazamiento de bytes (FBO) dentro de la primera página. La región registrada comienza en este desplazamiento.

[in] Length

Longitud, en bytes, de la región que se registra a partir del FBO. La longitud debe ser menor o igual que el número total de bytes representados por el primer conjunto (AdapterPageCount) de páginas contenidas en la matriz AdapterPageArray menos el FBO.

[in] BaseVirtualAddress

Valor de dirección virtual especificado por el consumidor para hacer referencia a la primera ubicación de bytes de la región de memoria. Este valor debe ser un múltiplo de PAGE_SIZE más FBO. Por lo tanto, los valores permitidos incluyen FBO o FBO más n veces el PAGE_SIZE donde n es mayor o igual que cero. Cero es un valor válido solo si FBO es cero.

[in] Flags

OR bit a bit de marcas que especifica las operaciones permitidas. Se admiten las marcas siguientes:

Valor Significado
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
Indica que la finalización correcta de esta solicitud no genera un evento de finalización en la cola de finalización de salida. Sin embargo, las solicitudes que producen un error generan un evento en la cola de finalización.
NDK_OP_FLAG_READ_FENCE
0x00000002
Indica que todas las solicitudes de lectura anteriores deben completarse antes de que el hardware comience a procesar esta solicitud.
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
Habilite el acceso de lectura a la región de memoria para cualquier elemento del mismo nivel conectado. Para acceder a la región de memoria, los elementos del mismo nivel conectado deben tener un token válido.
NDK_OP_FLAG_ALLOW_LOCAL_WRITE
0x00000010
Permitir el acceso de escritura local a la región de memoria.
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
Habilite el acceso de escritura a la región de memoria para cualquier elemento del mismo nivel conectado. Para acceder a la región de memoria, los elementos del mismo nivel conectado deben tener un token válido.
NDK_OP_FLAG_DEFER
0x00000200
Indica al proveedor NDK que puede aplazar la solicitud al hardware para su procesamiento. Para obtener más información sobre esta marca, vea esquema de procesamiento diferido de NDKPI.

Nota Esta marca solo se admite en NDKPI 1.2 (Windows Server 2012 R2) y versiones posteriores.

Valor devuelto

La función NDK_FN_FAST_REGISTER devuelve uno de los siguientes códigos NTSTATUS.

Código devuelto Descripción
STATUS_SUCCESS
La solicitud se publicó correctamente. Una entrada de finalización se pondrá en cola al CQ cuando se complete la solicitud de trabajo.
STATUS_CONNECTION_INVALID
El QP no está conectado.
STATUS_ACCESS_VIOLATION
La región de memoria no se inicializó para el acceso remoto durante la inicialización de registro rápido, pero la solicitud de trabajo de registro rápido especificada NDK_OP_FLAG_ALLOW_REMOTE_READ o NDK_OP_FLAG_ALLOW_REMOTE_WRITE.
otros códigos de estado
Error.

Observaciones

NdkFastRegister registra rápidamente una matriz de páginas lógicas del adaptador a través de una región de memoria existente que se inicializa para un registro rápido.

Una vez que se devuelve esta llamada, el token de región de memoria para el acceso remoto está disponible con la función NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR) de mr.

NdkFastRegister no admite direcciones virtuales basadas en cero.

Si la marca NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED no está establecida en el AdapterFlags miembro de la estructura de NDK_ADAPTER_INFO, un consumidor de NDK debe pasar la marca de NDK_OP_FLAG_RDMA_READ_SINK cuando registra la memoria que podría usarse como búfer receptor para una solicitud de lectura de RDMA. Algunos proveedores de NDK pueden requerir la habilitación de derechos de acceso especiales en el búfer del receptor para una solicitud de lectura rdma. Esta marca permite que estos proveedores admitan las solicitudes de registro correctamente. Tenga en cuenta que los búferes se pueden registrar con varios fines, por lo que esta marca puede ir acompañada de otras personas.

Si un consumidor de NDK pasa la marca NDK_OP_FLAG_RDMA_READ_SINK en un adaptador para el que se establece la marca NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED en el AdapterFlags miembro de la estructura de NDK_ADAPTER_INFO, el proveedor no debe controlar la marca NDK_OP_FLAG_RDMA_READ_SINK y no debe producir un error en la solicitud debido a la presencia. de esta marca.

Requisitos

Requisito Valor
cliente mínimo admitido Ninguna compatible, compatible con NDIS 6.30 y versiones posteriores.
servidor mínimo admitido Windows Server 2012
de la plataforma de destino de Windows
encabezado de ndkpi.h (incluya Ndkpi.h)
irQL <=DISPATCH_LEVEL

Consulte también

esquema de procesamiento diferido de NDKPI

requisitos de registro de solicitudes de trabajo de NDKPI

NDK_ADAPTER_INFO

NDK_FN_GET_REMOTE_TOKEN_FROM_MR

NDK_LOGICAL_ADDRESS

NDK_MR

NDK_QP

NDK_RESULT