NDK_FN_FAST_REGISTER função de retorno de chamada (ndkpi.h)

A função NdkFastRegister (NDK_FN_FAST_REGISTER) registra rapidamente uma matriz de páginas lógicas do adaptador em uma região de memória existente.

Sintaxe

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

Um ponteiro para um objeto de QP (par de filas) NDK (NDK_QP).

[in, optional] RequestContext

Um valor de contexto a ser retornado no membro RequestContext da estrutura NDK_RESULT para essa solicitação.

[in] pMr

Um ponteiro para um objeto mr (região de memória) do NDK (NDK_MR) que foi inicializado para registro rápido.

[in] AdapterPageCount

O número de páginas no parâmetro AdapterPageArray . O tamanho de cada página no AdapterPageArray é PAGE_SIZE bytes.

AdapterPageArray

Uma matriz de endereços lógicos do adaptador (NDK_LOGICAL_ADDRESS) em que cada endereço é o endereço lógico inicial de uma página. Cada endereço deve ser páginas alinhadas PAGE_SIZE bytes de comprimento. Endereços consecutivos na matriz não são necessariamente consecutivos em termos de espaço de endereço lógico, mas a matriz como um todo representa uma região de memória virtualmente contígua da perspectiva do sistema host.

[in] FBO

O primeiro deslocamento de bytes (FBO) na primeira página. A região registrada começa nesse deslocamento.

[in] Length

O comprimento, em bytes, da região que está sendo registrada a partir do FBO. O comprimento deve ser menor ou igual ao número total de bytes representados pelo primeiro conjunto (AdapterPageCount) de páginas contidas na matriz AdapterPageArray menos o FBO.

[in] BaseVirtualAddress

O valor do endereço virtual especificado pelo consumidor para se referir ao primeiro local de byte da região de memória. Esse valor deve ser um múltiplo de PAGE_SIZE mais FBO. Portanto, os valores permitidos incluem FBO ou FBO mais n vezes o PAGE_SIZE em que n é maior ou igual a zero. Zero será um valor válido somente se FBO for zero.

[in] Flags

Um OR bit a bit de sinalizadores que especifica as operações permitidas. Há suporte para os seguintes sinalizadores:

Valor Significado
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
Indica que a conclusão bem-sucedida dessa solicitação não gera um evento de conclusão na fila de conclusão de saída. No entanto, as solicitações que falham geram um evento na fila de conclusão.
NDK_OP_FLAG_READ_FENCE
0x00000002
Indica que todas as solicitações de leitura anteriores devem ser concluídas antes que o hardware comece a processar essa solicitação.
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
Habilite o acesso de leitura à região de memória para qualquer par conectado. Para acessar a região de memória, os pares conectados devem ter um token válido.
NDK_OP_FLAG_ALLOW_LOCAL_WRITE
0x00000010
Permitir acesso de gravação local à região de memória.
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
Habilite o acesso de gravação à região de memória para qualquer par conectado. Para acessar a região de memória, os pares conectados devem ter um token válido.
NDK_OP_FLAG_DEFER
0x00000200
Indica ao provedor NDK que ele pode adiar indicando a solicitação de hardware para processamento. Para obter mais informações sobre esse sinalizador, consulte Esquema de processamento adiado do NDKPI.

Nota Esse sinalizador tem suporte apenas no NDKPI 1.2 (Windows Server 2012 R2) e posterior.

Retornar valor

A função NDK_FN_FAST_REGISTER retorna um dos seguintes códigos NTSTATUS.

Código de retorno Descrição
STATUS_SUCCESS
A solicitação foi postada com êxito. Uma entrada de conclusão será enfileirada no CQ quando a solicitação de trabalho for concluída.
STATUS_CONNECTION_INVALID
O QP não está conectado.
STATUS_ACCESS_VIOLATION
A região de memória não foi inicializada para acesso remoto durante a inicialização de registro rápido, mas a solicitação de trabalho de registro rápido especificada NDK_OP_FLAG_ALLOW_REMOTE_READ ou NDK_OP_FLAG_ALLOW_REMOTE_WRITE.
Outros códigos de status
Ocorreu um erro.

Comentários

NdkFastRegister registra rapidamente uma matriz de páginas lógicas do adaptador em uma região de memória existente que é inicializada para registro rápido.

Depois que essa chamada retornar, o token de região de memória para acesso remoto estará disponível com a função NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR) do MR.

O NdkFastRegister não dá suporte a endereços virtuais baseados em zero.

Se o sinalizador NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED não estiver definido no membro AdapterFlags da estrutura NDK_ADAPTER_INFO , um consumidor do NDK deverá passar o sinalizador NDK_OP_FLAG_RDMA_READ_SINK quando registrar a memória que pode ser usada como buffer de coletor para uma solicitação de leitura RDMA. Determinados provedores NDK podem exigir a habilitação de direitos de acesso especiais no buffer do coletor para uma solicitação de leitura RDMA. Esse sinalizador permite que esses provedores deem suporte às solicitações de registro adequadamente. Observe que os buffers podem ser registrados para várias finalidades, portanto, esse sinalizador pode ser acompanhado por outras pessoas.

Se um consumidor do NDK passar o sinalizador NDK_OP_FLAG_RDMA_READ_SINK em um adaptador para o qual o sinalizador NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED é definido no membro AdapterFlags da estrutura NDK_ADAPTER_INFO , o provedor não precisará manipular o sinalizador de NDK_OP_FLAG_RDMA_READ_SINK e não deverá falhar na solicitação devido à presença desse sinalizador.

Requisitos

Requisito Valor
Cliente mínimo com suporte Nenhum com suporte, com suporte no NDIS 6.30 e posterior.
Servidor mínimo com suporte Windows Server 2012
Plataforma de Destino Windows
Cabeçalho ndkpi.h (inclua Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Confira também

Esquema de processamento adiado do NDKPI

Requisitos de postagem de solicitação de trabalho do NDKPI

NDK_ADAPTER_INFO

NDK_FN_GET_REMOTE_TOKEN_FROM_MR

NDK_LOGICAL_ADDRESS

NDK_MR

NDK_QP

NDK_RESULT