Implement a new domctl sub-operation to control scheduling
domains. The sub-op is hanged off the domctl-scheduling hypercall.
signed-off-by: Mike D. Day <ncmike@xxxxxxxxxx>
--
common/domctl.c | 18 +++++++++++-------
common/schedule.c | 8 ++++++++
include/public/domctl.h | 28 ++++++++++++++++++++++++++++
include/xen/sched-if.h | 1 +
include/xen/sched.h | 1 +
5 files changed, 49 insertions(+), 7 deletions(-)
--
diff -r 0f9b97523450 xen/common/domctl.c
--- a/xen/common/domctl.c Sat Apr 28 09:44:24 2007 +0100
+++ b/xen/common/domctl.c Fri May 04 17:52:18 2007 -0400
@@ -447,15 +447,19 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
{
struct domain *d;
- ret = -ESRCH;
- if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
- break;
-
- ret = sched_adjust(d, &op->u.scheduler_op);
+ if (op->u.scheduler_op.cmd == XEN_DOMCTL_SCHEDOP_sdom)
+ ret = sched_sdom_op(&op->u.scheduler_op.u.sdom);
+ else
+ {
+ ret = -ESRCH;
+ if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL )
+ break;
+ ret = sched_adjust(d, &op->u.scheduler_op);
+ rcu_unlock_domain(d);
+ }
+
if ( copy_to_guest(u_domctl, op, 1) )
ret = -EFAULT;
-
- rcu_unlock_domain(d);
}
break;
diff -r 0f9b97523450 xen/common/schedule.c
--- a/xen/common/schedule.c Sat Apr 28 09:44:24 2007 +0100
+++ b/xen/common/schedule.c Fri May 04 11:21:36 2007 -0400
@@ -530,6 +530,14 @@ int sched_id(void)
return ops.sched_id;
}
+int sched_sdom_op(struct xen_domctl_sdom *op)
+{
+ if (ops.sdom_op)
+ return ops.sdom_op(op);
+ return -EINVAL;
+}
+
+
/* Adjust scheduling parameter for a given domain. */
long sched_adjust(struct domain *d, struct xen_domctl_scheduler_op *op)
{
diff -r 0f9b97523450 xen/include/public/domctl.h
--- a/xen/include/public/domctl.h Sat Apr 28 09:44:24 2007 +0100
+++ b/xen/include/public/domctl.h Fri May 04 17:51:11 2007 -0400
@@ -291,6 +291,26 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_v
/* Set or get info? */
#define XEN_DOMCTL_SCHEDOP_putinfo 0
#define XEN_DOMCTL_SCHEDOP_getinfo 1
+#define XEN_DOMCTL_SCHEDOP_sdom 2
+
+#define SDOM_get_flags 1
+#define SDOM_get_sdom 2
+#define SDOM_del_adom 3
+#define SDOM_add_adom 4
+
+/* flags for nemesis-sytle scheduling domains */
+#define SDOM_INACTIVE 0L
+#define SDOM_ACTIVE 1
+#define SDOM_IS_ADOM (SDOM_ACTIVE << 1)
+
+/* reason codes for u.sdom.reason */
+#define SDOM_err_no_reason 0
+#define SDOM_err_already_adom 1
+#define SDOM_err_already_sdom 2
+#define SDOM_err_same_id 3
+#define SDOM_err_not_adom 4
+#define SDOM_err_inval 5
+
struct xen_domctl_scheduler_op {
uint32_t sched_id; /* XEN_SCHEDULER_* */
uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */
@@ -306,6 +326,14 @@ struct xen_domctl_scheduler_op {
uint16_t weight;
uint16_t cap;
} credit;
+ struct xen_domctl_sdom
+ {
+ uint16_t op;
+ uint16_t reason;
+ uint32_t flags;
+ domid_t sdom;
+ domid_t adom;
+ } sdom __attribute__ ((aligned));
} u;
};
typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t;
diff -r 0f9b97523450 xen/include/xen/sched-if.h
--- a/xen/include/xen/sched-if.h Sat Apr 28 09:44:24 2007 +0100
+++ b/xen/include/xen/sched-if.h Fri May 04 11:21:36 2007 -0400
@@ -73,6 +73,7 @@ struct scheduler {
struct task_slice (*do_schedule) (s_time_t);
int (*pick_cpu) (struct vcpu *);
+ int (*sdom_op) (struct xen_domctl_sdom *);
int (*adjust) (struct domain *,
struct xen_domctl_scheduler_op *);
void (*dump_settings) (void);
diff -r 0f9b97523450 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h Sat Apr 28 09:44:24 2007 +0100
+++ b/xen/include/xen/sched.h Fri May 04 11:21:36 2007 -0400
@@ -370,6 +370,7 @@ void sched_destroy_vcpu(struct vcpu *v);
void sched_destroy_vcpu(struct vcpu *v);
int sched_init_domain(struct domain *d);
void sched_destroy_domain(struct domain *d);
+int sched_sdom_op(struct xen_domctl_sdom *);
long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *);
int sched_id(void);
void vcpu_wake(struct vcpu *d);
--
Mike D. Day
IBM LTC
Cell: 919 412-3900
Sametime: ncmike@xxxxxxxxxx AIM: ncmikeday Yahoo: ultra.runner
PGP key: http://www.ncultra.org/ncmike/pubkey.asc
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|