All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 5.4 01/30] locking/mutex: Fix HANDOFF condition
@ 2021-09-06  1:22 Sasha Levin
  2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 02/30] regmap: fix the offset of register error log Sasha Levin
                   ` (28 more replies)
  0 siblings, 29 replies; 34+ messages in thread
From: Sasha Levin @ 2021-09-06  1:22 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Peter Zijlstra, Yanfei Xu, Waiman Long, Sasha Levin

From: Peter Zijlstra <peterz@infradead.org>

[ Upstream commit 048661a1f963e9517630f080687d48af79ed784c ]

Yanfei reported that setting HANDOFF should not depend on recomputing
@first, only on @first state. Which would then give:

  if (ww_ctx || !first)
    first = __mutex_waiter_is_first(lock, &waiter);
  if (first)
    __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);

But because 'ww_ctx || !first' is basically 'always' and the test for
first is relatively cheap, omit that first branch entirely.

Reported-by: Yanfei Xu <yanfei.xu@windriver.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Waiman Long <longman@redhat.com>
Reviewed-by: Yanfei Xu <yanfei.xu@windriver.com>
Link: https://lore.kernel.org/r/20210630154114.896786297@infradead.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 kernel/locking/mutex.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index c0c7784f074b..b02fff28221f 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -938,7 +938,6 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 		    struct ww_acquire_ctx *ww_ctx, const bool use_ww_ctx)
 {
 	struct mutex_waiter waiter;
-	bool first = false;
 	struct ww_mutex *ww;
 	int ret;
 
@@ -1017,6 +1016,8 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 
 	set_current_state(state);
 	for (;;) {
+		bool first;
+
 		/*
 		 * Once we hold wait_lock, we're serialized against
 		 * mutex_unlock() handing the lock off to us, do a trylock
@@ -1045,15 +1046,9 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 		spin_unlock(&lock->wait_lock);
 		schedule_preempt_disabled();
 
-		/*
-		 * ww_mutex needs to always recheck its position since its waiter
-		 * list is not FIFO ordered.
-		 */
-		if (ww_ctx || !first) {
-			first = __mutex_waiter_is_first(lock, &waiter);
-			if (first)
-				__mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
-		}
+		first = __mutex_waiter_is_first(lock, &waiter);
+		if (first)
+			__mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
 
 		set_current_state(state);
 		/*
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2021-09-06  1:36 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-06  1:22 [PATCH AUTOSEL 5.4 01/30] locking/mutex: Fix HANDOFF condition Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 02/30] regmap: fix the offset of register error log Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 03/30] crypto: mxs-dcp - Check for DMA mapping errors Sasha Levin
2021-09-06  1:22   ` Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 04/30] sched/deadline: Fix reset_on_fork reporting of DL tasks Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 05/30] power: supply: axp288_fuel_gauge: Report register-address on readb / writeb errors Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 06/30] crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop() Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 07/30] sched/deadline: Fix missing clock update in migrate_task_rq_dl() Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 08/30] rcu/tree: Handle VM stoppage in stall detection Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 09/30] posix-cpu-timers: Force next expiration recalc after itimer reset Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 10/30] hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns() Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 11/30] hrtimer: Ensure timerfd notification for HIGHRES=n Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 12/30] udf: Check LVID earlier Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 13/30] udf: Fix iocharset=utf8 mount option Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 14/30] isofs: joliet: " Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 15/30] bcache: add proper error unwinding in bcache_device_init Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 16/30] nvme-tcp: don't update queue count when failing to set io queues Sasha Levin
2021-09-06  1:22   ` Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 17/30] nvme-rdma: " Sasha Levin
2021-09-06  1:22   ` Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 18/30] nvmet: pass back cntlid on successful completion Sasha Levin
2021-09-06  1:22   ` Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 19/30] power: supply: max17042_battery: fix typo in MAx17042_TOFF Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 20/30] s390/cio: add dev_busid sysfs entry for each subchannel Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 21/30] libata: fix ata_host_start() Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 22/30] crypto: qat - do not ignore errors from enable_vf2pf_comms() Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 23/30] crypto: qat - handle both source of interrupt in VF ISR Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 24/30] crypto: qat - fix reuse of completion variable Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 25/30] crypto: qat - fix naming for init/shutdown VF to PF notifications Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 26/30] crypto: qat - do not export adf_iov_putmsg() Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 27/30] fcntl: fix potential deadlock for &fasync_struct.fa_lock Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 28/30] udf_get_extendedattr() had no boundary checks Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 29/30] s390/kasan: fix large PMD pages address alignment check Sasha Levin
2021-09-06  1:22 ` [PATCH AUTOSEL 5.4 30/30] s390/debug: fix debug area life cycle Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.