mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-27 14:29:59 -04:00
thermal: intel: Fix dangling resources on thermal_throttle_online() failure
The function thermal_throttle_add_dev() may fail and abort a CPU hotplug
online operation. Since the failure occurs within the online callback,
thermal_throttle_online(), the CPU hotplug framework does not invoke the
corresponding offline callback. As a result, the hardware and software
resources set up during the failed operation are not torn down.
Since only thermal_throttle_add_dev() can fail, call it before setting up
the rest of the resources.
Fixes: f6656208f0 ("x86/mce/therm_throt: Optimize notifications of thermal throttle")
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Link: https://patch.msgid.link/20260613-rneri-directed-therm-intr-v3-1-3a26d1e47fc8@linux.intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
committed by
Rafael J. Wysocki
parent
f3c4a338b5
commit
b91d287fa7
@@ -529,8 +529,13 @@ static int thermal_throttle_online(unsigned int cpu)
|
||||
{
|
||||
struct thermal_state *state = &per_cpu(thermal_state, cpu);
|
||||
struct device *dev = get_cpu_device(cpu);
|
||||
int err;
|
||||
u32 l;
|
||||
|
||||
err = thermal_throttle_add_dev(dev, cpu);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
state->package_throttle.level = PACKAGE_LEVEL;
|
||||
state->core_throttle.level = CORE_LEVEL;
|
||||
|
||||
@@ -548,7 +553,7 @@ static int thermal_throttle_online(unsigned int cpu)
|
||||
l = apic_read(APIC_LVTTHMR);
|
||||
apic_write(APIC_LVTTHMR, l & ~APIC_LVT_MASKED);
|
||||
|
||||
return thermal_throttle_add_dev(dev, cpu);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int thermal_throttle_offline(unsigned int cpu)
|
||||
|
||||
Reference in New Issue
Block a user