Dmitry Baryshkov
524bb1da78
PM: core: keep irq flags in device_pm_check_callbacks()
The function device_pm_check_callbacks() can be called under the spin
lock (in the reported case it happens from genpd_add_device() ->
dev_pm_domain_set(), when the genpd uses spinlocks rather than mutexes.
However this function uncoditionally uses spin_lock_irq() /
spin_unlock_irq(), thus not preserving the CPU flags. Use the
irqsave/irqrestore instead.
The backtrace for the reference:
[ 2.752010] ------------[ cut here ]------------
[ 2.756769] raw_local_irq_restore() called with IRQs enabled
[ 2.762596] WARNING: CPU: 4 PID: 1 at kernel/locking/irqflag-debug.c:10 warn_bogus_irq_restore+0x34/0x50
[ 2.772338] Modules linked in:
[ 2.775487] CPU: 4 PID: 1 Comm: swapper/0 Tainted: G S 5.17.0-rc6-00384-ge330d0d82eff-dirty #684
[ 2.781384] Freeing initrd memory: 46024K
[ 2.785839] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 2.785841] pc : warn_bogus_irq_restore+0x34/0x50
[ 2.785844] lr : warn_bogus_irq_restore+0x34/0x50
[ 2.785846] sp : ffff80000805b7d0
[ 2.785847] x29: ffff80000805b7d0 x28: 0000000000000000 x27: 0000000000000002
[ 2.785850] x26: ffffd40e80930b18 x25: ffff7ee2329192b8 x24: ffff7edfc9f60800
[ 2.785853] x23: ffffd40e80930b18 x22: ffffd40e80930d30 x21: ffff7edfc0dffa00
[ 2.785856] x20: ffff7edfc09e3768 x19: 0000000000000000 x18: ffffffffffffffff
[ 2.845775] x17: 6572206f74206465 x16: 6c696166203a3030 x15: ffff80008805b4f7
[ 2.853108] x14: 0000000000000000 x13: ffffd40e809550b0 x12: 00000000000003d8
[ 2.860441] x11: 0000000000000148 x10: ffffd40e809550b0 x9 : ffffd40e809550b0
[ 2.867774] x8 : 00000000ffffefff x7 : ffffd40e809ad0b0 x6 : ffffd40e809ad0b0
[ 2.875107] x5 : 000000000000bff4 x4 : 0000000000000000 x3 : 0000000000000000
[ 2.882440] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff7edfc03a8000
[ 2.889774] Call trace:
[ 2.892290] warn_bogus_irq_restore+0x34/0x50
[ 2.896770] _raw_spin_unlock_irqrestore+0x94/0xa0
[ 2.901690] genpd_unlock_spin+0x20/0x30
[ 2.905724] genpd_add_device+0x100/0x2d0
[ 2.909850] __genpd_dev_pm_attach+0xa8/0x23c
[ 2.914329] genpd_dev_pm_attach_by_id+0xc4/0x190
[ 2.919167] genpd_dev_pm_attach_by_name+0x3c/0xd0
[ 2.924086] dev_pm_domain_attach_by_name+0x24/0x30
[ 2.929102] psci_dt_attach_cpu+0x24/0x90
[ 2.933230] psci_cpuidle_probe+0x2d4/0x46c
[ 2.937534] platform_probe+0x68/0xe0
[ 2.941304] really_probe.part.0+0x9c/0x2fc
[ 2.945605] __driver_probe_device+0x98/0x144
[ 2.950085] driver_probe_device+0x44/0x15c
[ 2.954385] __device_attach_driver+0xb8/0x120
[ 2.958950] bus_for_each_drv+0x78/0xd0
[ 2.962896] __device_attach+0xd8/0x180
[ 2.966843] device_initial_probe+0x14/0x20
[ 2.971144] bus_probe_device+0x9c/0xa4
[ 2.975092] device_add+0x380/0x88c
[ 2.978679] platform_device_add+0x114/0x234
[ 2.983067] platform_device_register_full+0x100/0x190
[ 2.988344] psci_idle_init+0x6c/0xb0
[ 2.992113] do_one_initcall+0x74/0x3a0
[ 2.996060] kernel_init_freeable+0x2fc/0x384
[ 3.000543] kernel_init+0x28/0x130
[ 3.004132] ret_from_fork+0x10/0x20
[ 3.007817] irq event stamp: 319826
[ 3.011404] hardirqs last enabled at (319825): [<ffffd40e7eda0268>] __up_console_sem+0x78/0x84
[ 3.020332] hardirqs last disabled at (319826): [<ffffd40e7fd6d9d8>] el1_dbg+0x24/0x8c
[ 3.028458] softirqs last enabled at (318312): [<ffffd40e7ec90410>] _stext+0x410/0x588
[ 3.036678] softirqs last disabled at (318299): [<ffffd40e7ed1bf68>] __irq_exit_rcu+0x158/0x174
[ 3.045607] ---[ end trace 0000000000000000 ]---
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2022-03-10 19:40:15 +01:00
..
2022-02-08 12:15:04 +01:00
2022-02-18 19:36:36 +01:00
2021-12-17 11:34:35 +00:00
2022-01-03 13:44:38 +01:00
2022-02-23 09:39:37 +09:00
2022-01-13 12:50:48 +00:00
2022-03-10 19:40:15 +01:00
2022-02-17 07:54:03 -07:00
2022-01-18 10:05:48 +02:00
2022-02-06 13:19:46 +01:00
2022-01-22 08:33:35 +02:00
2022-02-04 19:22:32 +01:00
2022-02-17 17:05:07 -08:00
2022-02-07 17:42:44 +01:00
2022-01-26 18:57:09 -08:00
2022-01-26 19:40:33 +01:00
2022-02-09 13:18:49 +05:30
2022-01-05 18:31:17 +01:00
2022-01-31 11:22:53 +11:00
2022-01-04 17:29:31 -08:00
2022-01-15 20:37:06 +02:00
2022-02-15 11:04:16 +05:30
2022-02-01 13:18:09 +05:30
2022-02-15 15:54:46 +01:00
2021-12-24 15:27:52 +09:00
2022-01-23 10:31:27 +01:00
2021-12-22 15:38:12 +01:00
2022-02-27 12:30:54 -08:00
2022-02-25 05:51:04 +10:00
2021-12-21 10:13:26 +01:00
2022-02-14 16:28:51 +01:00
2022-02-09 14:33:21 +00:00
2022-02-22 08:15:39 -08:00
2022-02-18 10:37:33 +01:00
2022-01-13 02:05:50 +01:00
2022-02-21 17:58:09 +01:00
2022-02-25 16:46:51 -04:00
2022-02-20 11:15:46 -08:00
2022-02-04 12:57:26 +01:00
2022-02-02 10:49:29 +00:00
2021-12-30 12:12:12 -08:00
2022-01-12 16:59:22 -08:00
2022-01-22 08:33:35 +02:00
2022-01-13 11:19:07 -08:00
2022-02-17 07:54:03 -07:00
2022-01-23 06:20:44 +02:00
2022-01-11 11:35:28 -08:00
2022-01-10 10:33:52 -05:00
2022-01-12 11:11:34 -08:00
2022-02-04 16:27:44 +01:00
2022-02-08 16:04:49 +01:00
2022-02-25 12:12:06 -08:00
2022-02-24 10:05:08 -08:00
2022-01-12 14:17:45 +00:00
2022-01-17 08:14:18 +02:00
2022-01-22 08:33:37 +02:00
2022-01-18 10:05:48 +02:00
2022-02-23 14:43:11 +01:00
2022-02-21 17:59:25 +01:00
2022-02-17 17:13:52 -06:00
2022-01-28 10:15:34 +01:00
2022-02-27 13:07:40 -08:00
2022-01-16 08:08:11 +02:00
2022-01-13 09:05:29 -08:00
2022-02-02 10:33:04 +05:30
2022-02-19 02:03:58 +01:00
2022-02-24 13:48:39 +01:00
2022-01-22 08:33:37 +02:00
2022-02-11 21:19:51 +01:00
2021-12-27 16:51:12 +01:00
2022-01-06 12:18:08 +00:00
2022-01-20 13:25:01 +02:00
2021-12-21 10:22:19 +01:00
2022-02-22 11:56:29 +00:00
2022-01-17 16:44:26 -06:00
2022-01-10 08:32:37 -08:00
2022-01-27 11:23:26 +02:00
2022-01-16 23:50:34 +01:00
2022-02-09 22:55:01 +01:00
2022-02-14 22:10:29 -05:00
2022-02-18 09:20:52 -08:00
2022-01-14 16:02:28 +01:00
2022-02-25 12:37:41 -08:00
2021-12-17 17:18:18 +01:00
2022-02-15 17:14:22 +01:00
2022-01-24 23:30:24 -05:00
2022-02-08 09:48:44 +01:00
2022-02-24 20:14:19 +01:00
2021-12-28 10:43:56 +03:00
2022-02-25 11:45:29 -08:00
2021-12-29 10:54:50 +01:00
2022-02-24 14:51:45 +01:00
2022-01-18 10:05:48 +02:00
2022-01-20 13:31:46 +02:00
2022-02-23 12:32:33 +00:00
2022-02-11 12:06:15 +10:00
2022-01-23 06:20:44 +02:00
2022-01-14 18:50:53 -05:00
2021-12-21 10:38:13 +01:00
2022-01-17 08:07:57 +02:00
2022-02-10 11:10:23 +01:00
2022-01-22 08:33:37 +02:00