Beispiel #1
0
/* Get notified when a cpu comes on/off. Be hotplug friendly. */
static __cpuinit int thermal_throttle_cpu_callback(struct notifier_block *nfb,
                           unsigned long action,
                           void *hcpu)
{
    unsigned int cpu = (unsigned long)hcpu;
    struct sys_device *sys_dev;
    int err = 0;

    sys_dev = get_cpu_sysdev(cpu);
    switch (action) {
    case CPU_UP_PREPARE:
    case CPU_UP_PREPARE_FROZEN:
        mutex_lock(&therm_cpu_lock);
        err = thermal_throttle_add_dev(sys_dev);
        mutex_unlock(&therm_cpu_lock);
        WARN_ON(err);
        break;
    case CPU_UP_CANCELED:
    case CPU_UP_CANCELED_FROZEN:
    case CPU_DEAD:
    case CPU_DEAD_FROZEN:
        mutex_lock(&therm_cpu_lock);
        thermal_throttle_remove_dev(sys_dev);
        mutex_unlock(&therm_cpu_lock);
        break;
    }
    return err ? NOTIFY_BAD : NOTIFY_OK;
}
Beispiel #2
0
static __init int thermal_throttle_init_device(void)
{
	unsigned int cpu = 0;
	int err;

	if (!atomic_read(&therm_throt_en))
		return 0;

	register_hotcpu_notifier(&thermal_throttle_cpu_notifier);

#ifdef CONFIG_HOTPLUG_CPU
	mutex_lock(&therm_cpu_lock);
#endif
	/* connect live CPUs to sysfs */
	for_each_online_cpu(cpu) {
		err = thermal_throttle_add_dev(get_cpu_sysdev(cpu));
		WARN_ON(err);
	}
#ifdef CONFIG_HOTPLUG_CPU
	mutex_unlock(&therm_cpu_lock);
#endif

	return 0;
}