[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] credit2: Fix erronous ASSERT
>>> On 08.03.13 at 15:14, George Dunlap <george.dunlap@xxxxxxxxxxxxx> wrote: > In order to avoid high-frequency cpu migration, vcpus may in fact be > scheduled slightly out-of-order. Account for this situation properly. > > Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> > --- > xen/common/sched_credit2.c | 40 ++++++++++++++++------------------------ > 1 file changed, 16 insertions(+), 24 deletions(-) > > diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c > index a7bd2ee..5bf5ebc 100644 > --- a/xen/common/sched_credit2.c > +++ b/xen/common/sched_credit2.c > @@ -1544,31 +1544,23 @@ csched_runtime(const struct scheduler *ops, int cpu, > struct csched_vcpu *snext) > } > } > > - /* > - * snext is about to be scheduled; so: > - * > - * 1. if snext->credit were less than 0 when it was taken off the > - * runqueue, then csched_schedule() should have called > - * reset_credit(). So at this point snext->credit must be greater > - * than 0. > - * > - * 2. snext's credit must be greater than or equal to anyone else > - * in the queue, so snext->credit - swait->credit must be greater > - * than or equal to 0. > - */ > - ASSERT(rt_credit >= 0); > - > - /* FIXME: See if we can eliminate this conversion if we know time > - * will be outside (MIN,MAX). Probably requires pre-calculating > - * credit values of MIN,MAX per vcpu, since each vcpu burns credit > - * at a different rate. */ > - time = c2t(rqd, rt_credit, snext); > - > - /* Check limits */ > - if ( time < CSCHED_MIN_TIMER ) > + /* The next guy may actually have a higher credit, if we've */ This comment appears to end prematurely. > + if ( rt_credit < 0 ) Perhaps <= ? Jan > time = CSCHED_MIN_TIMER; > - else if ( time > CSCHED_MAX_TIMER ) > - time = CSCHED_MAX_TIMER; > + else > + { > + /* FIXME: See if we can eliminate this conversion if we know time > + * will be outside (MIN,MAX). Probably requires pre-calculating > + * credit values of MIN,MAX per vcpu, since each vcpu burns credit > + * at a different rate. */ > + time = c2t(rqd, rt_credit, snext); > + > + /* Check limits */ > + if ( time < CSCHED_MIN_TIMER ) > + time = CSCHED_MIN_TIMER; > + else if ( time > CSCHED_MAX_TIMER ) > + time = CSCHED_MAX_TIMER; > + } > > return time; > } > -- > 1.7.9.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |