summaryrefslogtreecommitdiffstats
path: root/arch/um/kernel
diff options
context:
space:
mode:
authorJouni Malinen2019-05-06 14:39:35 +0200
committerRichard Weinberger2019-07-02 23:26:52 +0200
commitbebe4681d0e7e1be2608282dc86645728bc7f623 (patch)
treee4324cb2fdcc0aedd27fe3bd0ec7e1881fb9869b /arch/um/kernel
parentLinux 5.2-rc6 (diff)
downloadkernel-qcow2-linux-bebe4681d0e7e1be2608282dc86645728bc7f623.tar.gz
kernel-qcow2-linux-bebe4681d0e7e1be2608282dc86645728bc7f623.tar.xz
kernel-qcow2-linux-bebe4681d0e7e1be2608282dc86645728bc7f623.zip
um: Fix IRQ controller regression on console read
The conversion of UML to use epoll based IRQ controller claimed that clone_one_chan() can safely call um_free_irq() while starting to ignore the delay_free_irq parameter that explicitly noted that the IRQ cannot be freed because this is being called from chan_interrupt(). This resulted in free_irq() getting called in interrupt context ("Trying to free IRQ 6 from IRQ context!"). Fix this by restoring previously used delay_free_irq processing. Fixes: ff6a17989c08 ("Epoll based IRQ controller") Signed-off-by: Jouni Malinen <j@w1.fi> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/kernel')
-rw-r--r--arch/um/kernel/irq.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index 598d7b3d9355..b40dac71e25b 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -21,6 +21,8 @@
#include <irq_user.h>
+extern void free_irqs(void);
+
/* When epoll triggers we do not know why it did so
* we can also have different IRQs for read and write.
* This is why we keep a small irq_fd array for each fd -
@@ -100,6 +102,8 @@ void sigio_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs)
}
}
}
+
+ free_irqs();
}
static int assign_epoll_events_to_irq(struct irq_entry *irq_entry)