summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2021-03-05 13:19:57 +0100
committerRichard Weinberger <richard@nod.at>2021-06-17 21:44:52 +0200
commita5ab7c8467f1934236e33d5fa1c3c6de831a6648 (patch)
tree591c8b59933b4aa0be98cc999cc9f2f018f7170d
parentd6b399a0e02a9063a5812af6cb8b657a4a1ecf68 (diff)
downloadlinux-a5ab7c8467f1934236e33d5fa1c3c6de831a6648.tar.gz
linux-a5ab7c8467f1934236e33d5fa1c3c6de831a6648.tar.bz2
linux-a5ab7c8467f1934236e33d5fa1c3c6de831a6648.zip
um: irqs: allow invoking time-travel handler multiple times
If we happen to get multiple messages while IRQS are already suspended, we still need to handle them, since otherwise the simulation blocks. Remove the "prevent nesting" part, time_travel_add_irq_event() will deal with being called multiple times just fine. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Richard Weinberger <richard@nod.at>
-rw-r--r--arch/um/kernel/irq.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index 1c448ea4729e..f3f19da7b876 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -101,10 +101,12 @@ static bool irq_do_timetravel_handler(struct irq_entry *entry,
if (!reg->timetravel_handler)
return false;
- /* prevent nesting - we'll get it again later when we SIGIO ourselves */
- if (reg->pending_on_resume)
- return true;
-
+ /*
+ * Handle all messages - we might get multiple even while
+ * interrupts are already suspended, due to suspend order
+ * etc. Note that time_travel_add_irq_event() will not add
+ * an event twice, if it's pending already "first wins".
+ */
reg->timetravel_handler(reg->irq, entry->fd, reg->id, &reg->event);
if (!reg->event.pending)