代码变更
关键 diff
@@ -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; /* 改:直接返回,前面不会失败 */ }