[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] xen/sched: rtds: prevent extratime priority_level wraparound


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Oleksii Moisieiev <Oleksii_Moisieiev@xxxxxxxx>
  • Date: Tue, 31 Mar 2026 07:54:53 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eFBEgNcV+FiMSQgiDwvidpNLnWRFRZEGTva0ecCFiMk=; b=yh1CyaRTupqFoiiDS9z/Pbj502Ee6Strv1OE/PghzJPPVq2eXqBTdH10+UJGuD0tK+jryM8OvuKRa5SNIq8b0HECIiboU06nvSN3WYtBau18p6WiOg8Ol5AKwMZECpE9fGcJS4pyDm0la4nINBVecm6gujxC+Ha9a7Iebuewg8QLzoL9jHEtUFZbCWhYx08l9R87+sU1KeMMvCDQ6jf2DyjIHr4WgwJc0lrhpeNVQGsuh92h3nkySTVfRl9vlNccIE/I3En4SMNToKisWWZ/YwjJMw/f1X33hmA2nv7HNjQ5rlLHVYXd/m2SVSidy2m2DlabxDV4fCrz9tMbAsLsnw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sBy2VgbDohqW7sMd6VULZl699KQ+PMUTxa67A2gSrE5qAIe7MxhY/jdU/grGP1RwPyIzY6g74PAMQjDW9Mc1xT8u6D1WTrPgHQuyExUvW88dYVF/7e3fbO6723pJShDHHDRbgDaVn0g4bIkBYkG9CDv7+noNceyUnjVidp+SXE4Jsl4XKbMuMCKTvuOBoebP07Uok9UokOuGNSSEp8ZnDzR+nqJsCeAfLfY09Tu9vFPHn3YPBIapG5AtIKyAsJr0CNDpXGJVhNhP6E2jWtP6dgjHClglolQP7Ku8ePKqPGFH78opoORww1t5i+JpM/dZS23QpLCY9zu2k909rM3ALQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Dario Faggioli <dfaggioli@xxxxxxxx>, George Dunlap <gwd@xxxxxxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Meng Xu <mengxu@xxxxxxxxxxxxx>, Oleksii Moisieiev <Oleksii_Moisieiev@xxxxxxxx>
  • Delivery-date: Tue, 31 Mar 2026 07:55:07 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcwOOouqGhBaDuRkSxR1FXPcpmPA==
  • Thread-topic: [PATCH] xen/sched: rtds: prevent extratime priority_level wraparound

In RTDS, burn_budget() increments priority_level for extratime units
whenever cur_budget is exhausted. As priority_level is unsigned and was
unbounded, it could eventually overflow to 0.

A wrapped value of 0 is the highest RTDS priority, so an extratime unit
could unexpectedly regain top priority and preempt units with active
real-time reservations, violating EDF intent.

Fix this by saturating priority_level at RTDS_MAX_PRIORITY_LEVEL instead
of incrementing unconditionally. Budget refill semantics are unchanged.

Normal behavior is unchanged. Once saturated, priority_level remains at
the lowest priority until the next period update resets it.

Signed-off-by: Oleksii Moisieiev <oleksii_moisieiev@xxxxxxxx>
---

 xen/common/sched/rt.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/xen/common/sched/rt.c b/xen/common/sched/rt.c
index 7b1f64a779..9c1027c388 100644
--- a/xen/common/sched/rt.c
+++ b/xen/common/sched/rt.c
@@ -110,6 +110,12 @@
  */
 #define RTDS_MIN_BUDGET     (MICROSECS(10))
 
+/*
+ * Maximum extratime demotion level. Saturating at this value avoids
+ * unsigned wraparound back to 0 (highest scheduling priority).
+ */
+#define RTDS_MAX_PRIORITY_LEVEL (~0U)
+
 /*
  * UPDATE_LIMIT_SHIFT: a constant used in rt_update_deadline(). When finding
  * the next deadline, performing addition could be faster if the difference
@@ -976,7 +982,9 @@ burn_budget(const struct scheduler *ops, struct rt_unit 
*svc, s_time_t now)
     {
         if ( has_extratime(svc) )
         {
-            svc->priority_level++;
+            if ( svc->priority_level < RTDS_MAX_PRIORITY_LEVEL )
+                svc->priority_level++;
+
             svc->cur_budget = svc->budget;
         }
         else
-- 
2.43.0

base-commit: a7bf8ff218ca05eb3674fdfd2817f6cff471e96a
branch: amoi_rtds_extratime


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.