From: Sean Christopherson <seanjc@google.com>
To: Hui Su <sh_def@163.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
K Prateek Nayak <kprateek.nayak@amd.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] sched/wait: avoid modifying entry on failed priority registration
Date: Mon, 12 Oct 2026 06:32:28 -0700 [thread overview]
Message-ID: <aszhbJz0N7cOy5fx@google.com> (raw)
In-Reply-To: <20261011015019.4056529-1-sh_def@163.com>
On Sun, Oct 11, 2026, Hui Su wrote:
> add_wait_queue_priority_exclusive() sets WQ_FLAG_EXCLUSIVE and
> WQ_FLAG_PRIORITY before checking whether another priority waiter is
> already present. Thus, when registration fails with -EBUSY, the entry
> is left unqueued but with modified flags.
>
> There is no need to modify the entry before the failure check. Move the
> flag update after the check so that a rejected registration does not
> unnecessarily alter the entry.
In case anyone is concerned about this being a meaningful bug, kvm_irqfd_register()
is the only user of add_wait_queue_priority_exclusive() and KVM never touches its
entry if registration fails. I.e. this is completely benign in the current code
base.
> Signed-off-by: Hui Su <sh_def@163.com>
>
> ---
> Testing:
> - Private x86_64/QEMU differential oracle: the old path modified the entry
> flags on -EBUSY; the patched path preserved them.
> ---
> kernel/sched/wait.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
> index d033f600f48c..93b353fbd0c9 100644
> --- a/kernel/sched/wait.c
> +++ b/kernel/sched/wait.c
> @@ -54,14 +54,13 @@ int add_wait_queue_priority_exclusive(struct wait_queue_head *wq_head,
> {
> struct list_head *head = &wq_head->head;
>
> - wq_entry->flags |= WQ_FLAG_EXCLUSIVE | WQ_FLAG_PRIORITY;
> -
> guard(spinlock_irqsave)(&wq_head->lock);
>
> if (!list_empty(head) &&
> (list_first_entry(head, typeof(*wq_entry), entry)->flags & WQ_FLAG_PRIORITY))
> return -EBUSY;
>
> + wq_entry->flags |= WQ_FLAG_EXCLUSIVE | WQ_FLAG_PRIORITY;
AFAICT, nothing peeks at wait queue entries outside of the spinlock (which is
stating the obvious to some extent since there's no RCU in sight), so we're not
relying on the above spinlock acquisition to order the flags update before the
list_add().
Reviewed-by: Sean Christopherson <seanjc@google.com>
> list_add(&wq_entry->entry, head);
> return 0;
> }
>
> base-commit: 3857c2fe5449541e24afc5efdb0f81a8a8f9a3a0
>
>
prev parent reply other threads:[~2026-10-12 13:32 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-11 1:50 Hui Su
2026-10-12 13:32 ` Sean Christopherson [this message]
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=aszhbJz0N7cOy5fx@google.com \
--to=seanjc@google.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sh_def@163.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.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
all inboxes | Powered by JetHome®