Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2195c31b authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Guenter Roeck
Browse files

hwmon: (coretemp) Use proper error codes in cpu online callback



The cpu online callback returns success unconditionally even when the
device has no support, micro code mismatches or device allocation fails.
Only if CPU_HOTPLUG is disabled, the init function checks whether the
device list is empty and removes the driver.

This does not make sense. If CPU HOTPLUG is enabled then there is no point
to keep the driver around when it failed to initialize on the already
online cpus. The chance that not yet online CPUs will provide a functional
interface later is very close to zero.

Add proper error return codes, so the setup of the cpu hotplug states fails
when the device cannot be initialized and remove all the magic cruft.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent e00ca5df
Loading
Loading
Loading
Loading
+5 −19
Original line number Diff line number Diff line
@@ -662,12 +662,12 @@ static int coretemp_cpu_online(unsigned int cpu)
	 * without thermal sensors will be filtered out.
	 */
	if (!cpu_has(c, X86_FEATURE_DTHERM))
		return 0;
		return -ENODEV;

	if (!pdev) {
		/* Check the microcode version of the CPU */
		if (chk_ucode_version(cpu))
			return 0;
			return -EINVAL;

		/*
		 * Alright, we have DTS support.
@@ -677,7 +677,7 @@ static int coretemp_cpu_online(unsigned int cpu)
		 */
		err = coretemp_device_add(cpu);
		if (err)
			return 0;
			return err;

		pdev = coretemp_get_pdev(cpu);
		/*
@@ -782,28 +782,14 @@ static int __init coretemp_init(void)
	if (err)
		return err;

	get_online_cpus();
	err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "hwmon/coretemp:online",
				coretemp_cpu_online, coretemp_cpu_offline);
	if (err < 0)
		goto exit_driver_unreg;
		goto outdrv;
	coretemp_hp_online = err;

#ifndef CONFIG_HOTPLUG_CPU
	if (list_empty(&pdev_list)) {
		err = -ENODEV;
		goto exit_hp_unreg;
	}
#endif
	put_online_cpus();
	return 0;

#ifndef CONFIG_HOTPLUG_CPU
exit_hp_unreg:
	cpuhp_remove_state(coretemp_hp_online);
	put_online_cpus();
#endif
exit_driver_unreg:
outdrv:
	platform_driver_unregister(&coretemp_driver);
	return err;
}