[rt] Drop 0013-x86-ioapic-Don-t-let-setaffinity-unmask-threaded-EOI.patch
One part of the patch correspond to df4393424af3 ("x86/ioapic: Prevent inconsistent state when moving an interrupt") in 5.5-rc1 and which got backported to 4.19.92. The other is corresponding to 2579a4eefc04 ("x86/ioapic: Rename misnamed functions") in 5.5-rc1.
This commit is contained in:
parent
88a4ba5bd0
commit
414985d41e
|
@ -831,6 +831,7 @@ linux (4.19.92-1) UNRELEASED; urgency=medium
|
|||
* [rt] Refresh 0199-net-move-xmit_recursion-to-per-task-variable-on-RT.patch
|
||||
(Context changes in 4.19.88)
|
||||
* [rt] Update to 4.19.90-rt35
|
||||
* [rt] Drop 0013-x86-ioapic-Don-t-let-setaffinity-unmask-threaded-EOI.patch
|
||||
|
||||
-- Salvatore Bonaccorso <carnil@debian.org> Sat, 14 Dec 2019 22:00:16 +0100
|
||||
|
||||
|
|
|
@ -1,112 +0,0 @@
|
|||
From fdf9220749a837a83687679c314e53cd434e4ceb Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Tue, 17 Jul 2018 18:25:31 +0200
|
||||
Subject: [PATCH 013/291] x86/ioapic: Don't let setaffinity unmask threaded EOI
|
||||
interrupt too early
|
||||
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.90-rt35.tar.xz
|
||||
|
||||
There is an issue with threaded interrupts which are marked ONESHOT
|
||||
and using the fasteoi handler.
|
||||
|
||||
if (IS_ONESHOT())
|
||||
mask_irq();
|
||||
|
||||
....
|
||||
....
|
||||
|
||||
cond_unmask_eoi_irq()
|
||||
chip->irq_eoi();
|
||||
|
||||
So if setaffinity is pending then the interrupt will be moved and then
|
||||
unmasked, which is wrong as it should be kept masked up to the point where
|
||||
the threaded handler finished. It's not a real problem, the interrupt will
|
||||
just be able to fire before the threaded handler has finished, though the irq
|
||||
masked state will be wrong for a bit.
|
||||
|
||||
The patch below should cure the issue. It also renames the horribly
|
||||
misnomed functions so it becomes clear what they are supposed to do.
|
||||
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
[bigeasy: add the body of the patch, use the same functions in both
|
||||
ifdef paths (spotted by Andy Shevchenko)]
|
||||
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||||
---
|
||||
arch/x86/kernel/apic/io_apic.c | 23 +++++++++++++----------
|
||||
1 file changed, 13 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index ab22eded61d2..91db2ec0c10a 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -1722,19 +1722,20 @@ static bool io_apic_level_ack_pending(struct mp_chip_data *data)
|
||||
return false;
|
||||
}
|
||||
|
||||
-static inline bool ioapic_irqd_mask(struct irq_data *data)
|
||||
+static inline bool ioapic_prepare_move(struct irq_data *data)
|
||||
{
|
||||
/* If we are moving the irq we need to mask it */
|
||||
if (unlikely(irqd_is_setaffinity_pending(data))) {
|
||||
- mask_ioapic_irq(data);
|
||||
+ if (!irqd_irq_masked(data))
|
||||
+ mask_ioapic_irq(data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
-static inline void ioapic_irqd_unmask(struct irq_data *data, bool masked)
|
||||
+static inline void ioapic_finish_move(struct irq_data *data, bool moveit)
|
||||
{
|
||||
- if (unlikely(masked)) {
|
||||
+ if (unlikely(moveit)) {
|
||||
/* Only migrate the irq if the ack has been received.
|
||||
*
|
||||
* On rare occasions the broadcast level triggered ack gets
|
||||
@@ -1763,15 +1764,17 @@ static inline void ioapic_irqd_unmask(struct irq_data *data, bool masked)
|
||||
*/
|
||||
if (!io_apic_level_ack_pending(data->chip_data))
|
||||
irq_move_masked_irq(data);
|
||||
- unmask_ioapic_irq(data);
|
||||
+ /* If the irq is masked in the core, leave it */
|
||||
+ if (!irqd_irq_masked(data))
|
||||
+ unmask_ioapic_irq(data);
|
||||
}
|
||||
}
|
||||
#else
|
||||
-static inline bool ioapic_irqd_mask(struct irq_data *data)
|
||||
+static inline bool ioapic_prepare_move(struct irq_data *data)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
-static inline void ioapic_irqd_unmask(struct irq_data *data, bool masked)
|
||||
+static inline void ioapic_finish_move(struct irq_data *data, bool moveit)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
@@ -1780,11 +1783,11 @@ static void ioapic_ack_level(struct irq_data *irq_data)
|
||||
{
|
||||
struct irq_cfg *cfg = irqd_cfg(irq_data);
|
||||
unsigned long v;
|
||||
- bool masked;
|
||||
+ bool moveit;
|
||||
int i;
|
||||
|
||||
irq_complete_move(cfg);
|
||||
- masked = ioapic_irqd_mask(irq_data);
|
||||
+ moveit = ioapic_prepare_move(irq_data);
|
||||
|
||||
/*
|
||||
* It appears there is an erratum which affects at least version 0x11
|
||||
@@ -1839,7 +1842,7 @@ static void ioapic_ack_level(struct irq_data *irq_data)
|
||||
eoi_ioapic_pin(cfg->vector, irq_data->chip_data);
|
||||
}
|
||||
|
||||
- ioapic_irqd_unmask(irq_data, masked);
|
||||
+ ioapic_finish_move(irq_data, moveit);
|
||||
}
|
||||
|
||||
static void ioapic_ir_ack_level(struct irq_data *irq_data)
|
||||
--
|
||||
2.24.0
|
||||
|
|
@ -10,7 +10,6 @@
|
|||
0010-crypto-caam-qi-simplify-CGR-allocation-freeing.patch
|
||||
0011-sched-fair-Robustify-CFS-bandwidth-timer-locking.patch
|
||||
0012-arm-Convert-arm-boot_lock-to-raw.patch
|
||||
0013-x86-ioapic-Don-t-let-setaffinity-unmask-threaded-EOI.patch
|
||||
0014-cgroup-use-irqsave-in-cgroup_rstat_flush_locked.patch
|
||||
0015-fscache-initialize-cookie-hash-table-raw-spinlocks.patch
|
||||
0016-Drivers-hv-vmbus-include-header-for-get_irq_regs.patch
|
||||
|
|
Loading…
Reference in New Issue