x86/ioapic: Mark legacy vectors at reallocation time
authorThomas Gleixner <tglx@linutronix.de>
Wed, 13 Sep 2017 21:29:33 +0000 (23:29 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 25 Sep 2017 18:51:54 +0000 (20:51 +0200)
When the legacy PIC vectors are taken over by the IO APIC the current
vector assignement code is tricked to reuse the vector by allocating the
apic data in the early boot process. This can be avoided by marking the
allocation as legacy PIC take over. Preparatory patch for further cleanups.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Juergen Gross <jgross@suse.com>
Tested-by: Yu Chen <yu.c.chen@intel.com>
Acked-by: Juergen Gross <jgross@suse.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Alok Kataria <akataria@vmware.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Rui Zhang <rui.zhang@intel.com>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Len Brown <lenb@kernel.org>
Link: https://lkml.kernel.org/r/20170913213154.700501979@linutronix.de
arch/x86/include/asm/irqdomain.h
arch/x86/kernel/apic/io_apic.c

index 1d9091ffa140f01369704cb1d03844665b0d9ae0..73e9c42ce63be1470120e40d80804571d4fd9c8f 100644 (file)
@@ -8,6 +8,7 @@
 enum {
        /* Allocate contiguous CPU vectors */
        X86_IRQ_ALLOC_CONTIGUOUS_VECTORS                = 0x1,
+       X86_IRQ_ALLOC_LEGACY                            = 0x2,
 };
 
 extern struct irq_domain *x86_vector_domain;
index 81f35ae3f884a671f2b07884613bdfb435ff1df4..a4b0c60ab8e1b06fa6966596b9b22ce9dc41a9a8 100644 (file)
@@ -1013,6 +1013,7 @@ static int alloc_isa_irq_from_domain(struct irq_domain *domain,
                                          info->ioapic_pin))
                        return -ENOMEM;
        } else {
+               info->flags |= X86_IRQ_ALLOC_LEGACY;
                irq = __irq_domain_alloc_irqs(domain, irq, 1, node, info, true,
                                              NULL);
                if (irq >= 0) {