[Xen-devel] [PATCH] credit: generalize __vcpu_has_soft_affinity()

2015-03-04 Thread Jan Beulich
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()

2015-03-04 Thread Dario Faggioli
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()

2015-03-04 Thread Jan Beulich
 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