]>
x86/mm: Improve bitops in vcpumask_to_pcpumask() master staging
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 29 May 2024 13:58:57 +0000 (14:58 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 2 May 2025 14:04:41 +0000 (15:04 +0100)
This loop is for_each_set_bit() in disguise.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/mm.c

index 0b787ba55312796fb1f650ffce237daaacb35982..66c15a3c864fbe27ede3db833eeb2123a9e606ed 100644 (file)
@@ -3411,7 +3411,7 @@ int new_guest_cr3(mfn_t mfn)
 static int vcpumask_to_pcpumask(
     struct domain *d, XEN_GUEST_HANDLE_PARAM(const_void) bmap, cpumask_t *pmask)
 {
-    unsigned int vcpu_id, vcpu_bias, offs;
+    unsigned int vcpu_bias, offs;
     unsigned long vmask;
     struct vcpu *v;
     bool is_native = !is_pv_32bit_domain(d);
@@ -3432,12 +3432,10 @@ static int vcpumask_to_pcpumask(
             return -EFAULT;
         }
 
-        while ( vmask )
+        for_each_set_bit ( vcpu_id, vmask )
         {
             unsigned int cpu;
 
-            vcpu_id = ffsl(vmask) - 1;
-            vmask &= ~(1UL << vcpu_id);
             vcpu_id += vcpu_bias;
             if ( (vcpu_id >= d->max_vcpus) )
                 return 0;