[Xen-devel] [PATCH] credit: generalize __vcpu_has_soft_affinity()
As pointed out in the discussion of the patch at http://lists.xenproject.org/archives/html/xen-devel/2015-02/msg03256.html generalizing the conditions here means code elsewhere doesn't need to take into consideration internals of how load balancing in the credit scheduler works. Signed-off-by: Jan Beulich jbeul...@suse.com --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -292,11 +292,9 @@ __runq_remove(struct csched_vcpu *svc) static inline int __vcpu_has_soft_affinity(const struct vcpu *vc, const cpumask_t *mask) { -if ( cpumask_full(vc-cpu_soft_affinity) - || !cpumask_intersects(vc-cpu_soft_affinity, mask) ) -return 0; - -return 1; +return !cpumask_subset(cpu_online_map, vc-cpu_soft_affinity) + !cpumask_subset(vc-cpu_soft_affinity, vc-cpu_hard_affinity) + cpumask_intersects(vc-cpu_soft_affinity, mask); } /* credit: generalize __vcpu_has_soft_affinity() As pointed out in the discussion of the patch at http://lists.xenproject.org/archives/html/xen-devel/2015-02/msg03256.html generalizing the conditions here means code elsewhere doesn't need to take into consideration internals of how load balancing in the credit scheduler works. Signed-off-by: Jan Beulich jbeul...@suse.com --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -292,11 +292,9 @@ __runq_remove(struct csched_vcpu *svc) static inline int __vcpu_has_soft_affinity(const struct vcpu *vc, const cpumask_t *mask) { -if ( cpumask_full(vc-cpu_soft_affinity) - || !cpumask_intersects(vc-cpu_soft_affinity, mask) ) -return 0; - -return 1; +return !cpumask_subset(cpu_online_map, vc-cpu_soft_affinity) + !cpumask_subset(vc-cpu_soft_affinity, vc-cpu_hard_affinity) + cpumask_intersects(vc-cpu_soft_affinity, mask); } /* ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH] credit: generalize __vcpu_has_soft_affinity()
On Wed, 2015-03-04 at 09:16 +, Jan Beulich wrote: --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -292,11 +292,9 @@ __runq_remove(struct csched_vcpu *svc) static inline int __vcpu_has_soft_affinity(const struct vcpu *vc, const cpumask_t *mask) { -if ( cpumask_full(vc-cpu_soft_affinity) - || !cpumask_intersects(vc-cpu_soft_affinity, mask) ) -return 0; - -return 1; +return !cpumask_subset(cpu_online_map, vc-cpu_soft_affinity) This can use VCPU2ONLINE(vc). Or do you think the impact of one more if (the ?: in cpupool_online_cpumask) would be too much? + !cpumask_subset(vc-cpu_soft_affinity, vc-cpu_hard_affinity) + cpumask_intersects(vc-cpu_soft_affinity, mask); } Regards, Dario signature.asc Description: This is a digitally signed message part ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH] credit: generalize __vcpu_has_soft_affinity()
On 04.03.15 at 13:08, dario.faggi...@citrix.com wrote: On Wed, 2015-03-04 at 09:16 +, Jan Beulich wrote: --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -292,11 +292,9 @@ __runq_remove(struct csched_vcpu *svc) static inline int __vcpu_has_soft_affinity(const struct vcpu *vc, const cpumask_t *mask) { -if ( cpumask_full(vc-cpu_soft_affinity) - || !cpumask_intersects(vc-cpu_soft_affinity, mask) ) -return 0; - -return 1; +return !cpumask_subset(cpu_online_map, vc-cpu_soft_affinity) This can use VCPU2ONLINE(vc). Or do you think the impact of one more if (the ?: in cpupool_online_cpumask) would be too much? No, I think that would be fine. I simply wasn't aware of the construct. v2 soon to come. Jan ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel