|
@@ -1012,6 +1012,12 @@ static int compute_pending_for_cpu(struct kvm_vcpu *vcpu)
|
|
|
pend_percpu = vcpu->arch.vgic_cpu.pending_percpu;
|
|
|
pend_shared = vcpu->arch.vgic_cpu.pending_shared;
|
|
|
|
|
|
+ if (!dist->enabled) {
|
|
|
+ bitmap_zero(pend_percpu, VGIC_NR_PRIVATE_IRQS);
|
|
|
+ bitmap_zero(pend_shared, nr_shared);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
pending = vgic_bitmap_get_cpu_map(&dist->irq_pending, vcpu_id);
|
|
|
enabled = vgic_bitmap_get_cpu_map(&dist->irq_enabled, vcpu_id);
|
|
|
bitmap_and(pend_percpu, pending, enabled, VGIC_NR_PRIVATE_IRQS);
|
|
@@ -1039,11 +1045,6 @@ void vgic_update_state(struct kvm *kvm)
|
|
|
struct kvm_vcpu *vcpu;
|
|
|
int c;
|
|
|
|
|
|
- if (!dist->enabled) {
|
|
|
- set_bit(0, dist->irq_pending_on_cpu);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
kvm_for_each_vcpu(c, vcpu, kvm) {
|
|
|
if (compute_pending_for_cpu(vcpu))
|
|
|
set_bit(c, dist->irq_pending_on_cpu);
|