git: 0fcd9be111dd - main - gpioaei: mark the AEI ithread as sleepable
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 21 Apr 2025 16:28:33 UTC
The branch main has been updated by emaste:
URL: https://cgit.FreeBSD.org/src/commit/?id=0fcd9be111dd44d12a09805791a5597567602f8e
commit 0fcd9be111dd44d12a09805791a5597567602f8e
Author: Ahmad Khalifa <ahmadkhalifa570@gmail.com>
AuthorDate: 2025-03-31 15:13:30 +0000
Commit: Ed Maste <emaste@FreeBSD.org>
CommitDate: 2025-04-21 16:28:14 +0000
gpioaei: mark the AEI ithread as sleepable
We call an ACPICA function in the interrupt handler which may attempt to
lock a mutex. If this is done while another instance of the handler
already holds the lock, it would cause a kernel panic since sleeping
isn't allowed.
Reviewed-by: Warner Losh <imp@FreeBSD.org>
Pull-request: https://github.com/freebsd/freebsd-src/pull/1667
Signed-off-by: Ahmad Khalifa <ahmadkhalifa570@gmail.com>
---
sys/dev/gpio/gpioaei.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sys/dev/gpio/gpioaei.c b/sys/dev/gpio/gpioaei.c
index 6cbb5f1bb7ed..ecae8ccaf2fa 100644
--- a/sys/dev/gpio/gpioaei.c
+++ b/sys/dev/gpio/gpioaei.c
@@ -120,8 +120,9 @@ gpio_aei_attach(device_t dev)
device_printf(dev, "Cannot allocate an IRQ\n");
return (ENOTSUP);
}
- err = bus_setup_intr(dev, sc->intr_res, INTR_TYPE_MISC | INTR_MPSAFE,
- NULL, gpio_aei_intr, sc, &sc->intr_cookie);
+ err = bus_setup_intr(dev, sc->intr_res, INTR_TYPE_MISC | INTR_MPSAFE |
+ INTR_EXCL | INTR_SLEEPABLE, NULL, gpio_aei_intr, sc,
+ &sc->intr_cookie);
if (err != 0) {
device_printf(dev, "Cannot set up IRQ\n");
bus_release_resource(dev, SYS_RES_IRQ, sc->intr_rid,