Sean Anderson
9860370c21
gpio: xilinx: Convert gpio_lock to raw spinlock
irq_chip functions may be called in raw spinlock context. Therefore, we
must also use a raw spinlock for our own internal locking.
This fixes the following lockdep splat:
[ 5.349336] =============================
[ 5.353349] [ BUG: Invalid wait context ]
[ 5.357361] 6.13.0-rc5+ #69 Tainted: G W
[ 5.363031] -----------------------------
[ 5.367045] kworker/u17:1/44 is trying to lock:
[ 5.371587] ffffff88018b02c0 (&chip->gpio_lock){....}-{3:3}, at: xgpio_irq_unmask (drivers/gpio/gpio-xilinx.c:433 (discriminator 8))
[ 5.380079] other info that might help us debug this:
[ 5.385138] context-{5:5}
[ 5.387762] 5 locks held by kworker/u17:1/44:
[ 5.392123] #0: ffffff8800014958 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work (kernel/workqueue.c:3204)
[ 5.402260] #1: ffffffc082fcbdd8 (deferred_probe_work){+.+.}-{0:0}, at: process_one_work (kernel/workqueue.c:3205)
[ 5.411528] #2: ffffff880172c900 (&dev->mutex){....}-{4:4}, at: __device_attach (drivers/base/dd.c:1006)
[ 5.419929] #3: ffffff88039c8268 (request_class#2){+.+.}-{4:4}, at: __setup_irq (kernel/irq/internals.h:156 kernel/irq/manage.c:1596)
[ 5.428331] #4: ffffff88039c80c8 (lock_class#2){....}-{2:2}, at: __setup_irq (kernel/irq/manage.c:1614)
[ 5.436472] stack backtrace:
[ 5.439359] CPU: 2 UID: 0 PID: 44 Comm: kworker/u17:1 Tainted: G W 6.13.0-rc5+ #69
[ 5.448690] Tainted: [W]=WARN
[ 5.451656] Hardware name: xlnx,zynqmp (DT)
[ 5.455845] Workqueue: events_unbound deferred_probe_work_func
[ 5.461699] Call trace:
[ 5.464147] show_stack+0x18/0x24 C
[ 5.467821] dump_stack_lvl (lib/dump_stack.c:123)
[ 5.471501] dump_stack (lib/dump_stack.c:130)
[ 5.474824] __lock_acquire (kernel/locking/lockdep.c:4828 kernel/locking/lockdep.c:4898 kernel/locking/lockdep.c:5176)
[ 5.478758] lock_acquire (arch/arm64/include/asm/percpu.h:40 kernel/locking/lockdep.c:467 kernel/locking/lockdep.c:5851 kernel/locking/lockdep.c:5814)
[ 5.482429] _raw_spin_lock_irqsave (include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
[ 5.486797] xgpio_irq_unmask (drivers/gpio/gpio-xilinx.c:433 (discriminator 8))
[ 5.490737] irq_enable (kernel/irq/internals.h:236 kernel/irq/chip.c:170 kernel/irq/chip.c:439 kernel/irq/chip.c:432 kernel/irq/chip.c:345)
[ 5.494060] __irq_startup (kernel/irq/internals.h:241 kernel/irq/chip.c:180 kernel/irq/chip.c:250)
[ 5.497645] irq_startup (kernel/irq/chip.c:270)
[ 5.501143] __setup_irq (kernel/irq/manage.c:1807)
[ 5.504728] request_threaded_irq (kernel/irq/manage.c:2208)
Fixes: a32c7caea292 ("gpio: gpio-xilinx: Add interrupt support")
Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250110163354.2012654-1-sean.anderson@linux.dev
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
2025-01-14 14:04:38 +01:00
..
2024-10-21 09:23:20 +02:00
2023-07-29 16:03:17 +02:00
2024-12-02 11:34:44 -08:00
2023-04-11 21:08:31 +02:00
2024-12-02 11:34:44 -08:00
2023-05-23 10:09:11 +02:00
2024-08-01 14:09:28 +01:00
2024-10-02 16:32:46 +02:00
2023-08-03 15:58:45 +02:00
2024-11-21 09:07:42 +01:00
2024-05-30 11:20:53 +02:00
2024-10-17 08:53:34 +02:00
2024-11-22 15:31:35 +01:00
2024-11-29 11:43:29 -08:00
2024-09-02 09:45:18 +02:00
2023-07-19 13:26:22 +02:00
2024-10-17 09:00:48 +02:00
2024-10-17 09:00:48 +02:00
2024-10-09 16:32:04 +01:00
2023-08-03 15:58:46 +02:00
2023-07-19 13:24:01 +02:00
2024-04-02 10:58:21 +02:00
2024-04-05 20:12:39 +03:00
2024-10-14 10:28:40 +02:00
2024-10-17 09:00:48 +02:00
2023-07-29 15:56:33 +02:00
2024-10-31 13:37:54 +01:00
2024-10-14 10:28:56 +02:00
2024-12-02 11:34:44 -08:00
2023-11-04 10:23:23 +01:00
2024-01-15 23:15:35 +01:00
2024-11-22 15:31:35 +01:00
2024-11-21 09:08:47 +01:00
2023-09-11 09:03:44 +02:00
2024-10-21 09:23:34 +02:00
2024-07-29 10:50:51 +02:00
2023-07-27 09:33:07 +02:00
2024-12-02 11:34:44 -08:00
2024-12-10 10:35:13 +01:00
2024-11-18 11:45:06 +01:00
2024-06-07 10:05:21 +02:00
2023-10-13 08:39:30 +02:00
2024-11-22 15:31:35 +01:00
2024-12-02 11:34:44 -08:00
2023-03-09 16:08:39 +02:00
2024-12-10 11:38:57 +01:00
2023-08-11 14:23:32 +02:00
2023-03-10 16:17:30 +01:00
2023-08-11 16:20:02 +02:00
2024-09-02 12:27:36 +02:00
2024-12-10 11:38:38 +01:00
2023-07-29 16:05:50 +02:00
2023-03-23 14:31:18 +01:00
2025-01-08 09:54:20 +01:00
2023-08-01 21:14:48 +02:00
2024-10-17 09:00:48 +02:00
2024-04-12 21:30:58 +02:00
2024-10-21 09:23:47 +02:00
2023-08-03 15:56:30 +02:00
2023-08-03 15:58:50 +02:00
2024-07-29 10:50:51 +02:00
2023-08-01 21:15:23 +02:00
2024-10-24 10:37:51 +02:00
2024-07-15 17:53:24 -07:00
2024-12-02 11:34:44 -08:00
2024-12-02 11:34:44 -08:00
2024-11-22 15:31:35 +01:00
2024-08-10 21:35:16 +02:00
2024-10-17 09:00:48 +02:00
2024-07-03 15:27:59 +02:00
2024-09-27 08:18:43 -07:00
2024-10-17 09:00:48 +02:00
2024-10-17 09:00:48 +02:00
2024-11-13 16:29:27 +01:00
2024-11-22 15:23:31 +01:00
2024-09-02 12:27:36 +02:00
2024-10-08 10:08:51 +02:00
2023-08-21 14:11:16 +02:00
2023-08-11 16:21:46 +02:00
2024-03-12 12:53:35 +01:00
2024-05-07 09:44:33 +02:00
2024-11-29 11:43:29 -08:00
2023-08-01 21:22:38 +02:00
2024-11-22 15:31:35 +01:00
2023-08-21 10:39:58 +02:00
2024-06-07 10:05:21 +02:00
2024-09-02 14:35:32 +02:00
2024-12-02 11:34:44 -08:00
2024-11-04 09:15:38 +01:00
2023-07-20 17:22:10 +02:00
2024-11-22 15:31:35 +01:00
2024-01-03 09:50:47 +01:00
2023-11-04 10:23:22 +01:00
2023-08-03 15:58:52 +02:00
2023-08-01 21:26:48 +02:00
2024-10-17 09:00:48 +02:00
2023-03-23 14:31:18 +01:00
2024-05-30 11:21:05 +02:00
2023-03-06 12:33:02 +02:00
2024-04-12 21:36:40 +02:00
2024-11-12 13:51:25 +01:00
2024-01-15 11:07:46 +01:00
2023-05-17 11:56:24 +02:00
2024-09-05 09:34:51 +02:00
2023-05-17 11:52:14 +02:00
2024-04-15 16:12:18 +03:00
2023-11-15 15:39:40 +01:00
2025-01-03 17:15:04 +01:00
2023-03-23 14:31:18 +01:00
2024-11-04 08:46:55 +01:00
2023-07-19 13:24:01 +02:00
2024-09-04 09:02:44 +02:00
2024-09-02 12:31:48 +02:00
2024-09-02 12:35:59 +02:00
2024-12-02 11:34:44 -08:00
2023-11-13 17:59:48 +02:00
2024-10-17 09:00:48 +02:00
2024-11-22 15:31:35 +01:00
2024-11-22 15:31:35 +01:00
2024-09-02 12:27:36 +02:00
2023-09-27 08:51:28 +02:00
2023-05-23 10:09:11 +02:00
2023-07-19 13:24:01 +02:00
2023-05-17 11:40:40 +02:00
2023-08-03 15:55:34 +02:00
2023-12-27 15:56:48 +01:00
2023-07-19 13:24:01 +02:00
2023-07-19 13:22:13 +02:00
2024-11-22 15:31:35 +01:00
2023-07-19 13:24:01 +02:00
2024-10-14 10:28:21 +02:00
2024-10-17 09:00:48 +02:00
2023-05-31 17:01:34 +02:00
2024-10-17 09:00:48 +02:00
2024-10-14 10:29:11 +02:00
2024-07-17 05:20:58 -04:00
2025-01-03 17:15:04 +01:00
2024-11-22 15:31:35 +01:00
2023-08-03 15:48:15 +02:00
2023-07-19 13:24:01 +02:00
2024-04-05 20:12:03 +03:00
2023-12-08 09:26:20 +01:00
2023-12-08 09:26:25 +01:00
2023-08-29 10:21:56 -07:00
2024-10-22 09:21:12 +02:00
2024-11-29 11:43:29 -08:00
2025-01-14 14:04:38 +01:00
2023-03-23 14:31:19 +01:00
2023-08-03 15:58:54 +02:00
2024-11-21 09:06:17 +01:00
2024-10-17 09:00:48 +02:00
2024-09-02 15:00:53 +02:00
2024-09-30 14:25:54 +03:00
2024-03-01 09:08:34 +01:00
2024-11-12 09:46:17 +01:00
2024-09-02 12:27:36 +02:00
2024-11-09 14:55:33 +01:00
2024-11-06 14:41:06 +01:00
2024-03-01 09:07:21 +01:00
2024-12-02 11:34:44 -08:00
2024-11-04 08:56:20 +01:00
2024-01-17 09:52:37 +01:00
2024-11-04 08:47:34 +01:00
2024-10-22 08:59:09 +02:00
2024-12-04 15:27:49 +01:00
2024-11-06 14:40:08 +01:00
2024-09-30 10:16:26 +02:00