|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/4] xen: sched: get rid of cpupool_scheduler_cpumask()
On Thu, Jun 25, 2015 at 1:15 PM, Dario Faggioli
<dario.faggioli@xxxxxxxxxx> wrote:
> and of (almost every) direct use of cpupool_online_cpumask().
>
> In fact, what we really want for the most of the times,
> is the set of valid pCPUs of the cpupool a certain domain
> is part of. Furthermore, in case it's called with a NULL
> pool as argument, cpupool_scheduler_cpumask() does more
> harm than good, by returning the bitmask of free pCPUs!
>
> This commit, therefore:
> * gets rid of cpupool_scheduler_cpumask(), in favour of
> cpupool_domain_cpumask(), which makes it more evident
> what we are after, and accommodates some sanity checking;
> * replaces some of the calls to cpupool_online_cpumask()
> with calls to the new functions too.
>
> Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
> ---
> Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> Cc: Juergen Gross <jgross@xxxxxxxx>
> Cc: Robert VanVossen <robert.vanvossen@xxxxxxxxxxxxxxx>
> Cc: Josh Whitehead <josh.whitehead@xxxxxxxxxxxxxxx>
> Cc: Meng Xu <mengxu@xxxxxxxxxxxxx>
> Cc: Sisu Xi <xisisu@xxxxxxxxx>
> ---
> xen/common/domain.c | 5 +++--
> xen/common/domctl.c | 4 ++--
> xen/common/sched_arinc653.c | 2 +-
> xen/common/sched_credit.c | 6 +++---
> xen/common/sched_rt.c | 12 ++++++------
> xen/common/sched_sedf.c | 2 +-
> xen/common/schedule.c | 2 +-
> xen/include/xen/sched-if.h | 12 ++++++++++--
> 8 files changed, 27 insertions(+), 18 deletions(-)
>
> diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
> index a1945ac..8c36635 100644
> --- a/xen/common/sched_credit.c
> +++ b/xen/common/sched_credit.c
> @@ -309,7 +309,7 @@ __runq_remove(struct csched_vcpu *svc)
> static inline int __vcpu_has_soft_affinity(const struct vcpu *vc,
> const cpumask_t *mask)
> {
> - return !cpumask_subset(cpupool_online_cpumask(vc->domain->cpupool),
> + return !cpumask_subset(cpupool_domain_cpumask(vc->domain),
> vc->cpu_soft_affinity) &&
> !cpumask_subset(vc->cpu_hard_affinity, vc->cpu_soft_affinity) &&
> cpumask_intersects(vc->cpu_soft_affinity, mask);
> @@ -374,7 +374,7 @@ __runq_tickle(unsigned int cpu, struct csched_vcpu *new)
>
> /* cpu is vc->processor, so it must be in a cpupool. */
> ASSERT(per_cpu(cpupool, cpu) != NULL);
> - online = cpupool_online_cpumask(per_cpu(cpupool, cpu));
> + online = cpupool_domain_cpumask(new->sdom->dom);
Two comments in passing here (no action required):
1. Looks like passing both cpu and svc to this function is a bit
redundant, as the function can just look up new->vcpu->processor
itself
2. After this patch, the ASSERT there will be redundant, as there's
already an identical assert in cpupool_domain_cpumask()
Those won't hurt, but if you end up respinning you might think about
at least taking the ASSERT out.
> diff --git a/xen/common/schedule.c b/xen/common/schedule.c
> index 4ffcd98..7ad298a 100644
> --- a/xen/common/schedule.c
> +++ b/xen/common/schedule.c
> @@ -80,7 +80,7 @@ static struct scheduler __read_mostly ops;
>
> #define DOM2OP(_d) (((_d)->cpupool == NULL) ? &ops :
> ((_d)->cpupool->sched))
> #define VCPU2OP(_v) (DOM2OP((_v)->domain))
> -#define VCPU2ONLINE(_v) cpupool_online_cpumask((_v)->domain->cpupool)
> +#define VCPU2ONLINE(_v) cpupool_domain_cpumask((_v)->domain)
>
> static inline void trace_runstate_change(struct vcpu *v, int new_state)
> {
> diff --git a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h
> index 7cc25c6..20af791 100644
> --- a/xen/include/xen/sched-if.h
> +++ b/xen/include/xen/sched-if.h
> @@ -183,9 +183,17 @@ struct cpupool
> atomic_t refcnt;
> };
>
> -#define cpupool_scheduler_cpumask(_pool) \
> - (((_pool) == NULL) ? &cpupool_free_cpus : (_pool)->cpu_valid)
> #define cpupool_online_cpumask(_pool) \
> (((_pool) == NULL) ? &cpu_online_map : (_pool)->cpu_valid)
>
> +static inline cpumask_t* cpupool_domain_cpumask(struct domain *d)
> +{
> + /*
> + * d->cpupool == NULL only for the idle domain, which should
> + * have no interest in calling into this.
> + */
> + ASSERT(d->cpupool != NULL);
> + return cpupool_online_cpumask(d->cpupool);
> +}
It's a bit strange to assert that d->cpupool != NULL, and then call a
macro whose return value only depends on whether d->cpupool is NULL or
not. Why not just return d->cpupool->cpu_valid?
Thanks for tracking these down, BTW!
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |