On Thu, 28 Apr 2016 17:45:36 +0100 Andre Przywara <andre.przywara@xxxxxxx> wrote: > From: Marc Zyngier <marc.zyngier@xxxxxxx> > > Processing maintenance interrupts and accessing the list registers > are dependent on the host's GIC version. > Introduce vgic-v2.c to contain GICv2 specific functions. > Implement the GICv2 specific code for syncing the emulation state > into the VGIC registers. > > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> > Signed-off-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> > Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx> > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> > --- > Changelog RFC..v1: > - remove explicit LR_STATE clearing on maintenance interrupt handling > - improve documentation for vgic_v2_populate_lr() > - remove WARN_ON on non-edge IRQs in maintenance interrupts > - simplify multi-CPU source SGI handling > > Changelog v1 .. v2: > - inject the IRQ priority into the list register > > include/linux/irqchip/arm-gic.h | 1 + > virt/kvm/arm/vgic/vgic-v2.c | 178 ++++++++++++++++++++++++++++++++++++++++ > virt/kvm/arm/vgic/vgic.c | 19 ++--- > virt/kvm/arm/vgic/vgic.h | 6 ++ > 4 files changed, 194 insertions(+), 10 deletions(-) > create mode 100644 virt/kvm/arm/vgic/vgic-v2.c > [...] > @@ -441,14 +447,12 @@ static int compute_ap_list_depth(struct kvm_vcpu *vcpu) > static void vgic_flush_lr_state(struct kvm_vcpu *vcpu) > { > struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; > - struct vgic_dist *dist = &vcpu->kvm->arch.vgic; > - u32 model = dist->vgic_model; > struct vgic_irq *irq; > int count = 0; > > DEBUG_SPINLOCK_BUG_ON(!spin_is_locked(vgic_cpu->ap_list_lock)); > > - if (unlikely(!dist->enabled)) > + if (unlikely(!vcpu->kvm->arch.vgic.enabled)) > goto out_clean; > > if (compute_ap_list_depth(vcpu) > kvm_vgic_global_state.nr_lr) { > @@ -466,14 +470,9 @@ static void vgic_flush_lr_state(struct kvm_vcpu *vcpu) > * If we get an SGI with multiple sources, try to get > * them in all at once. > */ > - if (model == KVM_DEV_TYPE_ARM_VGIC_V2 && > - vgic_irq_is_sgi(irq->intid)) { > - while (irq->source && > - count < kvm_vgic_global_state.nr_lr) > - vgic_populate_lr(vcpu, irq, count++); > - } else { > + do { > vgic_populate_lr(vcpu, irq, count++); > - } > + } while (irq->source && count < kvm_vgic_global_state.nr_lr); > > next: Most, if not all of the changes in this function should be folded in the previous patch, as we only have generic code in this file (this looks like a leftover from an earlier rework). Thanks, M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html