Hi Ricardo, On 4/27/22 20:48, Ricardo Koller wrote: > Failed ITS restores should clean up all state restored until the > failure. There is some cleanup already present when failing to restore > some tables, but it's not complete. Add the missing cleanup. > > Note that this changes the behavior in case of a failed restore of the > device tables. I assume this is acceptable > > restore ioctl: > 1. restore collection tables > 2. restore device tables > > With this commit, failures in 2. clean up everything created so far, > including state created by 1. > > Signed-off-by: Ricardo Koller <ricarkol@xxxxxxxxxx> > --- > arch/arm64/kvm/vgic/vgic-its.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/kvm/vgic/vgic-its.c b/arch/arm64/kvm/vgic/vgic-its.c > index 86c26aaa8275..c35534d7393a 100644 > --- a/arch/arm64/kvm/vgic/vgic-its.c > +++ b/arch/arm64/kvm/vgic/vgic-its.c > @@ -2222,8 +2222,10 @@ static int vgic_its_restore_ite(struct vgic_its *its, u32 event_id, > vcpu = kvm_get_vcpu(kvm, collection->target_addr); > > irq = vgic_add_lpi(kvm, lpi_id, vcpu); > - if (IS_ERR(irq)) > + if (IS_ERR(irq)) { > + its_free_ite(kvm, ite); > return PTR_ERR(irq); > + } > ite->irq = irq; > > return offset; > @@ -2491,6 +2493,9 @@ static int vgic_its_restore_device_tables(struct vgic_its *its) > if (ret > 0) > ret = 0; > > + if (ret < 0) > + vgic_its_free_device_list(its->dev->kvm, its); > + > return ret; > } > > @@ -2617,6 +2622,9 @@ static int vgic_its_restore_collection_table(struct vgic_its *its) > read += cte_esz; > } > > + if (ret < 0) > + vgic_its_free_collection_list(its->dev->kvm, its); > + > return ret; > } > > @@ -2648,7 +2656,10 @@ static int vgic_its_restore_tables_v0(struct vgic_its *its) > if (ret) > return ret; > > - return vgic_its_restore_device_tables(its); > + ret = vgic_its_restore_device_tables(its); > + if (ret) > + vgic_its_free_collection_list(its->dev->kvm, its); > + return ret; > } > > static int vgic_its_commit_v0(struct vgic_its *its) Looks good to me. Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> Eric _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm