• Marc Zyngier's avatar
    KVM: arm/arm64: vgic: Allow more than 256 vcpus for KVM_IRQ_LINE · 92f35b75
    Marc Zyngier authored
    While parts of the VGIC support a large number of vcpus (we
    bravely allow up to 512), other parts are more limited.
    
    One of these limits is visible in the KVM_IRQ_LINE ioctl, which
    only allows 256 vcpus to be signalled when using the CPU or PPI
    types. Unfortunately, we've cornered ourselves badly by allocating
    all the bits in the irq field.
    
    Since the irq_type subfield (8 bit wide) is currently only taking
    the values 0, 1 and 2 (and we have been careful not to allow anything
    else), let's reduce this field to only 4 bits, and allocate the
    remaining 4 bits to a vcpu2_index, which acts as a multiplier:
    
      vcpu_id = 256 * vcpu2_index + vcpu_index
    
    With that, and a new capability (KVM_CAP_ARM_IRQ_LINE_LAYOUT_2)
    allowing this to be discovered, it becomes possible to inject
    PPIs to up to 4096 vcpus. But please just don't.
    
    Whilst we're there, add a clarification about the use of KVM_IRQ_LINE
    on arm, which is not completely conditionned by KVM_CAP_IRQCHIP.
    Reported-by: default avatarZenghui Yu <yuzenghui@huawei.com>
    Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
    Reviewed-by: default avatarZenghui Yu <yuzenghui@huawei.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    92f35b75
kvm.h 10.8 KB