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

[PATCH 4/4] sysctl: align handling of unsupported commands


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Milan Djokic <milan_djokic@xxxxxxxx>
  • Date: Fri, 5 Dec 2025 20:36: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=S3hht+B/Z3BXKM33lvD97f0jezcDIH+75DFkaQV/1GI=; b=JJ/0mAiU0nQr5cKil2pQQv/nuT5V2nN2P94cGR4BCKELf2Of4tSGACAe7++tlMS++ohxmRzNiKp7E+X63EHDuk3+Xl6wjKopceCzEDB73YZPQ/ieXjYqRfCfmD/aEscmCS4/CwNAF88zFEqn3gR36T1aSuofCYAhX/eUic+a/SJqTJEF2aiQDwl3kLPbKNIOWTGkNW6v0Uyj1ypXqRWi+MMNDzDYEsPiVcMW/z7XN6S0r1bFZnRINjE6BQV/JwD5D2OhwEa2T5uhp1fX4GQO/kpNHsUt7o6HOOYRScJGZBvNUH/RI3koXJ+5544/qUFlZr2EVhbPEnAHAAVOQnPvPw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a5bqKK0zmCGQWij/mtSg4UqVPs89U+UqKnV/wM1Ve0TmJ0Z/AEaN4OOuSv76Xp++3pW7hdqhcBvYV+9W8Kar4tRvYFuZw6OjFtV4eVSyS+gUWfbCswkzJPGv7n91BVth1HSKKKs6thGMTFacBUM/Mcb1QnBdyyTwGlZeAjeUsQXtBcr/KH5WPuFWY7wNjkWFG6pVE4m9jsMkowzQbFU2x9HINZG/KgI5nB3sjelKxDU9UWqk0YAzVsFaL4brjQsn5kHQ7YyXGLfBCuc4Er8fDVSTwcSuvGsRdu3+8q3wzEKrbrovV1AJJtSkUR4MGpYscKP1cv5utJPsabkHQzKq/Q==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Milan Djokic <milan_djokic@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
  • Delivery-date: Fri, 05 Dec 2025 20:36:58 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcZibkme3OGvWxDky6ckEgDIZ95g==
  • Thread-topic: [PATCH 4/4] sysctl: align handling of unsupported commands

Handling of unsupported sysctl commands currently diverges: some commands
return -EOPNOTSUPP, while others fall back to generic -ENOSYS.

Unify the behavior so that unsupported commands consistently return the
appropriate error code, allowing the control domain to correctly identify
unsupported operations.

Using IS_ENABLED() macro to identify disabled commands, allowing
dead code to be removed at compile time.

Signed-off-by: Milan Djokic <milan_djokic@xxxxxxxx>
---
 xen/common/sysctl.c         | 34 ++++++++++++++++++++--------------
 xen/include/xen/livepatch.h |  2 +-
 xen/include/xen/perfc.h     |  4 +++-
 xen/include/xen/spinlock.h  |  6 +++---
 xen/include/xen/trace.h     |  2 +-
 5 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index 5207664252..1c4e0b60d8 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -113,17 +113,20 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) 
u_sysctl)
     }
     break;
 
-#ifdef CONFIG_PERF_COUNTERS
     case XEN_SYSCTL_perfc_op:
-        ret = perfc_control(&op->u.perfc_op);
+        if ( !IS_ENABLED(CONFIG_PERF_COUNTERS) )
+            ret = -EOPNOTSUPP;
+        else
+            ret = perfc_control(&op->u.perfc_op);
         break;
-#endif
 
-#ifdef CONFIG_DEBUG_LOCK_PROFILE
     case XEN_SYSCTL_lockprof_op:
-        ret = spinlock_profile_control(&op->u.lockprof_op);
+        if ( !IS_ENABLED(CONFIG_DEBUG_LOCK_PROFILE) )
+            ret = -EOPNOTSUPP;
+        else
+            ret = spinlock_profile_control(&op->u.lockprof_op);
         break;
-#endif
+
     case XEN_SYSCTL_debug_keys:
     {
         char c;
@@ -170,19 +173,22 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) 
u_sysctl)
         op->u.availheap.avail_bytes <<= PAGE_SHIFT;
         break;
 
-#ifdef CONFIG_PM_STATS
     case XEN_SYSCTL_get_pmstat:
-        ret = do_get_pm_info(&op->u.get_pmstat);
+        if ( !IS_ENABLED(CONFIG_PM_STATS) )
+            ret = -EOPNOTSUPP;
+        else
+            ret = do_get_pm_info(&op->u.get_pmstat);
         break;
