Поделиться через


функция обратного вызова 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

Контекстное значение, возвращаемое в элементе RequestContextструктуры NDK_RESULT для этого запроса.

[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

Побитовое ИЛИ флагов, указывающее разрешенные операции. Поддерживаются следующие флаги:

Значение Значение
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_READ или NDK_OP_FLAG_ALLOW_REMOTE_WRITE.
Другие коды состояния
Произошла ошибка.

Комментарии

NdkFastRegister быстро регистрирует массив логических страниц адаптера в существующей области памяти, которая инициализирована для быстрой регистрации.

После возврата этого вызова маркер области памяти для удаленного доступа будет доступен с помощью функции NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR) mr.

NdkFastRegister не поддерживает виртуальные адреса с нуля.

Если флаг NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED не задан в элементе AdapterFlags структуры NDK_ADAPTER_INFO , потребитель NDK должен передать флаг NDK_OP_FLAG_RDMA_READ_SINK при регистрации памяти, которая может использоваться в качестве буфера приемника для запроса на чтение RDMA. Некоторым поставщикам NDK может потребоваться включить специальные права доступа к буферу приемника для запроса на чтение RDMA. Этот флаг позволяет таким поставщикам соответствующим образом поддерживать запросы на регистрацию. Обратите внимание, что буферы могут быть зарегистрированы для нескольких целей, поэтому этот флаг может сопровождаться другими.

Если потребитель NDK передает флаг NDK_OP_FLAG_RDMA_READ_SINK на адаптере, для которого флаг NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED установлен в элементе AdapterFlags структуры NDK_ADAPTER_INFO , поставщик не обязан обрабатывать флаг NDK_OP_FLAG_RDMA_READ_SINK и не должен завершать запрос из-за наличия этого флага.

Требования

Требование Значение
Минимальная версия клиента Не поддерживается, поддерживается в NDIS 6.30 и более поздних версиях.
Минимальная версия сервера Windows Server 2012
Целевая платформа Windows
Header 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