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 par de colas NDK (QP) (NDK_QP).

[in, optional] RequestContext

Valor de contexto que se va a devolver en el miembro RequestContext de la estructura 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 de AdapterPageArray es de 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 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 de la 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 conectados 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 conectados deben tener un token válido.
NDK_OP_FLAG_DEFER
0x00000200
Indica al proveedor de 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 en el 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 rápida del registro, 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
Se produjo un error.

Comentarios

NdkFastRegister registra rápidamente una matriz de páginas lógicas del adaptador en una región de memoria existente que se inicializa para el 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 la 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 miembro AdapterFlags 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 a estos proveedores admitir 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 otros.

Si un consumidor de NDK pasa la marca de 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 miembro AdapterFlags de la estructura NDK_ADAPTER_INFO , el proveedor no es necesario para 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 Value
Cliente mínimo compatible Ninguno compatible, compatible con NDIS 6.30 y versiones posteriores.
Servidor mínimo compatible Windows Server 2012
Plataforma de destino Windows
Encabezado ndkpi.h (incluya Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Consulte también

Esquema de procesamiento diferido de NDKPI

Requisitos de publicación 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