Skip to content

Commit

Permalink
xen/events: Always allocate legacy interrupts on PV guests
Browse files Browse the repository at this point in the history
commit b4ff838 upstream.

After commit 8c058b0 ("x86/irq: Probe for PIC presence before
allocating descs for legacy IRQs") early_irq_init() will no longer
preallocate descriptors for legacy interrupts if PIC does not
exist, which is the case for Xen PV guests.

Therefore we may need to allocate those descriptors ourselves.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Boris Ostrovsky authored and Greg Kroah-Hartman committed Dec 9, 2015
1 parent b2cb7af commit a8adab1
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
5 changes: 5 additions & 0 deletions arch/arm/include/asm/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ extern void arch_trigger_all_cpu_backtrace(bool);
#define arch_trigger_all_cpu_backtrace(x) arch_trigger_all_cpu_backtrace(x)
#endif

static inline int nr_legacy_irqs(void)
{
return NR_IRQS_LEGACY;
}

#endif

#endif
Expand Down
5 changes: 5 additions & 0 deletions arch/arm64/include/asm/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,9 @@ static inline void acpi_irq_init(void)
}
#define acpi_irq_init acpi_irq_init

static inline int nr_legacy_irqs(void)
{
return 0;
}

#endif
5 changes: 3 additions & 2 deletions drivers/xen/events/events_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include <asm/irq.h>
#include <asm/idle.h>
#include <asm/io_apic.h>
#include <asm/i8259.h>
#include <asm/xen/pci.h>
#include <xen/page.h>
#endif
Expand Down Expand Up @@ -420,7 +421,7 @@ static int __must_check xen_allocate_irq_gsi(unsigned gsi)
return xen_allocate_irq_dynamic();

/* Legacy IRQ descriptors are already allocated by the arch. */
if (gsi < NR_IRQS_LEGACY)
if (gsi < nr_legacy_irqs())
irq = gsi;
else
irq = irq_alloc_desc_at(gsi, -1);
Expand All @@ -446,7 +447,7 @@ static void xen_free_irq(unsigned irq)
kfree(info);

/* Legacy IRQ descriptors are managed by the arch. */
if (irq < NR_IRQS_LEGACY)
if (irq < nr_legacy_irqs())
return;

irq_free_desc(irq);
Expand Down

0 comments on commit a8adab1

Please sign in to comment.