Re: [PATCH v3 12/31] elx: libefc: Remote node state machine interfaces

James Smart
2020-04-23T01:32:17Z

On 4/15/2020 11:19 AM, Daniel Wagner wrote:
>> +void
>> +efc_node_transition(struct efc_node *node,
>> + void *(*state)(struct efc_sm_ctx *,
>> + enum efc_sm_event, void *), void *data)
>> +{
>> + struct efc_sm_ctx *ctx = &node->sm;
>> +
>> + if (ctx->current_state == state) {
>> + efc_node_post_event(node, EFC_EVT_REENTER, data);
>> + } else {
>> + efc_node_post_event(node, EFC_EVT_EXIT, data);
>> + ctx->current_state = state;
>> + efc_node_post_event(node, EFC_EVT_ENTER, data);
>> + }
>
> Why does efc_node_transition not need to take the efc->lock as in
> efc_remote_node_cb? How are the state machine state transitions
> serialized?

efc_remote_node_cb is a callback called from outside the statemachine,
so it needs to take the lock. efc_node_transition is called from
within the statemachine, after the lock is taken. In general the lock is
taken upon entering the statemachine and released before exiting. There
isn't granular locking within the statemachine.

For more background, see the reply that will be sent to Hannes shortly.

-- james