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 5.15 138/155] locking/rtmutex: Fix task->pi_waiters integrity
Date: Tue, 1 Aug 2023 11:20:50 +0200 [thread overview]
Message-ID: <20230801091915.077461867@linuxfoundation.org> (raw)
In-Reply-To: <20230801091910.165050260@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 b7fa3ee3aa1de..ee5be1dda0c40 100644
--- a/kernel/locking/rtmutex.c
+++ b/kernel/locking/rtmutex.c
@@ -331,21 +331,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;
@@ -362,8 +384,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;
@@ -383,7 +405,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
@@ -391,30 +413,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 */
@@ -432,48 +454,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))
@@ -562,9 +594,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]
@@ -579,27 +616,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,
@@ -747,7 +789,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
@@ -755,13 +797,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);
@@ -865,17 +912,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);
@@ -899,7 +947,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);
@@ -912,8 +965,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) {
/*
@@ -928,8 +982,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
@@ -1142,6 +1197,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))
@@ -1175,7 +1231,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)) {
@@ -1222,6 +1278,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(¤t->pi_lock);
waiter = rt_mutex_top_waiter(lock);
@@ -1234,7 +1292,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
@@ -1471,7 +1529,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 a461be2f873db..56d1938cb52a1 100644
--- a/kernel/locking/rtmutex_api.c
+++ b/kernel/locking/rtmutex_api.c
@@ -437,7 +437,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
next prev parent reply other threads:[~2023-08-01 9:28 UTC|newest]
Thread overview: 165+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-01 9:18 [PATCH 5.15 000/155] 5.15.124-rc1 review Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 001/155] jbd2: Fix wrongly judgement for buffer head removing while doing checkpoint Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 002/155] KVM: s390: pv: fix index value of replaced ASCE Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 003/155] io_uring: dont audit the capability check in io_uring_create() Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 004/155] gpio: tps68470: Make tps68470_gpio_output() always set the initial value Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 005/155] gpio: mvebu: Make use of devm_pwmchip_add Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 006/155] gpio: mvebu: fix irq domain leak Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 007/155] btrfs: fix race between quota disable and relocation Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 008/155] i2c: Delete error messages for failed memory allocations Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 009/155] i2c: Improve size determinations Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 010/155] i2c: nomadik: Remove unnecessary goto label Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 011/155] i2c: nomadik: Use devm_clk_get_enabled() Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 012/155] i2c: nomadik: Remove a useless call in the remove function Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 013/155] PCI/ASPM: Return 0 or -ETIMEDOUT from pcie_retrain_link() Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 014/155] PCI/ASPM: Factor out pcie_wait_for_retrain() Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 015/155] PCI/ASPM: Avoid link retraining race Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 016/155] PCI: rockchip: Remove writes to unused registers Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 017/155] PCI: rockchip: Fix window mapping and address translation for endpoint Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 018/155] PCI: rockchip: Dont advertise MSI-X in PCIe capabilities Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 019/155] dlm: cleanup plock_op vs plock_xop Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 020/155] dlm: rearrange async condition return Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 021/155] fs: dlm: interrupt posix locks only when process is killed Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 022/155] drm/ttm: Dont print error message if eviction was interrupted Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 023/155] drm/ttm: Dont leak a resource on eviction error Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 024/155] n_tty: Rename tail to old_tail in n_tty_read() Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 025/155] tty: fix hang on tty device with no_room set Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 026/155] drm/ttm: never consider pinned BOs for eviction&swap Greg Kroah-Hartman
2023-08-01 9:18 ` [PATCH 5.15 027/155] cifs: missing directory in MAINTAINERS file Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 028/155] cifs: use fs_context for automounts Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 029/155] ksmbd: remove internal.h include Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 030/155] cifs: if deferred close is disabled then close files immediately Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 031/155] pwm: meson: Simplify duplicated per-channel tracking Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 032/155] pwm: meson: fix handling of period/duty if greater than UINT_MAX Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 033/155] tracing/probes: Add symstr type for dynamic events Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 034/155] tracing/probes: Fix to avoid double count of the string length on the array Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 035/155] tracing: Allow synthetic events to pass around stacktraces Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 036/155] Revert "tracing: Add "(fault)" name injection to kernel probes" Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 037/155] tracing/probes: Fix to record 0-length data_loc in fetch_store_string*() if fails Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 038/155] scsi: qla2xxx: Remove unused declarations for qla2xxx Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 039/155] scsi: qla2xxx: Multi-que support for TMF Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 040/155] scsi: qla2xxx: Fix task management cmd failure Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 041/155] scsi: qla2xxx: Fix task management cmd fail due to unavailable resource Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 042/155] scsi: qla2xxx: Add debug prints in the device remove path Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 043/155] scsi: qla2xxx: Fix hang in task management Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 044/155] drm/amdgpu: fix vkms crtc settings Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 045/155] drm/amdgpu/vkms: relax timer deactivation by hrtimer_try_to_cancel Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 046/155] jbd2: remove t_checkpoint_io_list Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 047/155] jbd2: remove journal_clean_one_cp_list() Greg Kroah-Hartman
2023-08-01 13:09 ` Jan Kara
2023-08-02 6:46 ` Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 048/155] jbd2: fix a race when checking checkpoint buffer busy Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 049/155] phy: qcom-snps: Use dev_err_probe() to simplify code Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 050/155] phy: qcom-snps: correct struct qcom_snps_hsphy kerneldoc Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 051/155] phy: qcom-snps-femto-v2: keep cfg_ahb_clk enabled during runtime suspend Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 052/155] phy: qcom-snps-femto-v2: properly enable ref clock Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 053/155] soundwire: qcom: update status correctly with mask Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 054/155] media: staging: atomisp: select V4L2_FWNODE Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 055/155] i40e: Fix an NULL vs IS_ERR() bug for debugfs_create_dir() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 056/155] iavf: fix potential deadlock on allocation failure Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 057/155] iavf: check for removal state before IAVF_FLAG_PF_COMMS_FAILED Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 058/155] net: phy: marvell10g: fix 88x3310 power up Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 059/155] net: hns3: fix wrong tc bandwidth weight data issue Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 060/155] net: hns3: fix wrong bw weight of disabled tc issue Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 061/155] vxlan: move to its own directory Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 062/155] vxlan: calculate correct header length for GPE Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 063/155] phy: hisilicon: Fix an out of bounds check in hisi_inno_phy_probe() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 064/155] ethernet: atheros: fix return value check in atl1e_tso_csum() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 065/155] ipv6 addrconf: fix bug where deleting a mngtmpaddr can create a new temporary address Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 066/155] tcp: Reduce chance of collisions in inet6_hashfn() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 067/155] ice: Fix memory management in ice_ethtool_fdir.c Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 068/155] bonding: reset bonds flags when down link is P2P device Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 069/155] team: reset teams " Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 070/155] net: stmmac: Apply redundant write work around on 4.xx too Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 071/155] platform/x86: msi-laptop: Fix rfkill out-of-sync on MSI Wind U100 Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 072/155] igc: Fix Kernel Panic during ndo_tx_timeout callback Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 073/155] netfilter: nft_set_rbtree: fix overlap expiration walk Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 074/155] netfilter: nf_tables: skip immediate deactivate in _PREPARE_ERROR Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 075/155] netfilter: nf_tables: disallow rule addition to bound chain via NFTA_RULE_CHAIN_ID Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 076/155] net/sched: mqprio: refactor nlattr parsing to a separate function Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 077/155] net/sched: mqprio: add extack to mqprio_parse_nlattr() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 078/155] net/sched: mqprio: Add length check for TCA_MQPRIO_{MAX/MIN}_RATE64 Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 079/155] benet: fix return value check in be_lancer_xmit_workarounds() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 080/155] tipc: check return value of pskb_trim() Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 081/155] tipc: stop tipc crypto on failure in tipc_node_create Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 082/155] RDMA/mlx4: Make check for invalid flags stricter Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 083/155] drm/msm/dpu: drop enum dpu_core_perf_data_bus_id Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 084/155] drm/msm/adreno: Fix snapshot BINDLESS_DATA size Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 085/155] RDMA/irdma: Add missing read barriers Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 086/155] RDMA/irdma: Fix data race on CQP completion stats Greg Kroah-Hartman
2023-08-01 9:19 ` [PATCH 5.15 087/155] RDMA/irdma: Fix data race on CQP request done Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 088/155] RDMA/mthca: Fix crash when polling CQ for shared QPs Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 089/155] RDMA/bnxt_re: Prevent handling any completions after qp destroy Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 090/155] drm/msm: Fix IS_ERR_OR_NULL() vs NULL check in a5xx_submit_in_rb() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 091/155] ASoC: fsl_spdif: Silence output on stop Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 092/155] block: Fix a source code comment in include/uapi/linux/blkzoned.h Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 093/155] dm raid: fix missing reconfig_mutex unlock in raid_ctr() error paths Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 094/155] dm raid: clean up four equivalent goto tags in raid_ctr() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 095/155] dm raid: protect md_stop() with reconfig_mutex Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 096/155] drm/amd: Fix an error handling mistake in psp_sw_init() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 097/155] RDMA/irdma: Report correct WC error Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 098/155] ata: pata_ns87415: mark ns87560_tf_read static Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 099/155] ring-buffer: Fix wrong stat of cpu_buffer->read Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 100/155] tracing: Fix warning in trace_buffered_event_disable() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 101/155] Revert "usb: gadget: tegra-xudc: Fix error check in tegra_xudc_powerdomain_init()" Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 102/155] usb: gadget: call usb_gadget_check_config() to verify UDC capability Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 103/155] USB: gadget: Fix the memory leak in raw_gadget driver Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 104/155] KVM: Grab a reference to KVM for VM and vCPU stats file descriptors Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 105/155] KVM: VMX: Dont fudge CR0 and CR4 for restricted L2 guest Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 106/155] serial: qcom-geni: drop bogus runtime pm state update Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 107/155] serial: 8250_dw: Preserve original value of DLF register Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 108/155] serial: sifive: Fix sifive_serial_console_setup() section Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 109/155] USB: serial: option: support Quectel EM060K_128 Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 110/155] USB: serial: option: add Quectel EC200A module support Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 111/155] USB: serial: simple: add Kaufmann RKS+CAN VCP Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 112/155] USB: serial: simple: sort driver entries Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 113/155] 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 5.15 114/155] Revert "usb: dwc3: core: Enable AutoRetry feature in the controller" Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 115/155] usb: dwc3: pci: skip BYT GPIO lookup table for hardwired phy Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 116/155] usb: dwc3: dont reset device side if dwc3 was configured as host-only Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 117/155] usb: ohci-at91: Fix the unhandle interrupt when resume Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 118/155] USB: quirks: add quirk for Focusrite Scarlett Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 119/155] usb: cdns3: fix incorrect calculation of ep_buf_size when more than one config Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 120/155] usb: xhci-mtk: set the dma max_seg_size Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 121/155] Revert "usb: xhci: tegra: Fix error check" Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 122/155] Documentation: security-bugs.rst: update preferences when dealing with the linux-distros group Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 123/155] Documentation: security-bugs.rst: clarify CVE handling Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 124/155] staging: r8712: Fix memory leak in _r8712_init_xmit_priv() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 125/155] staging: ks7010: potential buffer overflow in ks_wlan_set_encode_ext() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 126/155] tty: n_gsm: fix UAF in gsm_cleanup_mux Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 127/155] Revert "xhci: add quirk for host controllers that dont update endpoint DCS" Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 128/155] ALSA: hda/relatek: Enable Mute LED on HP 250 G8 Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 129/155] hwmon: (k10temp) Enable AMD3255 Proc to show negative temperature Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 130/155] hwmon: (nct7802) Fix for temp6 (PECI1) processed even if PECI1 disabled Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 131/155] btrfs: check if the transaction was aborted at btrfs_wait_for_commit() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 132/155] btrfs: check for commit error at btrfs_attach_transaction_barrier() Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 133/155] file: always lock position for FMODE_ATOMIC_POS Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 134/155] nfsd: Remove incorrect check in nfsd4_validate_stateid Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 135/155] tpm_tis: Explicitly check for error code Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 136/155] irq-bcm6345-l1: Do not assume a fixed block to cpu mapping Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 137/155] irqchip/gic-v4.1: Properly lock VPEs when doing a directLPI invalidation Greg Kroah-Hartman
2023-08-01 9:20 ` Greg Kroah-Hartman [this message]
2023-08-01 9:20 ` [PATCH 5.15 139/155] KVM: x86: Disallow KVM_SET_SREGS{2} if incoming CR0 is invalid Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 140/155] virtio-net: fix race between set queues and probe Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 141/155] s390/dasd: fix hanging device after quiesce/resume Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 142/155] ASoC: wm8904: Fill the cache for WM8904_ADC_TEST_0 register Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 143/155] ceph: never send metrics if disable_send_metrics is set Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 144/155] dm cache policy smq: ensure IO doesnt prevent cleaner policy progress Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 145/155] rbd: make get_lock_owner_info() return a single locker or NULL Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 146/155] rbd: harden get_lock_owner_info() a bit Greg Kroah-Hartman
2023-08-01 9:20 ` [PATCH 5.15 147/155] rbd: retrieve and check lock owner twice before blocklisting Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 148/155] tracing: Fix trace_event_raw_event_synth() if else statement Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 149/155] ACPI: processor: perflib: Use the "no limit" frequency QoS Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 150/155] ACPI: processor: perflib: Avoid updating frequency QoS unnecessarily Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 151/155] cpufreq: intel_pstate: Drop ACPI _PSS states table patching Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 152/155] selftests: mptcp: sockopt: use iptables-legacy if available Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 153/155] io_uring: treat -EAGAIN for REQ_F_NOWAIT as final for io-wq Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 154/155] ASoC: cs42l51: fix driver to properly autoload with automatic module loading Greg Kroah-Hartman
2023-08-01 9:21 ` [PATCH 5.15 155/155] selftests: mptcp: join: only check for ip6tables if needed Greg Kroah-Hartman
2023-08-01 15:52 ` [PATCH 5.15 000/155] 5.15.124-rc1 review Jon Hunter
2023-08-01 16:15 ` SeongJae Park
2023-08-01 16:30 ` Florian Fainelli
2023-08-01 20:21 ` Shuah Khan
2023-08-02 1:57 ` Naresh Kamboju
2023-08-02 6:50 ` Greg Kroah-Hartman
2023-08-02 4:57 ` Harshit Mogalapalli
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=20230801091915.077461867@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