]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.15
authorSasha Levin <sashal@kernel.org>
Sat, 2 Nov 2024 11:11:42 +0000 (07:11 -0400)
committerSasha Levin <sashal@kernel.org>
Sat, 2 Nov 2024 11:11:42 +0000 (07:11 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.15/acpi-cppc-make-rmw_lock-a-raw_spin_lock.patch [new file with mode: 0644]
queue-5.15/firmware-arm_sdei-fix-the-input-parameter-of-cpuhp_r.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/acpi-cppc-make-rmw_lock-a-raw_spin_lock.patch b/queue-5.15/acpi-cppc-make-rmw_lock-a-raw_spin_lock.patch
new file mode 100644 (file)
index 0000000..e7dc243
--- /dev/null
@@ -0,0 +1,128 @@
+From 2eb08ff8771115962592a1d83300c2314d5090b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 28 Oct 2024 13:56:56 +0100
+Subject: ACPI: CPPC: Make rmw_lock a raw_spin_lock
+
+From: Pierre Gondois <pierre.gondois@arm.com>
+
+[ Upstream commit 1c10941e34c5fdc0357e46a25bd130d9cf40b925 ]
+
+The following BUG was triggered:
+
+=============================
+[ BUG: Invalid wait context ]
+6.12.0-rc2-XXX #406 Not tainted
+-----------------------------
+kworker/1:1/62 is trying to lock:
+ffffff8801593030 (&cpc_ptr->rmw_lock){+.+.}-{3:3}, at: cpc_write+0xcc/0x370
+other info that might help us debug this:
+context-{5:5}
+2 locks held by kworker/1:1/62:
+  #0: ffffff897ef5ec98 (&rq->__lock){-.-.}-{2:2}, at: raw_spin_rq_lock_nested+0x2c/0x50
+  #1: ffffff880154e238 (&sg_policy->update_lock){....}-{2:2}, at: sugov_update_shared+0x3c/0x280
+stack backtrace:
+CPU: 1 UID: 0 PID: 62 Comm: kworker/1:1 Not tainted 6.12.0-rc2-g9654bd3e8806 #406
+Workqueue:  0x0 (events)
+Call trace:
+  dump_backtrace+0xa4/0x130
+  show_stack+0x20/0x38
+  dump_stack_lvl+0x90/0xd0
+  dump_stack+0x18/0x28
+  __lock_acquire+0x480/0x1ad8
+  lock_acquire+0x114/0x310
+  _raw_spin_lock+0x50/0x70
+  cpc_write+0xcc/0x370
+  cppc_set_perf+0xa0/0x3a8
+  cppc_cpufreq_fast_switch+0x40/0xc0
+  cpufreq_driver_fast_switch+0x4c/0x218
+  sugov_update_shared+0x234/0x280
+  update_load_avg+0x6ec/0x7b8
+  dequeue_entities+0x108/0x830
+  dequeue_task_fair+0x58/0x408
+  __schedule+0x4f0/0x1070
+  schedule+0x54/0x130
+  worker_thread+0xc0/0x2e8
+  kthread+0x130/0x148
+  ret_from_fork+0x10/0x20
+
+sugov_update_shared() locks a raw_spinlock while cpc_write() locks a
+spinlock.
+
+To have a correct wait-type order, update rmw_lock to a raw spinlock and
+ensure that interrupts will be disabled on the CPU holding it.
+
+Fixes: 60949b7b8054 ("ACPI: CPPC: Fix MASK_VAL() usage")
+Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
+Link: https://patch.msgid.link/20241028125657.1271512-1-pierre.gondois@arm.com
+[ rjw: Changelog edits ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/cppc_acpi.c | 9 +++++----
+ include/acpi/cppc_acpi.h | 2 +-
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
+index 8d14e6c705357..0e9ccedb08dab 100644
+--- a/drivers/acpi/cppc_acpi.c
++++ b/drivers/acpi/cppc_acpi.c
+@@ -813,7 +813,7 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)
+       /* Store CPU Logical ID */
+       cpc_ptr->cpu_id = pr->id;
+-      spin_lock_init(&cpc_ptr->rmw_lock);
++      raw_spin_lock_init(&cpc_ptr->rmw_lock);
+       /* Parse PSD data for this CPU */
+       ret = acpi_get_psd(cpc_ptr, handle);
+@@ -1020,6 +1020,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
+       int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu);
+       struct cpc_reg *reg = &reg_res->cpc_entry.reg;
+       struct cpc_desc *cpc_desc;
++      unsigned long flags;
+       size = GET_BIT_WIDTH(reg);
+@@ -1047,7 +1048,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
+                       return -ENODEV;
+               }
+-              spin_lock(&cpc_desc->rmw_lock);
++              raw_spin_lock_irqsave(&cpc_desc->rmw_lock, flags);
+               switch (size) {
+               case 8:
+                       prev_val = readb_relaxed(vaddr);
+@@ -1062,7 +1063,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
+                       prev_val = readq_relaxed(vaddr);
+                       break;
+               default:
+-                      spin_unlock(&cpc_desc->rmw_lock);
++                      raw_spin_unlock_irqrestore(&cpc_desc->rmw_lock, flags);
+                       return -EFAULT;
+               }
+               val = MASK_VAL_WRITE(reg, prev_val, val);
+@@ -1095,7 +1096,7 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
+       }
+       if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
+-              spin_unlock(&cpc_desc->rmw_lock);
++              raw_spin_unlock_irqrestore(&cpc_desc->rmw_lock, flags);
+       return ret_val;
+ }
+diff --git a/include/acpi/cppc_acpi.h b/include/acpi/cppc_acpi.h
+index 0fed87e2a8959..28179bb794b2f 100644
+--- a/include/acpi/cppc_acpi.h
++++ b/include/acpi/cppc_acpi.h
+@@ -65,7 +65,7 @@ struct cpc_desc {
+       int write_cmd_status;
+       int write_cmd_id;
+       /* Lock used for RMW operations in cpc_write() */
+-      spinlock_t rmw_lock;
++      raw_spinlock_t rmw_lock;
+       struct cpc_register_resource cpc_regs[MAX_CPC_REG_ENT];
+       struct acpi_psd_package domain_info;
+       struct kobject kobj;
+-- 
+2.43.0
+
diff --git a/queue-5.15/firmware-arm_sdei-fix-the-input-parameter-of-cpuhp_r.patch b/queue-5.15/firmware-arm_sdei-fix-the-input-parameter-of-cpuhp_r.patch
new file mode 100644 (file)
index 0000000..fb25371
--- /dev/null
@@ -0,0 +1,38 @@
+From 964e3827cb62255dc2c0dc02e72b51c73d32ab88 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 16 Oct 2024 16:47:40 +0800
+Subject: firmware: arm_sdei: Fix the input parameter of cpuhp_remove_state()
+
+From: Xiongfeng Wang <wangxiongfeng2@huawei.com>
+
+[ Upstream commit c83212d79be2c9886d3e6039759ecd388fd5fed1 ]
+
+In sdei_device_freeze(), the input parameter of cpuhp_remove_state() is
+passed as 'sdei_entry_point' by mistake. Change it to 'sdei_hp_state'.
+
+Fixes: d2c48b2387eb ("firmware: arm_sdei: Fix sleep from invalid context BUG")
+Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com>
+Reviewed-by: James Morse <james.morse@arm.com>
+Link: https://lore.kernel.org/r/20241016084740.183353-1-wangxiongfeng2@huawei.com
+Signed-off-by: Will Deacon <will@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/arm_sdei.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
+index 285fe7ad490d1..3e8051fe82965 100644
+--- a/drivers/firmware/arm_sdei.c
++++ b/drivers/firmware/arm_sdei.c
+@@ -763,7 +763,7 @@ static int sdei_device_freeze(struct device *dev)
+       int err;
+       /* unregister private events */
+-      cpuhp_remove_state(sdei_entry_point);
++      cpuhp_remove_state(sdei_hp_state);
+       err = sdei_unregister_shared();
+       if (err)
+-- 
+2.43.0
+
index d415e1b7351676417a20ff75e674054539336320..81297305a0bbb90ddcc3a140ec002f686ad8662e 100644 (file)
@@ -29,3 +29,5 @@ net-hns3-fix-missing-features-due-to-dev-features-co.patch
 net-hns3-resolved-the-issue-that-the-debugfs-query-r.patch
 net-hns3-initialize-reset_timer-before-hclgevf_misc_.patch
 net-hns3-fix-kernel-crash-when-1588-is-sent-on-hip08.patch
+firmware-arm_sdei-fix-the-input-parameter-of-cpuhp_r.patch
+acpi-cppc-make-rmw_lock-a-raw_spin_lock.patch