On 26-Jan-18 3:41 AM, Jianfeng Tan wrote:
We need the synchronous way for multi-process communication, i.e., blockingly waiting for reply message when we send a request to the peer process.We add two APIs rte_eal_mp_request() and rte_eal_mp_reply() for such use case. By invoking rte_eal_mp_request(), a request message is sent out, and then it waits there for a reply message. The caller can specify the timeout. And the response messages will be collected and returned so that the caller can decide how to translate them. The API rte_eal_mp_reply() is always called by an mp action handler. Here we add another parameter for rte_eal_mp_t so that the action handler knows which peer address to reply. sender-process receiver-process ---------------------- ---------------- thread-n |_rte_eal_mp_request() ----------> mp-thread |_timedwait() |_process_msg() |_action() |_rte_eal_mp_reply() mp_thread <---------------------| |_process_msg() |_signal(send_thread) thread-m <----------| |_collect-reply * A secondary process is only allowed to talk to the primary process. * If there are multiple secondary processes for the primary process, it will send request to peer1, collect response from peer1; then send request to peer2, collect response from peer2, and so on. * When thread-n is sending request, thread-m of that process can send request at the same time. * For pair <action_name, peer>, we guarantee that only one such request is on the fly. Suggested-by: Anatoly Burakov <[email protected]> Suggested-by: Konstantin Ananyev <[email protected]> Signed-off-by: Jianfeng Tan <[email protected]> Reviewed-by: Anatoly Burakov <[email protected]> Acked-by: Konstantin Ananyev <[email protected]> ---
No further comments from me :) -- Thanks, Anatoly

