]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
thermal: intel: Fix dangling resources on thermal_throttle_online() failure
authorRicardo Neri <ricardo.neri-calderon@linux.intel.com>
Sat, 13 Jun 2026 22:17:47 +0000 (15:17 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 19 Jun 2026 18:06:54 +0000 (20:06 +0200)
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: f6656208f04e ("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>
drivers/thermal/intel/therm_throt.c

index 44fa4dd15dd1c5313d35e332e5d7c9455dc361ff..45a8ef4a608b14fbd15e37f04326704fa897aad7 100644 (file)
@@ -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)