stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Henry Wu <triangletrap12@gmail.com>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.4 198/239] locking/rtmutex: Fix task->pi_waiters integrity
Date: Tue,  1 Aug 2023 11:21:02 +0200	[thread overview]
Message-ID: <20230801091932.900633611@linuxfoundation.org> (raw)
In-Reply-To: <20230801091925.659598007@linuxfoundation.org>

From: Peter Zijlstra <peterz@infradead.org>

[ Upstream commit f7853c34241807bb97673a5e97719123be39a09e ]

Henry reported that rt_mutex_adjust_prio_check() has an ordering
problem and puts the lie to the comment in [7]. Sharing the sort key
between lock->waiters and owner->pi_waiters *does* create problems,
since unlike what the comment claims, holding [L] is insufficient.

Notably, consider:

	A
      /   \
     M1   M2
     |     |
     B     C

That is, task A owns both M1 and M2, B and C block on them. In this
case a concurrent chain walk (B & C) will modify their resp. sort keys
in [7] while holding M1->wait_lock and M2->wait_lock. So holding [L]
is meaningless, they're different Ls.

This then gives rise to a race condition between [7] and [11], where
the requeue of pi_waiters will observe an inconsistent tree order.

	B				C

  (holds M1->wait_lock,		(holds M2->wait_lock,
   holds B->pi_lock)		 holds A->pi_lock)

  [7]
  waiter_update_prio();
  ...
  [8]
  raw_spin_unlock(B->pi_lock);
  ...
  [10]
  raw_spin_lock(A->pi_lock);

				[11]
				rt_mutex_enqueue_pi();
				// observes inconsistent A->pi_waiters
				// tree order

Fixing this means either extending the range of the owner lock from
[10-13] to [6-13], with the immediate problem that this means [6-8]
hold both blocked and owner locks, or duplicating the sort key.

Since the locking in chain walk is horrible enough without having to
consider pi_lock nesting rules, duplicate the sort key instead.

By giving each tree their own sort key, the above race becomes
harmless, if C sees B at the old location, then B will correct things
(if they need correcting) when it walks up the chain and reaches A.

Fixes: fb00aca47440 ("rtmutex: Turn the plist into an rb-tree")
Reported-by: Henry Wu <triangletrap12@gmail.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Henry Wu <triangletrap12@gmail.com>
Link: https://lkml.kernel.org/r/20230707161052.GF2883469%40hirez.programming.kicks-ass.net
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 kernel/locking/rtmutex.c        | 170 +++++++++++++++++++++-----------
 kernel/locking/rtmutex_api.c    |   2 +-
 kernel/locking/rtmutex_common.h |  47 ++++++---
 kernel/locking/ww_mutex.h       |  12 +--
 4 files changed, 155 insertions(+), 76 deletions(-)

diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
index 728f434de2bbf..21db0df0eb000 100644
--- a/kernel/locking/rtmutex.c
+++ b/kernel/locking/rtmutex.c
@@ -333,21 +333,43 @@ static __always_inline int __waiter_prio(struct task_struct *task)
 	return prio;
 }
 
+/*
+ * Update the waiter->tree copy of the sort keys.
+ */
 static __always_inline void
 waiter_update_prio(struct rt_mutex_waiter *waiter, struct task_struct *task)
 {
-	waiter->prio = __waiter_prio(task);
-	waiter->deadline = task->dl.deadline;
+	lockdep_assert_held(&waiter->lock->wait_lock);
+	lockdep_assert(RB_EMPTY_NODE(&waiter->tree.entry));
+
+	waiter->tree.prio = __waiter_prio(task);
+	waiter->tree.deadline = task->dl.deadline;
+}
+
+/*
+ * Update the waiter->pi_tree copy of the sort keys (from the tree copy).
+ */
+static __always_inline void
+waiter_clone_prio(struct rt_mutex_waiter *waiter, struct task_struct *task)
+{
+	lockdep_assert_held(&waiter->lock->wait_lock);
+	lockdep_assert_held(&task->pi_lock);
+	lockdep_assert(RB_EMPTY_NODE(&waiter->pi_tree.entry));
+
+	waiter->pi_tree.prio = waiter->tree.prio;
+	waiter->pi_tree.deadline = waiter->tree.deadline;
 }
 
 /*
- * Only use with rt_mutex_waiter_{less,equal}()
+ * Only use with rt_waiter_node_{less,equal}()
  */
+#define task_to_waiter_node(p)	\
+	&(struct rt_waiter_node){ .prio = __waiter_prio(p), .deadline = (p)->dl.deadline }
 #define task_to_waiter(p)	\
-	&(struct rt_mutex_waiter){ .prio = __waiter_prio(p), .deadline = (p)->dl.deadline }
+	&(struct rt_mutex_waiter){ .tree = *task_to_waiter_node(p) }
 
