функция обратного вызова 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, что он может отложить запрос к оборудованию для обработки. Дополнительные сведения об этом флаге см. в разделе Схема отложенной обработки NDKPI.
Примечание Этот флаг поддерживается только в NDKPI 1.2 (Windows Server 2012 R2) и более поздних версиях. |
Возвращаемое значение
Функция NDK_FN_FAST_REGISTER возвращает один из следующих кодов NTSTATUS.
Код возврата | Описание |
---|---|
|
Запрос успешно отправлен. Запись о завершении будет помещена в очередь в CQ после завершения запроса на работу. |
|
QP не подключен. |
|
Область памяти не была инициализирована для удаленного доступа во время инициализации быстрой регистрации, но указан рабочий запрос быстрой регистрации , указанный 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