On 07/11/17 20:28, Auger Eric wrote: > Hi Marc, > > On 27/10/2017 16:28, Marc Zyngier wrote: >> When freeing an LPI (on a DISCARD command, for example), we need >> to unmap the VLPI down to the physical ITS level. >> >> Acked-by: Christoffer Dall <cdall@xxxxxxxxxx> >> Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> >> --- >> virt/kvm/arm/vgic/vgic-its.c | 6 +++++- >> 1 file changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c >> index b2a678d131d0..c9b1c0967426 100644 >> --- a/virt/kvm/arm/vgic/vgic-its.c >> +++ b/virt/kvm/arm/vgic/vgic-its.c >> @@ -628,8 +628,12 @@ static void its_free_ite(struct kvm *kvm, struct its_ite *ite) >> list_del(&ite->ite_list); >> >> /* This put matches the get in vgic_add_lpi. */ >> - if (ite->irq) >> + if (ite->irq) { >> + if (ite->irq->hw) >> + WARN_ON(its_unmap_vlpi(ite->irq->host_irq)); >> + >> vgic_put_irq(kvm, ite->irq); > You could have put the its_unmap_vlpi() directly in vgic_put_irq which > is meant to decr the ref/release the LPI irq. Do you see this as an issue? I'm trying hard to keep the GICv4 changes local to the ITS code, and not spread it everywhere in the vgic, but I'll happily change it if you spot something that seems wrong. Thanks, M. -- Jazz is not dead. It just smells funny...