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

[Xen-changelog] [xen-unstable] scheduler: Add a global parameter adjustment to the switchable scheduler interface



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1273009410 -3600
# Node ID 7d07116efc2535de26fcd4122ee80d068b777e88
# Parent  df8c580b523a0512ec294098e17711dfe93ea8a4
scheduler: Add a global parameter adjustment to the switchable scheduler 
interface

...along with a new sysctl to call it directly.  This is in order to
support DornerWorks' new ARINC653 scheduler.

Based on code from Josh Holtrop and Kathy Hadley at DornerWorks, Ltd

Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
---
 xen/common/schedule.c       |   15 +++++++++++++++
 xen/common/sysctl.c         |    8 ++++++++
 xen/include/public/sysctl.h |   14 ++++++++++++++
 xen/include/xen/sched.h     |    1 +
 4 files changed, 38 insertions(+)

diff -r df8c580b523a -r 7d07116efc25 xen/common/schedule.c
--- a/xen/common/schedule.c     Tue May 04 22:42:34 2010 +0100
+++ b/xen/common/schedule.c     Tue May 04 22:43:30 2010 +0100
@@ -882,6 +882,21 @@ long sched_adjust(struct domain *d, stru
     return ret;
 }
 
+long sched_adjust_global(struct xen_sysctl_scheduler_op *op)
+{
+    const struct scheduler *sched;
+
+    sched = scheduler_get_by_id(op->sched_id);
+    if ( sched == NULL )
+        return -ESRCH;
+
+    if ( (op->cmd != XEN_DOMCTL_SCHEDOP_putinfo) &&
+         (op->cmd != XEN_DOMCTL_SCHEDOP_getinfo) )
+        return -EINVAL;
+
+    return SCHED_OP(sched, adjust_global, op);
+}
+
 static void vcpu_periodic_timer_work(struct vcpu *v)
 {
     s_time_t now = NOW();
diff -r df8c580b523a -r 7d07116efc25 xen/common/sysctl.c
--- a/xen/common/sysctl.c       Tue May 04 22:42:34 2010 +0100
+++ b/xen/common/sysctl.c       Tue May 04 22:43:30 2010 +0100
@@ -326,6 +326,14 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysc
     }
     break;
 
+    case XEN_SYSCTL_scheduler_op:
+    {
+        ret = sched_adjust_global(&op->u.scheduler_op);
+        if ( (ret == 0) && copy_to_guest(u_sysctl, op, 1) )
+            ret = -EFAULT;
+    }
+    break;
+
     default:
         ret = arch_do_sysctl(op, u_sysctl);
         break;
diff -r df8c580b523a -r 7d07116efc25 xen/include/public/sysctl.h
--- a/xen/include/public/sysctl.h       Tue May 04 22:42:34 2010 +0100
+++ b/xen/include/public/sysctl.h       Tue May 04 22:43:30 2010 +0100
@@ -536,6 +536,19 @@ typedef struct xen_sysctl_cpupool_op xen
 typedef struct xen_sysctl_cpupool_op xen_sysctl_cpupool_op_t;
 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpupool_op_t);
 
+#define XEN_SYSCTL_scheduler_op      19
+/* Set or get info? */
+#define XEN_SYSCTL_SCHEDOP_putinfo 0
+#define XEN_SYSCTL_SCHEDOP_getinfo 1
+struct xen_sysctl_scheduler_op {
+    uint32_t sched_id;  /* XEN_SCHEDULER_* (domctl.h) */
+    uint32_t cmd;       /* XEN_SYSCTL_SCHEDOP_* */
+    union {
+    } u;
+};
+typedef struct xen_sysctl_scheduler_op xen_sysctl_scheduler_op_t;
+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_scheduler_op_t);
+
 struct xen_sysctl {
     uint32_t cmd;
     uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
@@ -557,6 +570,7 @@ struct xen_sysctl {
         struct xen_sysctl_page_offline_op   page_offline;
         struct xen_sysctl_lockprof_op       lockprof_op;
         struct xen_sysctl_cpupool_op        cpupool_op;
+        struct xen_sysctl_scheduler_op      scheduler_op;
         uint8_t                             pad[128];
     } u;
 };
diff -r df8c580b523a -r 7d07116efc25 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h   Tue May 04 22:42:34 2010 +0100
+++ b/xen/include/xen/sched.h   Tue May 04 22:43:30 2010 +0100
@@ -469,6 +469,7 @@ void sched_destroy_domain(struct domain 
 void sched_destroy_domain(struct domain *d);
 int sched_move_domain(struct domain *d, struct cpupool *c);
 long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *);
+long sched_adjust_global(struct xen_sysctl_scheduler_op *);
 int  sched_id(void);
 void sched_tick_suspend(void);
 void sched_tick_resume(void);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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