Re: [PATCH v2 3/4] KVM: arm64: vgic: Tear down what vgic_init() created when it fails
From: Fuad Tabba
Date: Tue Aug 25 2026 - 05:49:38 EST
Hi Yuan,
On Tue, 25 Aug 2026 at 10:18, Yao Yuan <yaoyuan@xxxxxxxxxxxxxxxxx> wrote:
...
> > diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c
> > index 4012df6002ea6..7493fded53acc 100644
> > --- a/arch/arm64/kvm/vgic/vgic-init.c
> > +++ b/arch/arm64/kvm/vgic/vgic-init.c
> > @@ -462,7 +462,7 @@ int vgic_init(struct kvm *kvm)
> > if (vgic_supports_direct_irqs(kvm)) {
> > ret = vgic_v4_init(kvm);
> > if (ret)
>
> Hi Tabba,
>
> > - return ret;
> > + goto out_teardown;
>
> The vigc_v4_init already called vgic_v4_teardown() in error path,
> thus I think just free dist->spis is enough yet ?
vgic_v4_init() unwinds its own state on every error return, so
vgic_v4_teardown() is a no-op there and freeing the SPI array would be
enough. I'll fold the label split in if I respin.
Thanks for the reviews!
/fuad
>
> > }
> > } else {
> > ret = vgic_v5_init(kvm);
> > @@ -475,12 +475,19 @@ int vgic_init(struct kvm *kvm)
> >
> > ret = kvm_vgic_setup_default_irq_routing(kvm);
> > if (ret)
> > - return ret;
> > + goto out_teardown;
> >
> > vgic_debug_init(kvm);
> > dist->initialized = true;
> >
> > return 0;
> > +
> > +out_teardown:
> > + vgic_v4_teardown(kvm);
> > + kfree(dist->spis);
> > + dist->spis = NULL;
> > +
> > + return ret;
> > }
> >
> > static void kvm_vgic_dist_destroy(struct kvm *kvm)
> > --
> > 2.39.5
> >