-#endif
 
-#ifdef CONFIG_PM_OP
     case XEN_SYSCTL_pm_op:
-        ret = do_pm_op(&op->u.pm_op);
-        if ( ret == -EAGAIN )
-            copyback = 1;
+        if ( !IS_ENABLED(CONFIG_PM_OP) )
+            ret = -EOPNOTSUPP;
+        else {
+            ret = do_pm_op(&op->u.pm_op);
+            if ( ret == -EAGAIN )
+                copyback = 1;
+        }
         break;
-#endif
 
     case XEN_SYSCTL_page_offline_op:
     {
diff --git a/xen/include/xen/livepatch.h b/xen/include/xen/livepatch.h
index d074a5bebe..1601b860d8 100644
--- a/xen/include/xen/livepatch.h
+++ b/xen/include/xen/livepatch.h
@@ -157,7 +157,7 @@ void revert_payload_tail(struct payload *data);
 
 static inline int livepatch_op(struct xen_sysctl_livepatch_op *op)
 {
-    return -ENOSYS;
+    return -EOPNOTSUPP;
 }
 
 static inline void check_for_livepatch_work(void) {}
diff --git a/xen/include/xen/perfc.h b/xen/include/xen/perfc.h
index bf0eb032f7..a44c2f74a1 100644
--- a/xen/include/xen/perfc.h
+++ b/xen/include/xen/perfc.h
@@ -92,7 +92,6 @@ DECLARE_PER_CPU(perfc_t[NUM_PERFCOUNTERS], perfcounters);
 #endif
 
 struct xen_sysctl_perfc_op;
-int perfc_control(struct xen_sysctl_perfc_op *pc);
 
 extern void cf_check perfc_printall(unsigned char key);
 extern void cf_check perfc_reset(unsigned char key);
@@ -114,4 +113,7 @@ extern void cf_check perfc_reset(unsigned char key);
 
 #endif /* CONFIG_PERF_COUNTERS */
 
+struct xen_sysctl_perfc_op;
+extern int perfc_control(struct xen_sysctl_perfc_op *pc);
+
 #endif /* __XEN_PERFC_H__ */
diff --git a/xen/include/xen/spinlock.h b/xen/include/xen/spinlock.h
index ca9d8c7ec0..10ee81b7db 100644
--- a/xen/include/xen/spinlock.h
+++ b/xen/include/xen/spinlock.h
@@ -7,6 +7,7 @@
 
 #include <asm/system.h>
 #include <asm/spinlock.h>
+#include <public/sysctl.h>
 
 #define SPINLOCK_CPU_BITS  16
 
@@ -40,8 +41,6 @@ union lock_debug { };
 
 #ifdef CONFIG_DEBUG_LOCK_PROFILE
 
-#include <public/sysctl.h>
-
 /*
     lock profiling on:
 
@@ -164,7 +163,6 @@ void _lock_profile_deregister_struct(int32_t type,
 #define lock_profile_deregister_struct(type, ptr)                             \
     _lock_profile_deregister_struct(type, &((ptr)->profile_head))
 
-extern int spinlock_profile_control(struct xen_sysctl_lockprof_op *pc);
 extern void cf_check spinlock_profile_printall(unsigned char key);
 extern void cf_check spinlock_profile_reset(unsigned char key);
 
@@ -360,4 +358,6 @@ static always_inline void nrspin_lock_irq(rspinlock_t *l)
 #define nrspin_unlock_irqrestore(l, f) _nrspin_unlock_irqrestore(l, f)
 #define nrspin_unlock_irq(l)           _nrspin_unlock_irq(l)
 
+extern int spinlock_profile_control(struct xen_sysctl_lockprof_op *pc);
+
 #endif /* __SPINLOCK_H__ */
diff --git a/xen/include/xen/trace.h b/xen/include/xen/trace.h
index 30ebdcc47f..fff3a4f451 100644
--- a/xen/include/xen/trace.h
+++ b/xen/include/xen/trace.h
@@ -48,7 +48,7 @@ void __trace_hypercall(uint32_t event, unsigned long op,
 
 static inline int tb_control(struct xen_sysctl_tbuf_op *tbc)
 {
-    return -ENOSYS;
+    return -EOPNOTSUPP;
 }
 
 static inline int trace_will_trace_event(uint32_t event)
-- 
2.43.0



 


Rackspace

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