Requisiti di gestione del completamento degli indicatori KPI ND

I consumer NDK e i provider NDK devono soddisfare questi requisiti per la gestione del completamento degli indicatori KPI ND.

Regole per le funzioni NdkGetCqResults, NdkGetCqResultsEx e NdkArmCq

Il consumer serializzerà sempre le chiamate a queste funzioni del provider nella stessa coda di completamento (CQ) oggetto (NDK_CQ):

Ciò significa non solo che il consumer non chiamerà mai la stessa funzione del provider più volte contemporaneamente, ma anche che non chiamerà mai alcuna combinazione di queste funzioni contemporaneamente sullo stesso CQ da più thread.

Un completamento NdkOperationTypeReceiveAndInvalidate che si verifica come risultato di una chiamata remota NdkSendAndInvalidate (NDK_FN_SEND_AND_INVALIDATE) deve comunque essere recuperabile usando NdkGetCqResults (non NdkGetCqResultsExn). Questa operazione deve comunque invalidare il token specificato nel ricevitore, ma non invierà una notifica al consumer ricevente di questa invalidazione.Il consumer deve usare NdkGetCqResultsEx per ottenere queste informazioni. Un successivo NdkInvalidate (NDK_FN_INVALIDATE) per lo stesso token avrà esito negativo, come di consueto.

Regole per i callback delle notifiche

Il provider deve chiamare il callback NdkCqNotificationCallback (NDK_FN_CQ_NOTIFICATION_CALLBACK) una sola volta e solo dopo che il consumer ha armato il callback NdkCqNotificationCallback chiamando NdkArmCq. Ovvero, il provider deve cancellare il braccio e chiamare il callback NdkCqNotificationCallback quando le condizioni per chiamare il callback NdkCqNotificationCallback si verificano (in altre parole, quando i completamenti delle richieste vengono accodati nel CQ).

Se nel CQ sono già presenti completamenti quando il consumer chiama NdkArmCq, il provider si comporta come segue:

  • Se almeno uno dei completamenti è stato appena inserito nel CQ dopo la chiamata dell'ultimo callback NdkCqNotificationCallback , il provider deve soddisfare immediatamente la richiesta arm (vedere di seguito per i requisiti di serializzazione).
  • Tuttavia, se tutti i completamenti nel CQ erano presenti anche quando è stato chiamato l'ultimo callback NdkCqNotificationCallback (in altre parole, il consumer chiamato NdkArmCq senza rimuovere tutti i completamenti e non sono stati inseriti nuovi completamenti nel CQ), il provider può soddisfare immediatamente la richiesta arm.

Quando il provider deve chiamare il callback NdkCqNotificationCallback , se è già in corso un callback NdkCqNotificationCallback , il provider deve rinviare la chiamata del callback NdkCqNotificationCallback fino a quando la chiamata esistente al callback NdkCqNotificationCallback restituisce il controllo al provider. In altre parole, il provider è responsabile della serializzazione dei callback NdkCqNotificationCallback .

La tabella seguente mostra il tipo di arm risultante se NdkArmCq viene chiamato una seconda volta prima che venga soddisfatta una richiesta NdkArmCq precedente:

2° braccio ANY ERRORI del secondo braccio 2° braccio SOLICITED

1° braccio ANY

ANY

ANY

ANY

ERRORI del braccio 1°

ANY

ERRORI

SOLLECITATO

1° braccio SOLICITED

ANY

SOLLECITATO

SOLLECITATO

Interfaccia del provider del kernel diretto (NDKPI)