Hmm, and it also needs to be adjusted for the new cpu pools stuff. I'll take a look at it tomorrow. -George On Mon, May 3, 2010 at 4:50 PM, George Dunlap wrote: > Also, the SCHEDOP needs an xsm callback; but I'm not an expert enough in > the xsm framework to say what it needs. > > Other than that: > > Acked-by: George Dunlap > > > On Mon, Apr 19, 2010 at 6:54 AM, Dulloor wrote: > >> You don't have to explicitly set adjust_global to NULL for credit and >> sedf. >> >> -dulloor >> >> On Mon, Apr 19, 2010 at 9:39 AM, Kathy Hadley < >> Kathy.Hadley@dornerworks.com> wrote: >> >>> Resubmitting now that I have been added to the Xen-devel mailing list. >>> >>> >>> >>> Kathy Hadley >>> >>> DornerWorks, Ltd. >>> >>> >>> >>> *From:* Kathy Hadley >>> *Sent:* Friday, April 16, 2010 10:14 AM >>> *To:* 'xen-devel@lists.xensource.com' >>> *Cc:* 'Keir.Fraser@citrix.com' >>> *Subject:* [Xen-Devel] [PATCH 1/1] Add .adjust_global callback >>> >>> >>> >>> This patch adds an .adjust_global scheduler callback function, which >>> allows adjusting the global scheduler parameters (rather than just one >>> domain’s parameters). This patch supports the addition of an ARINC 653 >>> scheduler (which will be submitted in a subsequent patch), and was suggested >>> by George Dunlap and Keir Fraser in response to an earlier patch (ref: >>> [Xen-devel] [PATCH 1/1] Xen ARINC 653 scheduler). >>> >>> >>> >>> Thanks and regards, >>> >>> >>> >>> >>> >>> [image: cid:image001.jpg@01CAD7E0.50E45D70] >>> >>> *Kathy Hadley >>> *DornerWorks, Ltd. >>> *Embedded Systems Engineering >>> >>> *3445 Lake Eastbrook Blvd SE >>> Grand Rapids, MI 49546 >>> >>> Direct: 616.389.6127 >>> >>> Tel: 616.245.8369 >>> >>> Fax: 616.245.8372 >>> >>> >>> >>> Kathy.Hadley@DornerWorks.com >>> >>> www.DornerWorks.com >>> >>> [image: cid:image002.jpg@01CAD7E0.50E45D70] >>> >>> *Honored as one of the 2010 “Michigan 50 Companies to Watch”* >>> >>> >>> >>> diff -rupN a/xen/common/domctl.c b/xen/common/domctl.c >>> >>> --- a/xen/common/domctl.c 2010-04-07 12:12:06.000000000 -0400 >>> >>> +++ b/xen/common/domctl.c 2010-04-14 10:57:11.262796000 -0400 >>> >>> @@ -592,22 +592,35 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc >>> >>> >>> >>> case XEN_DOMCTL_scheduler_op: >>> >>> { >>> >>> - struct domain *d; >>> >>> - >>> >>> - ret = -ESRCH; >>> >>> - if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL ) >>> >>> - break; >>> >>> + if ( (op->u.scheduler_op.cmd == >>> XEN_DOMCTL_SCHEDOP_put_global_info) >>> >>> + || (op->u.scheduler_op.cmd == >>> XEN_DOMCTL_SCHEDOP_get_global_info) ) >>> >>> + { >>> >>> + ret = sched_adjust_global(&op->u.scheduler_op); >>> >>> + if (op->u.scheduler_op.cmd == >>> XEN_DOMCTL_SCHEDOP_get_global_info) >>> >>> + { >>> >>> + if ( copy_to_guest(u_domctl, op, 1) ) >>> >>> + ret = -EFAULT; >>> >>> + } >>> >>> + } >>> >>> + else >>> >>> + { >>> >>> + struct domain *d; >>> >>> >>> >>> - ret = xsm_scheduler(d); >>> >>> - if ( ret ) >>> >>> - goto scheduler_op_out; >>> >>> + ret = -ESRCH; >>> >>> + if ( (d = rcu_lock_domain_by_id(op->domain)) == NULL ) >>> >>> + break; >>> >>> >>> >>> - ret = sched_adjust(d, &op->u.scheduler_op); >>> >>> - if ( copy_to_guest(u_domctl, op, 1) ) >>> >>> - ret = -EFAULT; >>> >>> + ret = xsm_scheduler(d); >>> >>> + if ( ret ) >>> >>> + goto scheduler_op_out; >>> >>> + >>> >>> + ret = sched_adjust(d, &op->u.scheduler_op); >>> >>> + if ( copy_to_guest(u_domctl, op, 1) ) >>> >>> + ret = -EFAULT; >>> >>> >>> >>> - scheduler_op_out: >>> >>> - rcu_unlock_domain(d); >>> >>> + scheduler_op_out: >>> >>> + rcu_unlock_domain(d); >>> >>> + } >>> >>> } >>> >>> break; >>> >>> >>> >>> diff -rupN a/xen/common/sched_credit.c b/xen/common/sched_credit.c >>> >>> --- a/xen/common/sched_credit.c 2010-04-07 12:12:06.000000000 >>> -0400 >>> >>> +++ b/xen/common/sched_credit.c 2010-04-13 17:30:40.710992000 >>> -0400 >>> >>> @@ -1404,6 +1404,7 @@ const struct scheduler sched_credit_def >>> >>> .wake = csched_vcpu_wake, >>> >>> >>> >>> .adjust = csched_dom_cntl, >>> >>> + .adjust_global = NULL, >>> >>> >>> >>> .pick_cpu = csched_cpu_pick, >>> >>> .do_schedule = csched_schedule, >>> >>> diff -rupN a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c >>> >>> --- a/xen/common/sched_sedf.c 2010-04-07 12:12:06.000000000 -0400 >>> >>> +++ b/xen/common/sched_sedf.c 2010-04-13 17:30:40.710992000 >>> -0400 >>> >>> @@ -1473,6 +1473,7 @@ const struct scheduler sched_sedf_def = >>> >>> .sleep = sedf_sleep, >>> >>> .wake = sedf_wake, >>> >>> .adjust = sedf_adjust, >>> >>> + .adjust_global = NULL, >>> >>> }; >>> >>> >>> >>> /* >>> >>> diff -rupN a/xen/common/schedule.c b/xen/common/schedule.c >>> >>> --- a/xen/common/schedule.c 2010-04-07 12:12:06.000000000 -0400 >>> >>> +++ b/xen/common/schedule.c 2010-04-14 10:57:11.262796000 -0400 >>> >>> @@ -804,6 +804,21 @@ long sched_adjust(struct domain *d, stru >>> >>> return ret; >>> >>> } >>> >>> >>> >>> +/* Adjust scheduling parameters globally */ >>> >>> +long sched_adjust_global(struct xen_domctl_scheduler_op *op) >>> >>> +{ >>> >>> + long ret; >>> >>> + >>> >>> + if ( (op->sched_id != ops.sched_id) >>> >>> + || ( (op->cmd != XEN_DOMCTL_SCHEDOP_put_global_info) >>> >>> + && (op->cmd != XEN_DOMCTL_SCHEDOP_get_global_info) ) ) >>> >>> + return -EINVAL; >>> >>> + >>> >>> + ret = SCHED_OP(adjust_global, op); >>> >>> + >>> >>> + return ret; >>> >>> +} >>> >>> + >>> >>> static void vcpu_periodic_timer_work(struct vcpu *v) >>> >>> { >>> >>> s_time_t now = NOW(); >>> >>> diff -rupN a/xen/include/public/domctl.h b/xen/include/public/domctl.h >>> >>> --- a/xen/include/public/domctl.h 2010-04-07 12:12:06.000000000 -0400 >>> >>> +++ b/xen/include/public/domctl.h 2010-04-14 10:57:11.262796000 >>> -0400 >>> >>> @@ -306,6 +306,8 @@ 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_put_global_info 2 >>> >>> +#define XEN_DOMCTL_SCHEDOP_get_global_info 3 >>> >>> struct xen_domctl_scheduler_op { >>> >>> uint32_t sched_id; /* XEN_SCHEDULER_* */ >>> >>> uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */ >>> >>> diff -rupN a/xen/include/xen/sched.h b/xen/include/xen/sched.h >>> >>> --- a/xen/include/xen/sched.h 2010-04-07 12:12:06.000000000 -0400 >>> >>> +++ b/xen/include/xen/sched.h 2010-04-13 17:30:40.710992000 -0400 >>> >>> @@ -472,6 +472,7 @@ void sched_destroy_vcpu(struct vcpu *v); >>> >>> int sched_init_domain(struct domain *d); >>> >>> void sched_destroy_domain(struct domain *d); >>> >>> long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *); >>> >>> +long sched_adjust_global(struct xen_domctl_scheduler_op *); >>> >>> int sched_id(void); >>> >>> void sched_tick_suspend(void); >>> >>> void sched_tick_resume(void); >>> >>> diff -rupN a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h >>> >>> --- a/xen/include/xen/sched-if.h 2010-04-07 12:12:06.000000000 -0400 >>> >>> +++ b/xen/include/xen/sched-if.h 2010-04-13 17:30:40.710992000 >>> -0400 >>> >>> @@ -76,6 +76,7 @@ struct scheduler { >>> >>> int (*pick_cpu) (struct vcpu *); >>> >>> int (*adjust) (struct domain *, >>> >>> struct xen_domctl_scheduler_op *); >>> >>> + int (*adjust_global) (struct xen_domctl_scheduler_op *); >>> >>> void (*dump_settings) (void); >>> >>> void (*dump_cpu_state) (int); >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Xen-devel mailing list >>> Xen-devel@lists.xensource.com >>> http://lists.xensource.com/xen-devel >>> >>> >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com >> http://lists.xensource.com/xen-devel >> >> >