NDK_FN_FAST_REGISTER fonction de rappel (ndkpi.h)

La fonction NdkFastRegister (NDK_FN_FAST_REGISTER) enregistre rapidement un tableau de pages logiques d’adaptateur sur une région de mémoire existante.

Syntaxe

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

Paramètres

[in] pNdkQp

Pointeur vers un objet de paire de files d’attente NDK (QP) (NDK_QP).

[in, optional] RequestContext

Valeur de contexte à retourner dans le membre RequestContext de la structure NDK_RESULT pour cette requête.

[in] pMr

Pointeur vers un objet de région de mémoire NDK (NDK_MR) initialisé pour une inscription rapide.

[in] AdapterPageCount

Nombre de pages dans le paramètre AdapterPageArray . La taille de chaque page dans AdapterPageArray est de PAGE_SIZE octets.

AdapterPageArray

Tableau d’adresses logiques d’adaptateur (NDK_LOGICAL_ADDRESS) où chaque adresse est l’adresse logique de départ d’une page. Chaque adresse doit être alignée sur des pages PAGE_SIZE octets. Les adresses consécutives dans le tableau ne sont pas nécessairement consécutives en termes d’espace d’adressage logique, mais le tableau dans son ensemble représente une région de mémoire pratiquement contiguë du point de vue du système hôte.

[in] FBO

Premier décalage d’octet (FBO) dans la première page. La région inscrite commence à ce décalage.

[in] Length

Longueur, en octets, de la région en cours d’inscription à partir du FBO. La longueur doit être inférieure ou égale au nombre total d’octets qui sont représentés par le premier ensemble (AdapterPageCount) de pages contenues dans le tableau AdapterPageArray moins le FBO.

[in] BaseVirtualAddress

Valeur d’adresse virtuelle spécifiée par le consommateur pour faire référence au premier emplacement d’octet de la région mémoire. Cette valeur doit être un multiple de PAGE_SIZE plus FBO. Par conséquent, les valeurs autorisées incluent FBO, ou FBO plus n fois le PAGE_SIZE où n est supérieur ou égal à zéro. Zéro est une valeur valide uniquement si FBO est égal à zéro.

[in] Flags

Or au niveau du bit des indicateurs qui spécifie les opérations autorisées. Les indicateurs suivants sont pris en charge :

Valeur Signification
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
Indique que la réussite de cette demande ne génère pas d’événement d’achèvement dans la file d’attente d’achèvement sortante. Toutefois, les demandes qui échouent génèrent un événement dans la file d’attente d’achèvement.
NDK_OP_FLAG_READ_FENCE
0x00000002
Indique que toutes les demandes de lecture antérieures doivent être terminées avant que le matériel ne commence à traiter cette demande.
NDK_OP_FLAG_ALLOW_REMOTE_READ
0x00000008
Activez l’accès en lecture à la région mémoire pour n’importe quel homologue connecté. Pour accéder à la région de mémoire, les homologues connectés doivent disposer d’un jeton valide.
NDK_OP_FLAG_ALLOW_LOCAL_WRITE
0x00000010
Autoriser l’accès en écriture locale à la région mémoire.
NDK_OP_FLAG_ALLOW_REMOTE_WRITE
0x00000030
Activez l’accès en écriture à la région mémoire pour n’importe quel homologue connecté. Pour accéder à la région de mémoire, les homologues connectés doivent disposer d’un jeton valide.
NDK_OP_FLAG_DEFER
0x00000200
Indique au fournisseur NDK qu’il peut différer l’indication de la demande au matériel pour traitement. Pour plus d’informations sur cet indicateur, consultez Schéma de traitement différé NDKPI.

Note Cet indicateur est pris en charge uniquement dans NDKPI 1.2 (Windows Server 2012 R2) et versions ultérieures.

Valeur retournée

La fonction NDK_FN_FAST_REGISTER retourne l’un des codes NTSTATUS suivants.

Code de retour Description
STATUS_SUCCESS
La demande a été publiée avec succès. Une entrée d’achèvement est mise en file d’attente vers le CQ une fois la demande de travail terminée.
STATUS_CONNECTION_INVALID
Le QP n’est pas connecté.
STATUS_ACCESS_VIOLATION
La région de mémoire n’a pas été initialisée pour l’accès à distance lors de l’initialisation de l’enregistrement rapide, mais la demande de travail d’inscription rapide spécifiée NDK_OP_FLAG_ALLOW_REMOTE_READ ou NDK_OP_FLAG_ALLOW_REMOTE_WRITE.
Autres codes status
Une erreur est survenue.

Remarques

NdkFastRegister enregistre rapidement un tableau de pages logiques d’adaptateur sur une région de mémoire existante qui est initialisée pour une inscription rapide.

Une fois cet appel retourné, le jeton de région de mémoire pour l’accès à distance est disponible avec la fonction NdkGetRemoteTokenFromMr (NDK_FN_GET_REMOTE_TOKEN_FROM_MR) de la mr.

NdkFastRegister ne prend pas en charge les adresses virtuelles de base zéro.

Si l’indicateur NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED n’est pas défini dans le membre AdapterFlags de la structure NDK_ADAPTER_INFO , un consommateur NDK doit passer l’indicateur NDK_OP_FLAG_RDMA_READ_SINK lorsqu’il inscrit la mémoire qui peut être utilisée comme mémoire tampon récepteur pour une demande de lecture RDMA. Certains fournisseurs NDK peuvent nécessiter l’activation de droits d’accès spéciaux sur la mémoire tampon du récepteur pour une demande de lecture RDMA. Cet indicateur permet à ces fournisseurs de prendre en charge les demandes d’inscription de manière appropriée. Notez que les mémoires tampons peuvent être inscrites à plusieurs fins. Par conséquent, cet indicateur peut être accompagné d’autres.

Si un consommateur NDK transmet l’indicateur NDK_OP_FLAG_RDMA_READ_SINK sur une carte pour laquelle l’indicateur NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED est défini dans le membre AdapterFlags de la structure NDK_ADAPTER_INFO , le fournisseur n’est pas tenu de gérer l’indicateur NDK_OP_FLAG_RDMA_READ_SINK et ne doit pas échouer à la demande en raison de la présence de cet indicateur.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Aucun pris en charge, pris en charge dans NDIS 6.30 et versions ultérieures.
Serveur minimal pris en charge Windows Server 2012
Plateforme cible Windows
En-tête ndkpi.h (inclure Ndkpi.h)
IRQL <=DISPATCH_LEVEL

Voir aussi

Schéma de traitement différé NDKPI

Exigences de publication de demande de travail NDKPI

NDK_ADAPTER_INFO

NDK_FN_GET_REMOTE_TOKEN_FROM_MR

NDK_LOGICAL_ADDRESS

NDK_MR

NDK_QP

NDK_RESULT