From: George Dunlap Date: Mon, 25 Jul 2016 11:09:52 +0000 (+0100) Subject: xen: Some code motion to avoid having to do forward-declaration X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~705 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=4f9ab4330ece38382dc01a8df84b208af515d66a;p=xen.git xen: Some code motion to avoid having to do forward-declaration For sched_credit2, move the vcpu insert / remove / free functions near the domain insert / remove / alloc / free functions (and after cpu_pick). For sched_rt, move rt_cpu_pick() further up. This is pure code motion; no functional change. Signed-off-by: George Dunlap Reviewed-by: Meng Xu ​ Acked-by: Dario Faggioli --- diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c index 1d79de053d..3d2716a60d 100644 --- a/xen/common/sched_credit2.c +++ b/xen/common/sched_credit2.c @@ -1347,59 +1347,6 @@ runq_deassign(const struct scheduler *ops, struct vcpu *vc) __runq_deassign(svc); } -static void -csched2_vcpu_insert(const struct scheduler *ops, struct vcpu *vc) -{ - struct csched2_vcpu *svc = vc->sched_priv; - struct csched2_dom * const sdom = svc->sdom; - spinlock_t *lock; - - ASSERT(!is_idle_vcpu(vc)); - ASSERT(list_empty(&svc->runq_elem)); - - /* Add vcpu to runqueue of initial processor */ - lock = vcpu_schedule_lock_irq(vc); - - runq_assign(ops, vc); - - vcpu_schedule_unlock_irq(lock, vc); - - sdom->nr_vcpus++; - - SCHED_STAT_CRANK(vcpu_insert); - - CSCHED2_VCPU_CHECK(vc); -} - -static void -csched2_free_vdata(const struct scheduler *ops, void *priv) -{ - struct csched2_vcpu *svc = priv; - - xfree(svc); -} - -static void -csched2_vcpu_remove(const struct scheduler *ops, struct vcpu *vc) -{ - struct csched2_vcpu * const svc = CSCHED2_VCPU(vc); - spinlock_t *lock; - - ASSERT(!is_idle_vcpu(vc)); - ASSERT(list_empty(&svc->runq_elem)); - - SCHED_STAT_CRANK(vcpu_remove); - - /* Remove from runqueue */ - lock = vcpu_schedule_lock_irq(vc); - - runq_deassign(ops, vc); - - vcpu_schedule_unlock_irq(lock, vc); - - svc->sdom->nr_vcpus--; -} - static void csched2_vcpu_sleep(const struct scheduler *ops, struct vcpu *vc) { @@ -2098,6 +2045,59 @@ csched2_dom_destroy(const struct scheduler *ops, struct domain *dom) csched2_free_domdata(ops, CSCHED2_DOM(dom)); } +static void +csched2_vcpu_insert(const struct scheduler *ops, struct vcpu *vc) +{ + struct csched2_vcpu *svc = vc->sched_priv; + struct csched2_dom * const sdom = svc->sdom; + spinlock_t *lock; + + ASSERT(!is_idle_vcpu(vc)); + ASSERT(list_empty(&svc->runq_elem)); + + /* Add vcpu to runqueue of initial processor */ + lock = vcpu_schedule_lock_irq(vc); + + runq_assign(ops, vc); + + vcpu_schedule_unlock_irq(lock, vc); + + sdom->nr_vcpus++; + + SCHED_STAT_CRANK(vcpu_insert); + + CSCHED2_VCPU_CHECK(vc); +} + +static void +csched2_free_vdata(const struct scheduler *ops, void *priv) +{ + struct csched2_vcpu *svc = priv; + + xfree(svc); +} + +static void +csched2_vcpu_remove(const struct scheduler *ops, struct vcpu *vc) +{ + struct csched2_vcpu * const svc = CSCHED2_VCPU(vc); + spinlock_t *lock; + + ASSERT(!is_idle_vcpu(vc)); + ASSERT(list_empty(&svc->runq_elem)); + + SCHED_STAT_CRANK(vcpu_remove); + + /* Remove from runqueue */ + lock = vcpu_schedule_lock_irq(vc); + + runq_deassign(ops, vc); + + vcpu_schedule_unlock_irq(lock, vc); + + svc->sdom->nr_vcpus--; +} + /* How long should we let this vcpu run for? */ static s_time_t csched2_runtime(const struct scheduler *ops, int cpu, struct csched2_vcpu *snext) diff --git a/xen/common/sched_rt.c b/xen/common/sched_rt.c index 98524a63bc..bd3a2a00b3 100644 --- a/xen/common/sched_rt.c +++ b/xen/common/sched_rt.c @@ -581,6 +581,29 @@ replq_reinsert(const struct scheduler *ops, struct rt_vcpu *svc) set_timer(rt_priv(ops)->repl_timer, rearm_svc->cur_deadline); } +/* + * Pick a valid CPU for the vcpu vc + * Valid CPU of a vcpu is intesection of vcpu's affinity + * and available cpus + */ +static int +rt_cpu_pick(const struct scheduler *ops, struct vcpu *vc) +{ + cpumask_t cpus; + cpumask_t *online; + int cpu; + + online = cpupool_domain_cpumask(vc->domain); + cpumask_and(&cpus, online, vc->cpu_hard_affinity); + + cpu = cpumask_test_cpu(vc->processor, &cpus) + ? vc->processor + : cpumask_cycle(vc->processor, &cpus); + ASSERT( !cpumask_empty(&cpus) && cpumask_test_cpu(cpu, &cpus) ); + + return cpu; +} + /* * Init/Free related code */ @@ -893,29 +916,6 @@ rt_vcpu_remove(const struct scheduler *ops, struct vcpu *vc) vcpu_schedule_unlock_irq(lock, vc); } -/* - * Pick a valid CPU for the vcpu vc - * Valid CPU of a vcpu is intesection of vcpu's affinity - * and available cpus - */ -static int -rt_cpu_pick(const struct scheduler *ops, struct vcpu *vc) -{ - cpumask_t cpus; - cpumask_t *online; - int cpu; - - online = cpupool_domain_cpumask(vc->domain); - cpumask_and(&cpus, online, vc->cpu_hard_affinity); - - cpu = cpumask_test_cpu(vc->processor, &cpus) - ? vc->processor - : cpumask_cycle(vc->processor, &cpus); - ASSERT( !cpumask_empty(&cpus) && cpumask_test_cpu(cpu, &cpus) ); - - return cpu; -} - /* * Burn budget in nanosecond granularity */