KVM commits to a particular sizing of SPIs when the vgic is initialized,
which is before the point a vgic becomes ready. On top of that, KVM
supplies a default amount of SPIs should userspace not explicitly
configure this.
As such, the check for vgic_ready() in the handling of
KVM_DEV_ARM_VGIC_GRP_NR_IRQS is completely wrong, and testing if nr_spis
is nonzero is sufficient for preventing userspace from playing games
with us.
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20241017001947.2707312-2-oliver.upton@linux.dev
Signed-off-by: Marc Zyngier <maz@kernel.org>
 
 
                mutex_lock(&dev->kvm->arch.config_lock);
 
-               if (vgic_ready(dev->kvm) || dev->kvm->arch.vgic.nr_spis)
+               /*
+                * Either userspace has already configured NR_IRQS or
+                * the vgic has already been initialized and vgic_init()
+                * supplied a default amount of SPIs.
+                */
+               if (dev->kvm->arch.vgic.nr_spis)
                        ret = -EBUSY;
                else
                        dev->kvm->arch.vgic.nr_spis =