Re: [PATCH 1/2] locking/mutex: remove rcu_read_lock/unlock as we already disabled preemption

From: Waiman Long
Date: Sun Sep 26 2021 - 20:47:16 EST


On 9/26/21 3:16 PM, Waiman Long wrote:
On 9/26/21 6:16 AM, Yanfei Xu wrote:
preempt_disable/enable() is equal to RCU read-side crital section,
and the mutex lock slowpath disable the preemption throughout the
entire slowpath. Let's remove the rcu_read_lock/unlock for saving
some cycles in hot codes.

The description is wrong. Preemption is disabled only in the optimistic spinning code which is not the complete slowpath. Even though it may sound reasonable that disable preemption is likely to prevent reaching quiescent state, but I am not totally sure that will always be the case as there are different RCU favors.

It does look like that disable preemption can serve as a substitute for rcu_read_lock(). However, I will suggest that you also insert a comment saying so and the task structure won't go away during the spinning period.

Cheers,
Longman