• I
    xen: events: allocate GSIs and dynamic IRQs from separate IRQ ranges. · 89911501
    Ian Campbell 提交于
    There are three cases which we need to care about, PV guest, PV domain
    0 and HVM guest.
    
    The PV guest case is simple since it has no access to ACPI or real
    APICs and therefore has no GSIs therefore we simply dynamically
    allocate all IRQs. The potentially interesting case here is PIRQ type
    event channels associated with passed through PCI devices. However
    even in this case the guest has no direct interaction with the
    physical GSI since that happens in the PCI backend.
    
    The PV domain 0 and HVM guest cases are actually the same. In domain 0
    case the kernel sees the host ACPI and GSIs (although it only sees the
    APIC indirectly via the hypervisor) and in the HVM guest case it sees
    the virtualised ACPI and emulated APICs. In these cases we start
    allocating dynamic IRQs at nr_irqs_gsi so that they cannot clash with
    any GSI.
    
    Currently xen_allocate_irq_dynamic starts at nr_irqs and works
    backwards looking for a free IRQ in order to (try and) avoid clashing
    with GSIs used in domain 0 and in HVM guests. This change avoids that
    although we retain the behaviour of allowing dynamic IRQs to encroach
    on the GSI range if no suitable IRQs are available since a future IRQ
    clash is deemed preferable to failure right now.
    Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
    Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
    Cc: Jeremy Fitzhardinge <jeremy@goop.org>
    89911501
events.c 36.5 KB