[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250715152322.Os4lDq_B@linutronix.de>
Date: Tue, 15 Jul 2025 17:23:22 +0200
From: Nam Cao <namcao@...utronix.de>
To: Gabriele Monaco <gmonaco@...hat.com>
Cc: linux-kernel@...r.kernel.org, Steven Rostedt <rostedt@...dmis.org>,
linux-trace-kernel@...r.kernel.org, Ingo Molnar <mingo@...hat.com>,
Peter Zijlstra <peterz@...radead.org>,
Tomas Glozar <tglozar@...hat.com>, Juri Lelli <jlelli@...hat.com>,
Clark Williams <williams@...hat.com>,
John Kacur <jkacur@...hat.com>
Subject: Re: [PATCH v3 11/17] rv: Retry when da monitor detects race
conditions
On Tue, Jul 15, 2025 at 09:14:28AM +0200, Gabriele Monaco wrote:
> static inline bool \
> da_event_##name(struct da_monitor *da_mon, enum events_##name event) \
> { \
> - type curr_state = da_monitor_curr_state_##name(da_mon); \
> - type next_state = model_get_next_state_##name(curr_state, event); \
> - \
> - if (next_state != INVALID_STATE) { \
> - da_monitor_set_state_##name(da_mon, next_state); \
> - \
> - trace_event_##name(model_get_state_name_##name(curr_state), \
> - model_get_event_name_##name(event), \
> - model_get_state_name_##name(next_state), \
> - model_is_final_state_##name(next_state)); \
> - \
> - return true; \
> + enum states_##name curr_state, next_state; \
> + \
> + curr_state = READ_ONCE(da_mon->curr_state); \
> + for (int i = 0; i < MAX_DA_RETRY_RACING_EVENTS; i++) { \
> + next_state = model_get_next_state_##name(curr_state, event); \
> + if (next_state == INVALID_STATE) \
> + goto out_react; \
> + if (likely(try_cmpxchg(&da_mon->curr_state, &curr_state, next_state))) \
> + goto out_success; \
> } \
> + /* Special invalid transition if we run out of retries. */ \
> + curr_state = INVALID_STATE; \
> \
> +out_react: \
> cond_react_##name(curr_state, event); \
> \
> trace_error_##name(model_get_state_name_##name(curr_state), \
> model_get_event_name_##name(event)); \
If I understand correctly, if after 3 tries and we still fail to change the
state, we will invoke the reactor and trace_error? Doesn't that cause a
false positive? Because it is not a violation of the model, it is just a
race making us fail to change the state.
Same below.
Also, I wouldn't use goto unless necessary. Perhaps it is better to put the
code at "out_react:" and "out_success:" into the loop. But that's just my
personal preference, up to you.
Nam
Powered by blists - more mailing lists