]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
LoongArch: KVM: Simplify kvm_deliver_intr()
authorYury Norov (NVIDIA) <yury.norov@gmail.com>
Mon, 21 Jul 2025 01:26:32 +0000 (09:26 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Mon, 21 Jul 2025 01:26:32 +0000 (09:26 +0800)
The function opencodes for_each_set_bit() macro, which makes it bulky.
Using the proper API makes all the housekeeping code going away.

Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Yury Norov (NVIDIA) <yury.norov@gmail.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kvm/interrupt.c

index 4c3f22de4b40a321811947f2ebff47a9e7b45ea6..8462083f030174633966ac2f7950f4d6ea87ba90 100644 (file)
@@ -83,28 +83,11 @@ void kvm_deliver_intr(struct kvm_vcpu *vcpu)
        unsigned long *pending = &vcpu->arch.irq_pending;
        unsigned long *pending_clr = &vcpu->arch.irq_clear;
 
-       if (!(*pending) && !(*pending_clr))
-               return;
-
-       if (*pending_clr) {
-               priority = __ffs(*pending_clr);
-               while (priority <= INT_IPI) {
-                       kvm_irq_clear(vcpu, priority);
-                       priority = find_next_bit(pending_clr,
-                                       BITS_PER_BYTE * sizeof(*pending_clr),
-                                       priority + 1);
-               }
-       }
+       for_each_set_bit(priority, pending_clr, INT_IPI + 1)
+               kvm_irq_clear(vcpu, priority);
 
-       if (*pending) {
-               priority = __ffs(*pending);
-               while (priority <= INT_IPI) {
-                       kvm_irq_deliver(vcpu, priority);
-                       priority = find_next_bit(pending,
-                                       BITS_PER_BYTE * sizeof(*pending),
-                                       priority + 1);
-               }
-       }
+       for_each_set_bit(priority, pending, INT_IPI + 1)
+               kvm_irq_deliver(vcpu, priority);
 }
 
 int kvm_pending_timer(struct kvm_vcpu *vcpu)