[PATCH] KVM: x86: use assign_bit() where applicable

From: Peng Fan (OSS)

Date: Sat Sep 19 2026 - 22:30:08 EST


From: Peng Fan <peng.fan@xxxxxxx>

Convert open-coded if/else with set_bit/clear_bit and their
non-atomic __set_bit/__clear_bit variants to the assign_bit/__assign_bit
API.

Done with Coccinelle semantic patch:
// set_bit -> clear_bit => assign_bit

@@
expression cond, bit, addr;
@@

-if (cond)
- set_bit(bit, addr);
-else
- clear_bit(bit, addr);
+assign_bit(bit, addr, cond);

// clear_bit -> set_bit => assign_bit

@@
expression cond, bit, addr;
@@

-if (cond)
- clear_bit(bit, addr);
-else
- set_bit(bit, addr);
+assign_bit(bit, addr, !cond);

// __set_bit -> __clear_bit => __assign_bit

@@
expression cond, bit, addr;
@@

-if (cond)
- __set_bit(bit, addr);
-else
- __clear_bit(bit, addr);
+__assign_bit(bit, addr, cond);

// __clear_bit -> __set_bit => __assign_bit

@@
expression cond, bit, addr;
@@

-if (cond)
- __clear_bit(bit, addr);
-else
- __set_bit(bit, addr);
+__assign_bit(bit, addr, !cond);

Signed-off-by: Peng Fan <peng.fan@xxxxxxx>
---
arch/x86/kvm/hyperv.c | 12 ++++--------
arch/x86/kvm/svm/pmu.c | 6 ++----
arch/x86/kvm/x86.c | 11 +++--------
3 files changed, 9 insertions(+), 20 deletions(-)

diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
index 8d2669d8ef34..c131d9a3c550 100644
--- a/arch/x86/kvm/hyperv.c
+++ b/arch/x86/kvm/hyperv.c
@@ -114,17 +114,13 @@ static void synic_update_vector(struct kvm_vcpu_hv_synic *synic,
if (vector < HV_SYNIC_FIRST_VALID_VECTOR)
return;

- if (synic_has_vector_connected(synic, vector))
- __set_bit(vector, synic->vec_bitmap);
- else
- __clear_bit(vector, synic->vec_bitmap);
+ __assign_bit(vector, synic->vec_bitmap,
+ synic_has_vector_connected(synic, vector));

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);
+ __assign_bit(vector, synic->auto_eoi_bitmap,
+ synic_has_vector_auto_eoi(synic, vector));

auto_eoi_new = !bitmap_empty(synic->auto_eoi_bitmap, 256);

diff --git a/arch/x86/kvm/svm/pmu.c b/arch/x86/kvm/svm/pmu.c
index c18286545a7a..4c13a6345277 100644
--- a/arch/x86/kvm/svm/pmu.c
+++ b/arch/x86/kvm/svm/pmu.c
@@ -169,10 +169,8 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
pmc->eventsel_hw = (data & ~AMD64_EVENTSEL_HOSTONLY) |
AMD64_EVENTSEL_GUESTONLY;

- if (data & AMD64_EVENTSEL_HOST_GUEST_MASK)
- __set_bit(pmc->idx, pmu->pmc_has_mode_specific_enables);
- else
- __clear_bit(pmc->idx, pmu->pmc_has_mode_specific_enables);
+ __assign_bit(pmc->idx, pmu->pmc_has_mode_specific_enables,
+ data & AMD64_EVENTSEL_HOST_GUEST_MASK);

kvm_pmu_request_counter_reprogram(pmc);
}
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index af3ceee714c9..a33ef4ab4e60 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3074,10 +3074,8 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
#endif

if (lapic_in_kernel(vcpu)) {
- if (events->smi.latched_init)
- set_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
- else
- clear_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
+ assign_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events,
+ events->smi.latched_init);
}
}

@@ -7224,10 +7222,7 @@ static void set_or_clear_apicv_inhibit(unsigned long *inhibits,

BUILD_BUG_ON(ARRAY_SIZE(apicv_inhibits) != NR_APICV_INHIBIT_REASONS);

- if (set)
- __set_bit(reason, inhibits);
- else
- __clear_bit(reason, inhibits);
+ __assign_bit(reason, inhibits, set);

trace_kvm_apicv_inhibit_changed(reason, set, *inhibits);
}
--
2.51.0