Work Request Posting Rules for the Consumer
The NDK consumer will post the following types of work requests on the initiator queue:
- NdkBind (NDK_FN_BIND)
- NdkFastRegister (NDK_FN_FAST_REGISTER)
- NdkInvalidate (NDK_FN_INVALIDATE)
- NdkRead (NDK_FN_READ)
- NdkSend (NDK_FN_SEND)
- NdkSendAndInvalidate (NDK_FN_SEND_AND_INVALIDATE)
- NdkWrite (NDK_FN_WRITE)
The consumer will post NdkReceive (NDK_FN_RECEIVE) requests on the receive queue.
The consumer will post all of these requests to the same individual queue on an NDK_QP or NDK_SRQ in a serialized fashion. In other words, the consumer will never have two concurrent calls to any work request functions on the same individual queue belonging to an NDK_QP or NDK_SRQ.
This means, for example, that concurrent NdkReceive calls won't be issued, concurrent NdkSend and NdkWrite calls won't be issued, but concurrent NdkReceive and NdkWrite calls may be issued on the same NDK_QP.
Work Request Posting Rules for the Provider
The provider should not have any redundant locks inside the above work request functions, because they are guaranteed to be serialized by the consumer.