Skip to content

pldm-fw: fd: Perform state transitions when processing UA responses#54

Open
amboar wants to merge 1 commit into
CodeConstruct:mainfrom
amboar:dev/fix-fd-transitions
Open

pldm-fw: fd: Perform state transitions when processing UA responses#54
amboar wants to merge 1 commit into
CodeConstruct:mainfrom
amboar:dev/fix-fd-transitions

Conversation

@amboar

@amboar amboar commented Jun 19, 2026

Copy link
Copy Markdown

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().

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant