pldm-fw: fd: Perform state transitions when processing UA responses#54
Open
amboar wants to merge 1 commit into
Open
pldm-fw: fd: Perform state transitions when processing UA responses#54amboar wants to merge 1 commit into
amboar wants to merge 1 commit into
Conversation
Implementing ReqChannel in terms of an AsyncReqChannel implementation breaks the pldm-fw fd::Responder state machine after request channel reuse behaviour was changed in 4d148c9 ("mctp-estack: Clarify RouterAsyncReqChannel reuse"). Since, the FD Responder may be starved for events: In some circumstances the state machine lacks the trigger for advancement without successive calls to progress(). However in other circumstances, with successive calls to progress(), the FD may issue concurrent requests to the UA, at which point the AsyncReqChannel will drop responses due to a tag mismatch. Further, immediate transitions to states where the ReqChannel becomes unavailable through the responder's pending_reply_ep() API eliminates the event source for triggering necessary calls to progress(). Migrate relevant FD state transitions to Responder::reply_in() so that all replies are correctly delivered to the responder and the responder correctly advances its state under progress(). Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implementing ReqChannel in terms of an AsyncReqChannel implementation breaks the pldm-fw fd::Responder state machine after request channel reuse behaviour was changed in 4d148c9 ("mctp-estack: Clarify RouterAsyncReqChannel reuse"). Since, the FD Responder may be starved for events: In some circumstances the state machine lacks the trigger for advancement without successive calls to progress(). However in other circumstances, with successive calls to progress(), the FD may issue concurrent requests to the UA, at which point the AsyncReqChannel will drop responses due to a tag mismatch. Further, immediate transitions to states where the ReqChannel becomes unavailable through the responder's pending_reply_ep() API eliminates the event source for triggering necessary calls to progress().
Migrate relevant FD state transitions to Responder::reply_in() so that all replies are correctly delivered to the responder and the responder correctly advances its state under progress().