Re: [PATCH v2 3/4] KVM: arm64: vgic: Tear down what vgic_init() created when it fails

Fuad Tabba <[email protected]>
Newsgroups org.infradead.lists.linux-arm-kernel,dev.linux.lists.kvmarm,org.kernel.vger.linux-kernel
Message-ID <CA+EHjTyYkz5=BV7RfJK_uUuuRunsfSNWmNNrkJ8NdsR_i5NB2g@mail.gmail.com>
Hi Yuan,

On Tue, 25 Aug 2026 at 10:18, Yao Yuan <[email protected]> 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
> >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.