OSDN Git Service

KVM: x86: replace bitmap_weight with bitmap_empty where appropriate
authorYury Norov <yury.norov@gmail.com>
Sun, 23 Jan 2022 18:38:37 +0000 (10:38 -0800)
committerYury Norov <yury.norov@gmail.com>
Mon, 2 May 2022 13:30:39 +0000 (06:30 -0700)
In some places kvm/hyperv.c code calls bitmap_weight() to check if any bit
of a given bitmap is set. It's better to use bitmap_empty() in that case
because bitmap_empty() stops traversing the bitmap as soon as it finds
first set bit, while bitmap_weight() counts all bits unconditionally.

Signed-off-by: Yury Norov <yury.norov@gmail.com>
Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
arch/x86/kvm/hyperv.c

index 123b677..c964923 100644 (file)
@@ -90,7 +90,7 @@ static void synic_update_vector(struct kvm_vcpu_hv_synic *synic,
 {
        struct kvm_vcpu *vcpu = hv_synic_to_vcpu(synic);
        struct kvm_hv *hv = to_kvm_hv(vcpu->kvm);
-       int auto_eoi_old, auto_eoi_new;
+       bool auto_eoi_old, auto_eoi_new;
 
        if (vector < HV_SYNIC_FIRST_VALID_VECTOR)
                return;
@@ -100,16 +100,16 @@ static void synic_update_vector(struct kvm_vcpu_hv_synic *synic,
        else
                __clear_bit(vector, synic->vec_bitmap);
 
-       auto_eoi_old = bitmap_weight(synic->auto_eoi_bitmap, 256);
+       auto_eoi_old = !bitmap_empty(synic->auto_eoi_bitmap, 256);
 
        if (synic_has_vector_auto_eoi(synic, vector))
                __set_bit(vector, synic->auto_eoi_bitmap);
        else
                __clear_bit(vector, synic->auto_eoi_bitmap);
 
-       auto_eoi_new = bitmap_weight(synic->auto_eoi_bitmap, 256);
+       auto_eoi_new = !bitmap_empty(synic->auto_eoi_bitmap, 256);
 
-       if (!!auto_eoi_old == !!auto_eoi_new)
+       if (auto_eoi_old == auto_eoi_new)
                return;
 
        if (!enable_apicv)