locking/qspinlock: Micro-optimize pending state waiting for unlock
authorGuo Ren <guoren@linux.alibaba.com>
Thu, 5 Jan 2023 02:19:52 +0000 (21:19 -0500)
committerIngo Molnar <mingo@kernel.org>
Thu, 5 Jan 2023 10:01:50 +0000 (11:01 +0100)
commit4282494a20cdcaf38d553f2c2ff6f252084f979c
treebea8c4e3804947e024255c90804de55bbb37e4f4
parent512dee0c00ad9e9c7ae9f11fc6743702ea40caff
locking/qspinlock: Micro-optimize pending state waiting for unlock

When we're pending, we only care about lock value. The xchg_tail
wouldn't affect the pending state. That means the hardware thread
could stay in a sleep state and leaves the rest execution units'
resources of pipeline to other hardware threads. This situation is
the SMT scenarios in the same core. Not an entering low-power state
situation. Of course, the granularity between cores is "cacheline",
but the granularity between SMT hw threads of the same core could
be "byte" which internal LSU handles. For example, when a hw-thread
yields the resources of the core to other hw-threads, this patch
could help the hw-thread stay in the sleep state and prevent it
from being woken up by other hw-threads xchg_tail.

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Waiman Long <longman@redhat.com>
Link: https://lore.kernel.org/r/20230105021952.3090070-1-guoren@kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>
kernel/locking/qspinlock.c