]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mips: kvm: simplify kvm_mips_deliver_interrupts()
authorYury Norov <yury.norov@gmail.com>
Wed, 16 Jul 2025 17:29:17 +0000 (13:29 -0400)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Mon, 1 Dec 2025 09:10:58 +0000 (10:10 +0100)
The function opencodes for_each_set_bit() macro, which makes it bulky.
Using the proper API makes all the housekeeping code go away.

Signed-off-by: Yury Norov <yury.norov@gmail.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/kvm/interrupt.c

index 0277942279ea2a82f3c9dd41ad3b5db94491ac23..895a6f1781fd8aa6e9db005f9f52b1824af1d62c 100644 (file)
@@ -27,27 +27,11 @@ void kvm_mips_deliver_interrupts(struct kvm_vcpu *vcpu, u32 cause)
        unsigned long *pending_clr = &vcpu->arch.pending_exceptions_clr;
        unsigned int priority;
 
-       if (!(*pending) && !(*pending_clr))
-               return;
-
-       priority = __ffs(*pending_clr);
-       while (priority <= MIPS_EXC_MAX) {
+       for_each_set_bit(priority, pending_clr, MIPS_EXC_MAX + 1)
                kvm_mips_callbacks->irq_clear(vcpu, priority, cause);
 
-               priority = find_next_bit(pending_clr,
-                                        BITS_PER_BYTE * sizeof(*pending_clr),
-                                        priority + 1);
-       }
-
-       priority = __ffs(*pending);
-       while (priority <= MIPS_EXC_MAX) {
+       for_each_set_bit(priority, pending, MIPS_EXC_MAX + 1)
                kvm_mips_callbacks->irq_deliver(vcpu, priority, cause);
-
-               priority = find_next_bit(pending,
-                                        BITS_PER_BYTE * sizeof(*pending),
-                                        priority + 1);
-       }
-
 }
 
 int kvm_mips_pending_timer(struct kvm_vcpu *vcpu)