From: Ruslan Ruslichenko <ruslichenko.r@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: dfaggioli@suse.com, jgross@suse.com, gwd@xenproject.org,
artem_mygaiev@epam.com, Ruslan_Ruslichenko@epam.com
Subject: [PATCH] xen/sched: refactor urgent count update
Date: Fri, 25 Sep 2026 23:28:03 +0200 [thread overview]
Message-ID: <20260925212803.799550-1-ruslichenko.r@gmail.com> (raw)
From: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>
With current implementation whenever vCPU blocks on
waiting for event channel via SCHEDOP_poll hypercall,
scheduler sets 'is_urgent' flag. The flag is cleared
on vCPU runstate change, if it is no longer in
'VPF_blocked' state or its vcpu_id is not in poll_mask.
However, the only way for vCPU runstate to change in
polled state is when it's going to wakeup.
Thus when 'is_urgent' is set, inner condition will always be:
if ( unlikely(v->is_urgent) )
{
if ( !(v->pause_flags & VPF_blocked) || // Always True
!test_bit(v->vcpu_id, v->domain->poll_mask) ) // Never evaluated
This makes the second condition dead code.
Thus simplify overall code structure and remove dead code.
The patch has no functional change.
Signed-off-by: Ruslan Ruslichenko <Ruslan_Ruslichenko@epam.com>
---
xen/common/sched/core.c | 26 +++++++++++---------------
1 file changed, 11 insertions(+), 15 deletions(-)
diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c
index 77cbfd5226..22b3cd1007 100644
--- a/xen/common/sched/core.c
+++ b/xen/common/sched/core.c
@@ -241,26 +241,22 @@ static inline void trace_continue_running(const struct vcpu *v)
static inline void vcpu_urgent_count_update(struct vcpu *v)
{
+ bool cur_urgent;
+
if ( is_idle_vcpu(v) )
return;
- if ( unlikely(v->is_urgent) )
- {
- if ( !(v->pause_flags & VPF_blocked) ||
- !test_bit(v->vcpu_id, v->domain->poll_mask) )
- {
- v->is_urgent = 0;
- atomic_dec(&per_cpu(sched_urgent_count, v->processor));
- }
- }
- else
+ cur_urgent = (v->pause_flags & VPF_blocked) &&
+ test_bit(v->vcpu_id, v->domain->poll_mask);
+
+ if ( unlikely(v->is_urgent != cur_urgent) )
{
- if ( unlikely(v->pause_flags & VPF_blocked) &&
- unlikely(test_bit(v->vcpu_id, v->domain->poll_mask)) )
- {
- v->is_urgent = 1;
+ v->is_urgent = cur_urgent;
+
+ if ( cur_urgent )
atomic_inc(&per_cpu(sched_urgent_count, v->processor));
- }
+ else
+ atomic_dec(&per_cpu(sched_urgent_count, v->processor));
}
}
--
2.43.0
next reply other threads:[~2026-09-25 21:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-25 21:28 Ruslan Ruslichenko [this message]
2026-09-29 15:35 ` [PATCH] xen/sched: refactor urgent count update Jan Beulich
2026-09-30 10:36 ` [RESEND] " Ruslan
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=20260925212803.799550-1-ruslichenko.r@gmail.com \
--to=ruslichenko.r@gmail.com \
--cc=Ruslan_Ruslichenko@epam.com \
--cc=artem_mygaiev@epam.com \
--cc=dfaggioli@suse.com \
--cc=gwd@xenproject.org \
--cc=jgross@suse.com \
--cc=xen-devel@lists.xenproject.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.