Commit 263e954a authored by Yury Norov's avatar Yury Norov Committed by Thomas Bogendoerfer
Browse files

mips: kvm: simplify kvm_mips_deliver_interrupts()



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: default avatarYury Norov <yury.norov@gmail.com>
Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
parent 4ebb6c95
Loading
Loading
Loading
Loading
+2 −18
Original line number Diff line number Diff line
@@ -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)