-static __always_inline int rt_mutex_waiter_less(struct rt_mutex_waiter *left,
-						struct rt_mutex_waiter *right)
+static __always_inline int rt_waiter_node_less(struct rt_waiter_node *left,
+					       struct rt_waiter_node *right)
 {
 	if (left->prio < right->prio)
 		return 1;
@@ -364,8 +386,8 @@ static __always_inline int rt_mutex_waiter_less(struct rt_mutex_waiter *left,
 	return 0;
 }
 
-static __always_inline int rt_mutex_waiter_equal(struct rt_mutex_waiter *left,
-						 struct rt_mutex_waiter *right)
+static __always_inline int rt_waiter_node_equal(struct rt_waiter_node *left,
+						 struct rt_waiter_node *right)
 {
 	if (left->prio != right->prio)
 		return 0;
@@ -385,7 +407,7 @@ static __always_inline int rt_mutex_waiter_equal(struct rt_mutex_waiter *left,
 static inline bool rt_mutex_steal(struct rt_mutex_waiter *waiter,
 				  struct rt_mutex_waiter *top_waiter)
 {
-	if (rt_mutex_waiter_less(waiter, top_waiter))
+	if (rt_waiter_node_less(&waiter->tree, &top_waiter->tree))
 		return true;
 
 #ifdef RT_MUTEX_BUILD_SPINLOCKS
@@ -393,30 +415,30 @@ static inline bool rt_mutex_steal(struct rt_mutex_waiter *waiter,
 	 * Note that RT tasks are excluded from same priority (lateral)
 	 * steals to prevent the introduction of an unbounded latency.
 	 */
-	if (rt_prio(waiter->prio) || dl_prio(waiter->prio))
+	if (rt_prio(waiter->tree.prio) || dl_prio(waiter->tree.prio))
 		return false;
 
-	return rt_mutex_waiter_equal(waiter, top_waiter);
+	return rt_waiter_node_equal(&waiter->tree, &top_waiter->tree);
 #else
 	return false;
 #endif
 }
 
 #define __node_2_waiter(node) \
-	rb_entry((node), struct rt_mutex_waiter, tree_entry)
+	rb_entry((node), struct rt_mutex_waiter, tree.entry)
 
 static __always_inline bool __waiter_less(struct rb_node *a, const struct rb_node *b)
 {
 	struct rt_mutex_waiter *aw = __node_2_waiter(a);
 	struct rt_mutex_waiter *bw = __node_2_waiter(b);
 
-	if (rt_mutex_waiter_less(aw, bw))
+	if (rt_waiter_node_less(&aw->tree, &bw->tree))
 		return 1;
 
 	if (!build_ww_mutex())
 		return 0;
 
-	if (rt_mutex_waiter_less(bw, aw))
+	if (rt_waiter_node_less(&bw->tree, &aw->tree))
 		return 0;
 
 	/* NOTE: relies on waiter->ww_ctx being set before insertion */
@@ -434,48 +456,58 @@ static __always_inline bool __waiter_less(struct rb_node *a, const struct rb_nod
 static __always_inline void
 rt_mutex_enqueue(struct rt_mutex_base *lock, struct rt_mutex_waiter *waiter)
 {
-	rb_add_cached(&waiter->tree_entry, &lock->waiters, __waiter_less);
+	lockdep_assert_held(&lock->wait_lock);
+
+	rb_add_cached(&waiter->tree.entry, &lock->waiters, __waiter_less);
 }
 
 static __always_inline void
 rt_mutex_dequeue(struct rt_mutex_base *lock, struct rt_mutex_waiter *waiter)
 {
-	if (RB_EMPTY_NODE(&waiter->tree_entry))
+	lockdep_assert_held(&lock->wait_lock);
+
+	if (RB_EMPTY_NODE(&waiter->tree.entry))
 		return;
 
-	rb_erase_cached(&waiter->tree_entry, &lock->waiters);
-	RB_CLEAR_NODE(&waiter->tree_entry);
+	rb_erase_cached(&waiter->tree.entry, &lock->waiters);
+	RB_CLEAR_NODE(&waiter->tree.entry);
 }
 
-#define __node_2_pi_waiter(node) \
-	rb_entry((node), struct rt_mutex_waiter, pi_tree_entry)
+#define __node_2_rt_node(node) \
+	rb_entry((node), struct rt_waiter_node, entry)
 
-static __always_inline bool
-__pi_waiter_less(struct rb_node *a, const struct rb_node *b)
+static __always_inline bool __pi_waiter_less(struct rb_node *a, const struct rb_node *b)
 {
-	return rt_mutex_waiter_less(__node_2_pi_waiter(a), __node_2_pi_waiter(b));
+	return rt_waiter_node_less(__node_2_rt_node(a), __node_2_rt_node(b));
 }
 
 static __always_inline void
 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
 {
-	rb_add_cached(&waiter->pi_tree_entry, &task->pi_waiters, __pi_waiter_less);
+	lockdep_assert_held(&task->pi_lock);
+
+	rb_add_cached(&waiter->pi_tree.entry, &task->pi_waiters, __pi_waiter_less);
 }
 
 static __always_inline void
 rt_mutex_dequeue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
 {
-	if (RB_EMPTY_NODE(&waiter->pi_tree_entry))
+	lockdep_assert_held(&task->pi_lock);
+
+	if (RB_EMPTY_NODE(&waiter->pi_tree.entry))
 		return;
 
-	rb_erase_cached(&waiter->pi_tree_entry, &task->pi_waiters);
-	RB_CLEAR_NODE(&waiter->pi_tree_entry);
+	rb_erase_cached(&waiter->pi_tree.entry, &task->pi_waiters);
+	RB_CLEAR_NODE(&waiter->pi_tree.entry);
 }
 
-static __always_inline void rt_mutex_adjust_prio(struct task_struct *p)
+static __always_inline void rt_mutex_adjust_prio(struct rt_mutex_base *lock,
+						 struct task_struct *p)
 {
 	struct task_struct *pi_task = NULL;
 
+	lockdep_assert_held(&lock->wait_lock);
+	lockdep_assert(rt_mutex_owner(lock) == p);
 	lockdep_assert_held(&p->pi_lock);
 
 	if (task_has_pi_waiters(p))
@@ -571,9 +603,14 @@ static __always_inline struct rt_mutex_base *task_blocked_on_lock(struct task_st
  * Chain walk basics and protection scope
  *
  * [R] refcount on task
- * [P] task->pi_lock held
+ * [Pn] task->pi_lock held
  * [L] rtmutex->wait_lock held
  *
+ * Normal locking order:
+ *
+ *   rtmutex->wait_lock
+ *     task->pi_lock
+ *
  * Step	Description				Protected by
  *	function arguments:
  *	@task					[R]
@@ -588,27 +625,32 @@ static __always_inline struct rt_mutex_base *task_blocked_on_lock(struct task_st
  *	again:
  *	  loop_sanity_check();
  *	retry:
- * [1]	  lock(task->pi_lock);			[R] acquire [P]
- * [2]	  waiter = task->pi_blocked_on;		[P]
- * [3]	  check_exit_conditions_1();		[P]
- * [4]	  lock = waiter->lock;			[P]
- * [5]	  if (!try_lock(lock->wait_lock)) {	[P] try to acquire [L]
- *	    unlock(task->pi_lock);		release [P]
+ * [1]	  lock(task->pi_lock);			[R] acquire [P1]
+ * [2]	  waiter = task->pi_blocked_on;		[P1]
+ * [3]	  check_exit_conditions_1();		[P1]
+ * [4]	  lock = waiter->lock;			[P1]
+ * [5]	  if (!try_lock(lock->wait_lock)) {	[P1] try to acquire [L]
+ *	    unlock(task->pi_lock);		release [P1]
  *	    goto retry;
  *	  }
- * [6]	  check_exit_conditions_2();		[P] + [L]
- * [7]	  requeue_lock_waiter(lock, waiter);	[P] + [L]
- * [8]	  unlock(task->pi_lock);		release [P]
+ * [6]	  check_exit_conditions_2();		[P1] + [L]
+ * [7]	  requeue_lock_waiter(lock, waiter);	[P1] + [L]
+ * [8]	  unlock(task->pi_lock);		release [P1]
  *	  put_task_struct(task);		release [R]
  * [9]	  check_exit_conditions_3();		[L]
  * [10]	  task = owner(lock);			[L]
  *	  get_task_struct(task);		[L] acquire [R]
- *	  lock(task->pi_lock);			[L] acquire [P]
- * [11]	  requeue_pi_waiter(tsk, waiters(lock));[P] + [L]
- * [12]	  check_exit_conditions_4();		[P] + [L]
- * [13]	  unlock(task->pi_lock);		release [P]
+ *	  lock(task->pi_lock);			[L] acquire [P2]
+ * [11]	  requeue_pi_waiter(tsk, waiters(lock));[P2] + [L]
+ * [12]	  check_exit_conditions_4();		[P2] + [L]
+ * [13]	  unlock(task->pi_lock);		release [P2]
  *	  unlock(lock->wait_lock);		release [L]
  *	  goto again;
+ *
+ * Where P1 is the blocking task and P2 is the lock owner; going up one step
+ * the owner becomes the next blocked task etc..
+ *
+*
  */
 static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 					      enum rtmutex_chainwalk chwalk,
@@ -756,7 +798,7 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 	 * enabled we continue, but stop the requeueing in the chain
 	 * walk.
 	 */
-	if (rt_mutex_waiter_equal(waiter, task_to_waiter(task))) {
+	if (rt_waiter_node_equal(&waiter->tree, task_to_waiter_node(task))) {
 		if (!detect_deadlock)
 			goto out_unlock_pi;
 		else
@@ -764,13 +806,18 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 	}
 
 	/*
-	 * [4] Get the next lock
+	 * [4] Get the next lock; per holding task->pi_lock we can't unblock
+	 * and guarantee @lock's existence.
 	 */
 	lock = waiter->lock;
 	/*
 	 * [5] We need to trylock here as we are holding task->pi_lock,
 	 * which is the reverse lock order versus the other rtmutex
 	 * operations.
+	 *
+	 * Per the above, holding task->pi_lock guarantees lock exists, so
+	 * inverting this lock order is infeasible from a life-time
+	 * perspective.
 	 */
 	if (!raw_spin_trylock(&lock->wait_lock)) {
 		raw_spin_unlock_irq(&task->pi_lock);
@@ -874,17 +921,18 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 	 * or
 	 *
 	 *   DL CBS enforcement advancing the effective deadline.
-	 *
-	 * Even though pi_waiters also uses these fields, and that tree is only
-	 * updated in [11], we can do this here, since we hold [L], which
-	 * serializes all pi_waiters access and rb_erase() does not care about
-	 * the values of the node being removed.
 	 */
 	waiter_update_prio(waiter, task);
 
 	rt_mutex_enqueue(lock, waiter);
 
-	/* [8] Release the task */
+	/*
+	 * [8] Release the (blocking) task in preparation for
+	 * taking the owner task in [10].
+	 *
+	 * Since we hold lock->waiter_lock, task cannot unblock, even if we
+	 * release task->pi_lock.
+	 */
 	raw_spin_unlock(&task->pi_lock);
 	put_task_struct(task);
 
@@ -908,7 +956,12 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 		return 0;
 	}
 
-	/* [10] Grab the next task, i.e. the owner of @lock */
+	/*
+	 * [10] Grab the next task, i.e. the owner of @lock
+	 *
+	 * Per holding lock->wait_lock and checking for !owner above, there
+	 * must be an owner and it cannot go away.
+	 */
 	task = get_task_struct(rt_mutex_owner(lock));
 	raw_spin_lock(&task->pi_lock);
 
@@ -921,8 +974,9 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 		 * and adjust the priority of the owner.
 		 */
 		rt_mutex_dequeue_pi(task, prerequeue_top_waiter);
+		waiter_clone_prio(waiter, task);
 		rt_mutex_enqueue_pi(task, waiter);
-		rt_mutex_adjust_prio(task);
+		rt_mutex_adjust_prio(lock, task);
 
 	} else if (prerequeue_top_waiter == waiter) {
 		/*
@@ -937,8 +991,9 @@ static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
 		 */
 		rt_mutex_dequeue_pi(task, waiter);
 		waiter = rt_mutex_top_waiter(lock);
+		waiter_clone_prio(waiter, task);
 		rt_mutex_enqueue_pi(task, waiter);
-		rt_mutex_adjust_prio(task);
+		rt_mutex_adjust_prio(lock, task);
 	} else {
 		/*
 		 * Nothing changed. No need to do any priority
@@ -1154,6 +1209,7 @@ static int __sched task_blocks_on_rt_mutex(struct rt_mutex_base *lock,
 	waiter->task = task;
 	waiter->lock = lock;
 	waiter_update_prio(waiter, task);
+	waiter_clone_prio(waiter, task);
 
 	/* Get the top priority waiter on the lock */
 	if (rt_mutex_has_waiters(lock))
@@ -1187,7 +1243,7 @@ static int __sched task_blocks_on_rt_mutex(struct rt_mutex_base *lock,
 		rt_mutex_dequeue_pi(owner, top_waiter);
 		rt_mutex_enqueue_pi(owner, waiter);
 
-		rt_mutex_adjust_prio(owner);
+		rt_mutex_adjust_prio(lock, owner);
 		if (owner->pi_blocked_on)
 			chain_walk = 1;
 	} else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) {
@@ -1234,6 +1290,8 @@ static void __sched mark_wakeup_next_waiter(struct rt_wake_q_head *wqh,
 {
 	struct rt_mutex_waiter *waiter;
 
+	lockdep_assert_held(&lock->wait_lock);
+
 	raw_spin_lock(&current->pi_lock);
 
 	waiter = rt_mutex_top_waiter(lock);
@@ -1246,7 +1304,7 @@ static void __sched mark_wakeup_next_waiter(struct rt_wake_q_head *wqh,
 	 * task unblocks.
 	 */
 	rt_mutex_dequeue_pi(current, waiter);
-	rt_mutex_adjust_prio(current);
+	rt_mutex_adjust_prio(lock, current);
 
 	/*
 	 * As we are waking up the top waiter, and the waiter stays
@@ -1482,7 +1540,7 @@ static void __sched remove_waiter(struct rt_mutex_base *lock,
 	if (rt_mutex_has_waiters(lock))
 		rt_mutex_enqueue_pi(owner, rt_mutex_top_waiter(lock));
 
-	rt_mutex_adjust_prio(owner);
+	rt_mutex_adjust_prio(lock, owner);
 
 	/* Store the lock on which owner is blocked or NULL */
 	next_lock = task_blocked_on_lock(owner);
diff --git a/kernel/locking/rtmutex_api.c b/kernel/locking/rtmutex_api.c
index cb9fdff76a8a3..a6974d0445930 100644
--- a/kernel/locking/rtmutex_api.c
+++ b/kernel/locking/rtmutex_api.c
@@ -459,7 +459,7 @@ void __sched rt_mutex_adjust_pi(struct task_struct *task)
 	raw_spin_lock_irqsave(&task->pi_lock, flags);
 
 	waiter = task->pi_blocked_on;
-	if (!waiter || rt_mutex_waiter_equal(waiter, task_to_waiter(task))) {
+	if (!waiter || rt_waiter_node_equal(&waiter->tree, task_to_waiter_node(task))) {
 		raw_spin_unlock_irqrestore(&task->pi_lock, flags);
 		return;
 	}
diff --git a/kernel/locking/rtmutex_common.h b/kernel/locking/rtmutex_common.h
index c47e8361bfb5c..1162e07cdaea1 100644
--- a/kernel/locking/rtmutex_common.h
+++ b/kernel/locking/rtmutex_common.h
@@ -17,27 +17,44 @@
 #include <linux/rtmutex.h>
 #include <linux/sched/wake_q.h>
 
+
+/*
+ * This is a helper for the struct rt_mutex_waiter below. A waiter goes in two
+ * separate trees and they need their own copy of the sort keys because of
+ * different locking requirements.
+ *
+ * @entry:		rbtree node to enqueue into the waiters tree
+ * @prio:		Priority of the waiter
+ * @deadline:		Deadline of the waiter if applicable
+ *
+ * See rt_waiter_node_less() and waiter_*_prio().
+ */
+struct rt_waiter_node {
+	struct rb_node	entry;
+	int		prio;
+	u64		deadline;
+};
+
 /*
  * This is the control structure for tasks blocked on a rt_mutex,
  * which is allocated on the kernel stack on of the blocked task.
  *
- * @tree_entry:		pi node to enqueue into the mutex waiters tree
- * @pi_tree_entry:	pi node to enqueue into the mutex owner waiters tree
+ * @tree:		node to enqueue into the mutex waiters tree
+ * @pi_tree:		node to enqueue into the mutex owner waiters tree
  * @task:		task reference to the blocked task
  * @lock:		Pointer to the rt_mutex on which the waiter blocks
  * @wake_state:		Wakeup state to use (TASK_NORMAL or TASK_RTLOCK_WAIT)
- * @prio:		Priority of the waiter
- * @deadline:		Deadline of the waiter if applicable
  * @ww_ctx:		WW context pointer
+ *
+ * @tree is ordered by @lock->wait_lock
+ * @pi_tree is ordered by rt_mutex_owner(@lock)->pi_lock
  */
 struct rt_mutex_waiter {
-	struct rb_node		tree_entry;
-	struct rb_node		pi_tree_entry;
+	struct rt_waiter_node	tree;
+	struct rt_waiter_node	pi_tree;
 	struct task_struct	*task;
 	struct rt_mutex_base	*lock;
 	unsigned int		wake_state;
-	int			prio;
-	u64			deadline;
 	struct ww_acquire_ctx	*ww_ctx;
 };
 
@@ -105,7 +122,7 @@ static inline bool rt_mutex_waiter_is_top_waiter(struct rt_mutex_base *lock,
 {
 	struct rb_node *leftmost = rb_first_cached(&lock->waiters);
 
-	return rb_entry(leftmost, struct rt_mutex_waiter, tree_entry) == waiter;
+	return rb_entry(leftmost, struct rt_mutex_waiter, tree.entry) == waiter;
 }
 
 static inline struct rt_mutex_waiter *rt_mutex_top_waiter(struct rt_mutex_base *lock)
@@ -113,8 +130,10 @@ static inline struct rt_mutex_waiter *rt_mutex_top_waiter(struct rt_mutex_base *
 	struct rb_node *leftmost = rb_first_cached(&lock->waiters);
 	struct rt_mutex_waiter *w = NULL;
 
+	lockdep_assert_held(&lock->wait_lock);
+
 	if (leftmost) {
-		w = rb_entry(leftmost, struct rt_mutex_waiter, tree_entry);
+		w = rb_entry(leftmost, struct rt_mutex_waiter, tree.entry);
 		BUG_ON(w->lock != lock);
 	}
 	return w;
@@ -127,8 +146,10 @@ static inline int task_has_pi_waiters(struct task_struct *p)
 
 static inline struct rt_mutex_waiter *task_top_pi_waiter(struct task_struct *p)
 {
+	lockdep_assert_held(&p->pi_lock);
+
 	return rb_entry(p->pi_waiters.rb_leftmost, struct rt_mutex_waiter,
-			pi_tree_entry);
+			pi_tree.entry);
 }
 
 #define RT_MUTEX_HAS_WAITERS	1UL
@@ -190,8 +211,8 @@ static inline void debug_rt_mutex_free_waiter(struct rt_mutex_waiter *waiter)
 static inline void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter)
 {
 	debug_rt_mutex_init_waiter(waiter);
-	RB_CLEAR_NODE(&waiter->pi_tree_entry);
-	RB_CLEAR_NODE(&waiter->tree_entry);
+	RB_CLEAR_NODE(&waiter->pi_tree.entry);
+	RB_CLEAR_NODE(&waiter->tree.entry);
 	waiter->wake_state = TASK_NORMAL;
 	waiter->task = NULL;
 }
diff --git a/kernel/locking/ww_mutex.h b/kernel/locking/ww_mutex.h
index 56f139201f246..3ad2cc4823e59 100644
--- a/kernel/locking/ww_mutex.h
+++ b/kernel/locking/ww_mutex.h
@@ -96,25 +96,25 @@ __ww_waiter_first(struct rt_mutex *lock)
 	struct rb_node *n = rb_first(&lock->rtmutex.waiters.rb_root);
 	if (!n)
 		return NULL;
-	return rb_entry(n, struct rt_mutex_waiter, tree_entry);
+	return rb_entry(n, struct rt_mutex_waiter, tree.entry);
 }
 
 static inline struct rt_mutex_waiter *
 __ww_waiter_next(struct rt_mutex *lock, struct rt_mutex_waiter *w)
 {
-	struct rb_node *n = rb_next(&w->tree_entry);
+	struct rb_node *n = rb_next(&w->tree.entry);
 	if (!n)
 		return NULL;
-	return rb_entry(n, struct rt_mutex_waiter, tree_entry);
+	return rb_entry(n, struct rt_mutex_waiter, tree.entry);
 }
 
 static inline struct rt_mutex_waiter *
 __ww_waiter_prev(struct rt_mutex *lock, struct rt_mutex_waiter *w)
 {
-	struct rb_node *n = rb_prev(&w->tree_entry);
+	struct rb_node *n = rb_prev(&w->tree.entry);
 	if (!n)
 		return NULL;
-	return rb_entry(n, struct rt_mutex_waiter, tree_entry);
+	return rb_entry(n, struct rt_mutex_waiter, tree.entry);
 }
 
 static inline struct rt_mutex_waiter *
@@ -123,7 +123,7 @@ __ww_waiter_last(struct rt_mutex *lock)
 	struct rb_node *n = rb_last(&lock->rtmutex.waiters.rb_root);
 	if (!n)
 		return NULL;
-	return rb_entry(n, struct rt_mutex_waiter, tree_entry);
+	return rb_entry(n, struct rt_mutex_waiter, tree.entry);
 }
 
 static inline void
-- 
2.40.1




  parent reply	other threads:[~2023-08-01  9:50 UTC|newest]

Thread overview: 249+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-01  9:17 [PATCH 6.4 000/239] 6.4.8-rc1 review Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 001/239] platform/x86/amd/pmf: Notify OS power slider update Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 002/239] platform/x86/amd/pmf: reduce verbosity of apmf_get_system_params Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 003/239] drm/amd: Move helper for dynamic speed switch check out of smu13 Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 004/239] drm/amd: Align SMU11 SMU_MSG_OverridePcieParameters implementation with SMU13 Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 005/239] r8169: revert 2ab19de62d67 ("r8169: remove ASPM restrictions now that ASPM is disabled during NAPI poll") Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 006/239] jbd2: Fix wrongly judgement for buffer head removing while doing checkpoint Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 007/239] KVM: arm64: Handle kvm_arm_init failure correctly in finalize_pkvm Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 008/239] blk-mq: Fix stall due to recursive flush plug Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 009/239] powerpc/pseries/vas: Hold mmap_mutex after mmap lock during window close Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 010/239] KVM: s390: pv: simplify shutdown and fix race Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 011/239] KVM: s390: pv: fix index value of replaced ASCE Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 012/239] s390/mm: fix per vma lock fault handling Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 013/239] io_uring: dont audit the capability check in io_uring_create() Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 014/239] gpio: tps68470: Make tps68470_gpio_output() always set the initial value Greg Kroah-Hartman
2023-08-01  9:17 ` [PATCH 6.4 015/239] gpio: mvebu: Make use of devm_pwmchip_add Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 016/239] gpio: mvebu: fix irq domain leak Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 017/239] regmap: Disable locking for RBTREE and MAPLE unit tests Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 018/239] btrfs: factor out a btrfs_verify_page helper Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 019/239] btrfs: fix fsverify read error handling in end_page_read Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 020/239] btrfs: fix race between quota disable and relocation Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 021/239] i2c: Delete error messages for failed memory allocations Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 022/239] i2c: Improve size determinations Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 023/239] i2c: nomadik: Remove unnecessary goto label Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 024/239] i2c: nomadik: Use devm_clk_get_enabled() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 025/239] i2c: nomadik: Remove a useless call in the remove function Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 026/239] PCI/ASPM: Return 0 or -ETIMEDOUT from pcie_retrain_link() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 027/239] PCI/ASPM: Factor out pcie_wait_for_retrain() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 028/239] PCI/ASPM: Avoid link retraining race Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 029/239] PCI: rockchip: Remove writes to unused registers Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 030/239] PCI: rockchip: Fix window mapping and address translation for endpoint Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 031/239] PCI: rockchip: Dont advertise MSI-X in PCIe capabilities Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 032/239] drm/amd/display: Convert Delaying Aux-I Disable To Monitor Patch Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 033/239] drm/amd/display: Keep disable aux-i delay as 0 Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 034/239] drm/amd/display: add pixel rate based CRB allocation support Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 035/239] drm/amd/display: fix dcn315 single stream crb allocation Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 036/239] drm/amd/display: Update correct DCN314 register header Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 037/239] drm/amd/display: Set minimum requirement for using PSR-SU on Rembrandt Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 038/239] drm/amd/display: Set minimum requirement for using PSR-SU on Phoenix Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 039/239] drm/ttm: never consider pinned BOs for eviction&swap Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 040/239] maple_tree: add __init and __exit to test module Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 041/239] maple_tree: fix 32 bit mas_next testing Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 042/239] drm/amd/display: Add FAMS validation before trying to use it Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 043/239] drm/amd/display: update extended blank for dcn314 onwards Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 044/239] drm/amd/display: Fix possible underflow for displays with large vblank Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 045/239] drm/amd/display: Prevent vtotal from being set to 0 Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 046/239] jbd2: remove t_checkpoint_io_list Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 047/239] jbd2: remove journal_clean_one_cp_list() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 048/239] jbd2: fix a race when checking checkpoint buffer busy Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 049/239] ext4: add EXT4_MB_HINT_GOAL_ONLY test in ext4_mb_use_preallocated Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 050/239] ext4: mballoc: Remove useless setting of ac_criteria Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 051/239] ext4: fix rbtree traversal bug in ext4_mb_use_preallocated Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 052/239] phy: phy-mtk-dp: Fix an error code in probe() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 053/239] phy: mediatek: hdmi: mt8195: fix prediv bad upper limit test Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 054/239] phy: qcom-snps-femto-v2: keep cfg_ahb_clk enabled during runtime suspend Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 055/239] phy: qcom-snps-femto-v2: properly enable ref clock Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 056/239] soundwire: qcom: update status correctly with mask Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 057/239] soundwire: amd: Fix a check for errors in probe() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 058/239] media: tc358746: Address compiler warnings Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 059/239] media: staging: atomisp: select V4L2_FWNODE Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 060/239] media: amphion: Fix firmware path to match linux-firmware Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 061/239] media: mtk-jpeg: move data/code inside CONFIG_OF blocks Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 062/239] media: mtk_jpeg_core: avoid unused-variable warning Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 063/239] i40e: Fix an NULL vs IS_ERR() bug for debugfs_create_dir() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 064/239] iavf: fix potential deadlock on allocation failure Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 065/239] iavf: check for removal state before IAVF_FLAG_PF_COMMS_FAILED Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 066/239] net: phy: marvell10g: fix 88x3310 power up Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 067/239] net: hns3: fix the imp capability bit cannot exceed 32 bits issue Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 068/239] net: hns3: fix wrong tc bandwidth weight data issue Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 069/239] net: hns3: fix wrong bw weight of disabled tc issue Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 070/239] vxlan: calculate correct header length for GPE Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 071/239] vxlan: generalize vxlan_parse_gpe_hdr and remove unused args Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 072/239] vxlan: fix GRO with VXLAN-GPE Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 073/239] phy: hisilicon: Fix an out of bounds check in hisi_inno_phy_probe() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 074/239] atheros: fix return value check in atl1_tso() Greg Kroah-Hartman
2023-08-01  9:18 ` [PATCH 6.4 075/239] ethernet: atheros: fix return value check in atl1e_tso_csum() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 076/239] ipv6 addrconf: fix bug where deleting a mngtmpaddr can create a new temporary address Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 077/239] net: fec: avoid tx queue timeout when XDP is enabled Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 078/239] tcp: Reduce chance of collisions in inet6_hashfn() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 079/239] ice: Fix memory management in ice_ethtool_fdir.c Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 080/239] bonding: reset bonds flags when down link is P2P device Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 081/239] team: reset teams " Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 082/239] octeontx2-af: Fix hash extraction enable configuration Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 083/239] net: stmmac: Apply redundant write work around on 4.xx too Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 084/239] platform/x86: msi-laptop: Fix rfkill out-of-sync on MSI Wind U100 Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 085/239] x86/traps: Fix load_unaligned_zeropad() handling for shared TDX memory Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 086/239] macvlan: add forgotten nla_policy for IFLA_MACVLAN_BC_CUTOFF Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 087/239] igc: Fix Kernel Panic during ndo_tx_timeout callback Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 088/239] netfilter: nft_set_rbtree: fix overlap expiration walk Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 089/239] netfilter: nf_tables: skip immediate deactivate in _PREPARE_ERROR Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 090/239] netfilter: nf_tables: disallow rule addition to bound chain via NFTA_RULE_CHAIN_ID Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 091/239] mm: suppress mm fault logging if fatal signal already pending Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 092/239] tools: ynl-gen: fix enum index in _decode_enum(..) Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 093/239] net: fec: tx processing does not call XDP APIs if budget is 0 Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 094/239] net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64 Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 095/239] benet: fix return value check in be_lancer_xmit_workarounds() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 096/239] tipc: check return value of pskb_trim() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 097/239] tipc: stop tipc crypto on failure in tipc_node_create Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 098/239] fs/9p: Fix a datatype used with V9FS_DIRECT_IO Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 099/239] RDMA/mlx4: Make check for invalid flags stricter Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 100/239] drm/msm/mdss: correct UBWC programming for SM8550 Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 101/239] drm/msm/dpu: add missing flush and fetch bits for DMA4/DMA5 planes Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 102/239] drm/msm/dpu: drop enum dpu_core_perf_data_bus_id Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 103/239] drm/msm/dsi: Drop unused regulators from QCM2290 14nm DSI PHY config Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 104/239] drm/msm/adreno: Fix snapshot BINDLESS_DATA size Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 105/239] RDMA/irdma: Add missing read barriers Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 106/239] RDMA/irdma: Fix data race on CQP completion stats Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 107/239] RDMA/irdma: Fix data race on CQP request done Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 108/239] RDMA/core: Update CMA destination address on rdma_resolve_addr Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 109/239] RDMA/mthca: Fix crash when polling CQ for shared QPs Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 110/239] RDMA/bnxt_re: Prevent handling any completions after qp destroy Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 111/239] RDMA/bnxt_re: Enhance the existing functions that wait for FW responses Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 112/239] RDMA/bnxt_re: Avoid the command wait if firmware is inactive Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 113/239] RDMA/bnxt_re: use shadow qd while posting non blocking rcfw command Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 114/239] RDMA/bnxt_re: Simplify the function that sends the FW commands Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 115/239] RDMA/bnxt_re: add helper function __poll_for_resp Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 116/239] RDMA/bnxt_re: Fix hang during driver unload Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 117/239] drm/msm: Fix IS_ERR_OR_NULL() vs NULL check in a5xx_submit_in_rb() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 118/239] drm/msm: Fix hw_fence error path cleanup Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 119/239] cxl/acpi: Fix a use-after-free in cxl_parse_cfmws() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 120/239] cxl/acpi: Return rc instead of 0 " Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 121/239] ASoC: fsl_spdif: Silence output on stop Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 122/239] block: Fix a source code comment in include/uapi/linux/blkzoned.h Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 123/239] smb3: do not set NTLMSSP_VERSION flag for negotiate not auth request Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 124/239] drm/i915: Fix an error handling path in igt_write_huge() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 125/239] xenbus: check xen_domain in xenbus_probe_initcall Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 126/239] dm raid: fix missing reconfig_mutex unlock in raid_ctr() error paths Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 127/239] dm raid: clean up four equivalent goto tags in raid_ctr() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 128/239] dm raid: protect md_stop() with reconfig_mutex Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 129/239] drm/amd: Fix an error handling mistake in psp_sw_init() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 130/239] drm/amd/display: Unlock on error path in dm_handle_mst_sideband_msg_ready_event() Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 131/239] RDMA/irdma: Fix op_type reporting in CQEs Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 132/239] RDMA/irdma: Report correct WC error Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 133/239] drm/msm: Disallow submit with fence id 0 Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 134/239] ublk: fail to start device if queue setup is interrupted Greg Kroah-Hartman
2023-08-01  9:19 ` [PATCH 6.4 135/239] ublk: fail to recover " Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 136/239] ublk: return -EINTR if breaking from waiting for existed users in DEL_DEV Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 137/239] iommufd: IOMMUFD_DESTROY should not increase the refcount Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 138/239] tmpfs: fix Documentation of noswap and huge mount options Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 139/239] ata: pata_ns87415: mark ns87560_tf_read static Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 140/239] ring-buffer: Fix wrong stat of cpu_buffer->read Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 141/239] tracing: Fix warning in trace_buffered_event_disable() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 142/239] Revert "usb: gadget: tegra-xudc: Fix error check in tegra_xudc_powerdomain_init()" Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 143/239] usb: gadget: call usb_gadget_check_config() to verify UDC capability Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 144/239] USB: gadget: Fix the memory leak in raw_gadget driver Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 145/239] usb: gadget: core: remove unbalanced mutex_unlock in usb_gadget_activate Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 146/239] KVM: Grab a reference to KVM for VM and vCPU stats file descriptors Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 147/239] KVM: VMX: Dont fudge CR0 and CR4 for restricted L2 guest Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 148/239] KVM: x86: Disallow KVM_SET_SREGS{2} if incoming CR0 is invalid Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 149/239] serial: qcom-geni: drop bogus runtime pm state update Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 150/239] tty: serial: sh-sci: Fix sleeping in atomic context Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 151/239] serial: 8250_dw: Preserve original value of DLF register Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 152/239] serial: sifive: Fix sifive_serial_console_setup() section Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 153/239] USB: serial: option: support Quectel EM060K_128 Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 154/239] USB: serial: option: add Quectel EC200A module support Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 155/239] USB: serial: simple: add Kaufmann RKS+CAN VCP Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 156/239] USB: serial: simple: sort driver entries Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 157/239] can: gs_usb: gs_can_close(): add missing set of CAN state to CAN_STATE_STOPPED Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 158/239] TIOCSTI: always enable for CAP_SYS_ADMIN Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 159/239] usb: typec: Set port->pd before adding device for typec_port Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 160/239] usb: typec: Iterate pds array when showing the pd list Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 161/239] usb: typec: Use sysfs_emit_at when concatenating the string Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 162/239] Revert "usb: dwc3: core: Enable AutoRetry feature in the controller" Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 163/239] usb: dwc3: pci: skip BYT GPIO lookup table for hardwired phy Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 164/239] usb: dwc3: dont reset device side if dwc3 was configured as host-only Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 165/239] usb: misc: ehset: fix wrong if condition Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 166/239] usb: ohci-at91: Fix the unhandle interrupt when resume Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 167/239] USB: quirks: add quirk for Focusrite Scarlett Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 168/239] usb: cdns3: fix incorrect calculation of ep_buf_size when more than one config Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 169/239] usb: xhci-mtk: set the dma max_seg_size Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 170/239] Revert "usb: xhci: tegra: Fix error check" Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 171/239] Documentation: security-bugs.rst: update preferences when dealing with the linux-distros group Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 172/239] Documentation: security-bugs.rst: clarify CVE handling Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 173/239] staging: r8712: Fix memory leak in _r8712_init_xmit_priv() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 174/239] staging: ks7010: potential buffer overflow in ks_wlan_set_encode_ext() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 175/239] tty: n_gsm: fix UAF in gsm_cleanup_mux Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 176/239] Revert "xhci: add quirk for host controllers that dont update endpoint DCS" Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 177/239] ALSA: hda/realtek: Support ASUS G713PV laptop Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 178/239] ALSA: hda/relatek: Enable Mute LED on HP 250 G8 Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 179/239] hwmon: (k10temp) Enable AMD3255 Proc to show negative temperature Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 180/239] hwmon: (nct7802) Fix for temp6 (PECI1) processed even if PECI1 disabled Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 181/239] hwmon: (aquacomputer_d5next) Fix incorrect PWM value readout Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 182/239] hwmon: (pmbus_core) Fix pmbus_is_enabled() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 183/239] hwmon: (pmbus_core) Fix NULL pointer dereference Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 184/239] hwmon: (pmbus_core) Fix Deadlock in pmbus_regulator_get_status Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 185/239] btrfs: zoned: do not enable async discard Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 186/239] btrfs: account block group tree when calculating global reserve size Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 187/239] btrfs: check if the transaction was aborted at btrfs_wait_for_commit() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 188/239] btrfs: check for commit error at btrfs_attach_transaction_barrier() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 189/239] x86/MCE/AMD: Decrement threshold_bank refcount when removing threshold blocks Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 190/239] x86/cpu: Enable STIBP on AMD if Automatic IBRS is enabled Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 191/239] file: always lock position for FMODE_ATOMIC_POS Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 192/239] nfsd: Remove incorrect check in nfsd4_validate_stateid Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 193/239] ksmbd: check if a mount point is crossed during path lookup Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 194/239] ACPI/IORT: Remove erroneous id_count check in iort_node_get_rmr_info() Greg Kroah-Hartman
2023-08-01  9:20 ` [PATCH 6.4 195/239] tpm_tis: Explicitly check for error code Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 196/239] irq-bcm6345-l1: Do not assume a fixed block to cpu mapping Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 197/239] irqchip/gic-v4.1: Properly lock VPEs when doing a directLPI invalidation Greg Kroah-Hartman
2023-08-01  9:21 ` Greg Kroah-Hartman [this message]
2023-08-01  9:21 ` [PATCH 6.4 199/239] proc/vmcore: fix signedness bug in read_from_oldmem() Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 200/239] xen: speed up grant-table reclaim Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 201/239] virtio-net: fix race between set queues and probe Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 202/239] net: ipa: only reset hashed tables when supported Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 203/239] net: dsa: qca8k: enable use_single_write for qca8xxx Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 204/239] net: dsa: qca8k: fix search_and_insert wrong handling of new rule Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 205/239] net: dsa: qca8k: fix broken search_and_del Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 206/239] net: dsa: qca8k: fix mdb add/del case with 0 VID Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 207/239] io_uring: gate iowait schedule on having pending requests Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 208/239] iommufd: Set end correctly when doing batch carry Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 209/239] selftests/rseq: Play nice with binaries statically linked against glibc 2.35+ Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 210/239] selftests: mptcp: join: only check for ip6tables if needed Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 211/239] soundwire: fix enumeration completion Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 212/239] Revert "um: Use swap() to make code cleaner" Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 213/239] LoongArch: Fix return value underflow in exception path Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 214/239] LoongArch: BPF: Fix check condition to call lu32id in move_imm() Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 215/239] LoongArch: BPF: Enable bpf_probe_read{, str}() on LoongArch Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 216/239] 9p: fix ignored return value in v9fs_dir_release Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 217/239] fs/9p: remove unnecessary and overrestrictive check Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 218/239] fs/9p: fix typo in comparison logic for cache mode Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 219/239] fs/9p: fix type mismatch in file cache mode helper Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 220/239] fs/9p: remove unnecessary invalidate_inode_pages2 Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 221/239] s390/dasd: fix hanging device after quiesce/resume Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 222/239] s390/dasd: print copy pair message only for the correct error Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 223/239] mptcp: more accurate NL event generation Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 224/239] ASoC: wm8904: Fill the cache for WM8904_ADC_TEST_0 register Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 225/239] arm64/sme: Set new vector length before reallocating Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 226/239] PM: sleep: wakeirq: fix wake irq arming Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 227/239] thermal: of: fix double-free on unregistration Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 228/239] ceph: never send metrics if disable_send_metrics is set Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 229/239] drm/i915/dpt: Use shmem for dpt objects Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 230/239] dm cache policy smq: ensure IO doesnt prevent cleaner policy progress Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 231/239] rbd: make get_lock_owner_info() return a single locker or NULL Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 232/239] rbd: harden get_lock_owner_info() a bit Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 233/239] rbd: retrieve and check lock owner twice before blocklisting Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 234/239] mm: lock VMA in dup_anon_vma() before setting ->anon_vma Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 235/239] mm: fix memory ordering for mm_lock_seq and vm_lock_seq Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 236/239] mm/memory-failure: fix hardware poison check in unpoison_memory() Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 237/239] mm/mempolicy: Take VMA lock before replacing policy Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 238/239] dma-buf: keep the signaling time of merged fences v3 Greg Kroah-Hartman
2023-08-01  9:21 ` [PATCH 6.4 239/239] dma-buf: fix an error pointer vs NULL bug Greg Kroah-Hartman
2023-08-01 15:52 ` [PATCH 6.4 000/239] 6.4.8-rc1 review Jon Hunter
2023-08-01 15:56 ` Conor Dooley
2023-08-01 16:13 ` SeongJae Park
2023-08-01 20:08 ` Shuah Khan
2023-08-01 21:23 ` Florian Fainelli
2023-08-02  2:52 ` Naresh Kamboju
2023-08-02  6:53   ` Greg Kroah-Hartman
2023-08-02  4:56 ` Ron Economos
2023-08-02 10:44 ` Bagas Sanjaya

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230801091932.900633611@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=patches@lists.linux.dev \
    --cc=peterz@infradead.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=triangletrap12@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).