• Marc Zyngier's avatar
    KVM: arm64: vgic: Allocate private interrupts on demand · 03b3d00a
    Marc Zyngier authored
    Private interrupts are currently part of the CPU interface structure
    that is part of each and every vcpu we create.
    
    Currently, we have 32 of them per vcpu, resulting in a per-vcpu array
    that is just shy of 4kB. On its own, that's no big deal, but it gets
    in the way of other things:
    
    - each vcpu gets mapped at EL2 on nVHE/hVHE configurations. This
      requires memory that is physically contiguous. However, the EL2
      code has no purpose looking at the interrupt structures and
      could do without them being mapped.
    
    - supporting features such as EPPIs, which extend the number of
      private interrupts past the 32 limit would make the array
      even larger, even for VMs that do not use the EPPI feature.
    
    Address these issues by moving the private interrupt array outside
    of the vcpu, and replace it with a simple pointer. We take this
    opportunity to make it obvious what gets initialised when, as
    that path was remarkably opaque, and tighten the locking.
    Reviewed-by: default avatarOliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20240502154545.3012089-1-maz@kernel.orgSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
    03b3d00a
arm_vgic.h 11.6 KB