• Marc Zyngier's avatar
    irqchip/gic-v3-its: Add device proxy for VPE management if !DirectLpi · 20b3d54e
    Marc Zyngier authored
    When we don't have the DirectLPI feature, we must work around the
    architecture shortcomings to be able to perform the required
    maintenance (interrupt masking, clearing and injection).
    
    For this, we create a fake device whose sole purpose is to
    provide a way to issue commands as if we were dealing with LPIs
    coming from that device (while they actually originate from
    the ITS). This fake device doesn't have LPIs allocated to it,
    but instead uses the VPE LPIs.
    
    Of course, this could be a real bottleneck, and a naive
    implementation would require 6 commands to issue an invalidation.
    
    Instead, let's allocate at least one event per physical CPU
    (rounded up to the next power of 2), and opportunistically
    map the VPE doorbell to an event. This doorbell will be mapped
    until we roll over and need to reallocate this slot.
    
    This ensures that most of the time, we only need 2 commands
    to issue an INV, INT or CLEAR, making the performance a lot
    better, given that we always issue a CLEAR on entry, and
    an INV on each side of a trapped WFI.
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    20b3d54e
irq-gic-v3-its.c 77.5 KB