mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 18:16:39 +07:00
[PATCH] genirq: x86_64 irq: Reenable migrating irqs to other cpus
In the latest changes the code for migrating x86_64 irqs was dropped. This reads it in a fashion that will work even if we change the vector on level triggered irqs when we migrate them. [akpm@osdl.org: build fix] Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Rajesh Shah <rajesh.shah@intel.com> Cc: Andi Kleen <ak@muc.de> Cc: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com> Cc: "Luck, Tony" <tony.luck@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
e7b946e98a
commit
0be6652f1e
@ -1254,18 +1254,48 @@ static int ioapic_retrigger_vector(unsigned int vector)
|
||||
* races.
|
||||
*/
|
||||
|
||||
static void ack_apic(unsigned int vector)
|
||||
static void ack_apic(unsigned int irq)
|
||||
{
|
||||
ack_APIC_irq();
|
||||
}
|
||||
|
||||
static void ack_apic_edge(unsigned int irq)
|
||||
{
|
||||
move_native_irq(irq);
|
||||
ack_APIC_irq();
|
||||
}
|
||||
|
||||
static void ack_apic_level(unsigned int irq)
|
||||
{
|
||||
int do_unmask_irq = 0;
|
||||
|
||||
#if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)
|
||||
/* If we are moving the irq we need to mask it */
|
||||
if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) {
|
||||
do_unmask_irq = 1;
|
||||
mask_IO_APIC_irq(irq);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We must acknowledge the irq before we move it or the acknowledge will
|
||||
* not propogate properly.
|
||||
*/
|
||||
ack_APIC_irq();
|
||||
|
||||
/* Now we can move and renable the irq */
|
||||
move_masked_irq(irq);
|
||||
if (unlikely(do_unmask_irq))
|
||||
unmask_IO_APIC_irq(irq);
|
||||
}
|
||||
|
||||
static struct irq_chip ioapic_chip __read_mostly = {
|
||||
.name = "IO-APIC",
|
||||
.startup = startup_ioapic_vector,
|
||||
.mask = mask_ioapic_vector,
|
||||
.unmask = unmask_ioapic_vector,
|
||||
.ack = ack_apic,
|
||||
.eoi = ack_apic,
|
||||
.ack = ack_apic_edge,
|
||||
.eoi = ack_apic_level,
|
||||
#ifdef CONFIG_SMP
|
||||
.set_affinity = set_ioapic_affinity_vector,
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user