Re: [PATCH 6/6] sched: Change task_struct::state

From
Peter Zijlstra <peterz@infradead.org>
Date
2021-06-02 14:20:57
Also in
cgroups, dm-devel, kvm, linux-block, linux-fsdevel, linux-mm, linux-perf-users, linux-pm, lkml, netdev, rcu
Reply to
Mathieu Desnoyers, 2021-06-02
On Wed, Jun 02, 2021 at 10:06:58AM -0400, Mathieu Desnoyers wrote:
----- On Jun 2, 2021, at 9:12 AM, Peter Zijlstra peterz@infradead.org wrote:
quoted
@@ -134,14 +134,14 @@ struct task_group;
	do {							\
		WARN_ON_ONCE(is_special_task_state(state_value));\
		current->task_state_change = _THIS_IP_;		\
-		current->state = (state_value);			\
+		WRITE_ONCE(current->__state, (state_value));	\
	} while (0)
Why not introduce set_task_state(p) and get_task_state(p) rather than sprinkle
READ_ONCE() and WRITE_ONCE() all over the kernel ?
set_task_state() is fundamentally unsound, there's very few sites that
_set_ state on anything other than current, and those sites are super
tricky, eg. ptrace.

Having get_task_state() would seem to suggest it's actually a sane thing
to do, it's not really. Inspecting remote state is full of races, and
some of that really wants cleaning up, but that's for another day.
Thread (30 messages) 30 messages, 8 authors, last reply 2021-06-18
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help