Merge branches 'thermal-intel' and 'thermal-drivers'
Merge thermal control driver changes for 6.1-rc1: - Use module_pci_driver() macro in the int340x processor_thermal driver (Shang XiaoJing). - Use get_cpu() instead of smp_processor_id() in the intel_powerclamp thermal driver to prevent it from crashing and remove unused accounting for IRQ wakes from it (Srinivas Pandruvada). - Consolidate priv->data_vault checks in int340x_thermal (Rafael Wysocki). - Check the policy first in cpufreq_cooling_register() (Xuewen Yan). - Drop redundant error message from da9062-thermal (zhaoxiao). - Drop of_match_ptr() from thermal_mmio (Jean Delvare). * thermal-intel: thermal: int340x: processor_thermal: Use module_pci_driver() macro thermal: intel_powerclamp: Remove accounting for IRQ wakes thermal: intel_powerclamp: Use get_cpu() instead of smp_processor_id() to avoid crash thermal: int340x_thermal: Consolidate priv->data_vault checks * thermal-drivers: thermal: cpufreq_cooling: Check the policy first in cpufreq_cooling_register() thermal: da9062-thermal: Drop redundant error message thermal/drivers/thermal_mmio: Drop of_match_ptr()
This commit is contained in:
Коммит
2e70ea7fb9
|
@ -501,17 +501,17 @@ __cpufreq_cooling_register(struct device_node *np,
|
|||
struct thermal_cooling_device_ops *cooling_ops;
|
||||
char *name;
|
||||
|
||||
if (IS_ERR_OR_NULL(policy)) {
|
||||
pr_err("%s: cpufreq policy isn't valid: %p\n", __func__, policy);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
dev = get_cpu_device(policy->cpu);
|
||||
if (unlikely(!dev)) {
|
||||
pr_warn("No cpu device for cpu %d\n", policy->cpu);
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
if (IS_ERR_OR_NULL(policy)) {
|
||||
pr_err("%s: cpufreq policy isn't valid: %p\n", __func__, policy);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
i = cpufreq_table_count_valid_entries(policy);
|
||||
if (!i) {
|
||||
pr_debug("%s: CPUFreq table not found or has no valid entries\n",
|
||||
|
|
|
@ -248,10 +248,9 @@ static int da9062_thermal_probe(struct platform_device *pdev)
|
|||
jiffies_to_msecs(thermal->zone->passive_delay_jiffies));
|
||||
|
||||
ret = platform_get_irq_byname(pdev, "THERMAL");
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "Failed to get platform IRQ.\n");
|
||||
if (ret < 0)
|
||||
goto err_zone;
|
||||
}
|
||||
|
||||
thermal->irq = ret;
|
||||
|
||||
ret = request_threaded_irq(thermal->irq, NULL,
|
||||
|
|
|
@ -614,9 +614,8 @@ static int int3400_thermal_probe(struct platform_device *pdev)
|
|||
|
||||
free_sysfs:
|
||||
cleanup_odvp(priv);
|
||||
if (priv->data_vault) {
|
||||
if (!ZERO_OR_NULL_PTR(priv->data_vault))
|
||||
sysfs_remove_group(&pdev->dev.kobj, &data_attribute_group);
|
||||
if (!ZERO_OR_NULL_PTR(priv->data_vault)) {
|
||||
sysfs_remove_group(&pdev->dev.kobj, &data_attribute_group);
|
||||
kfree(priv->data_vault);
|
||||
}
|
||||
free_uuid:
|
||||
|
|
|
@ -373,18 +373,7 @@ static struct pci_driver proc_thermal_pci_driver = {
|
|||
.driver.pm = &proc_thermal_pci_pm,
|
||||
};
|
||||
|
||||
static int __init proc_thermal_init(void)
|
||||
{
|
||||
return pci_register_driver(&proc_thermal_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit proc_thermal_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&proc_thermal_pci_driver);
|
||||
}
|
||||
|
||||
module_init(proc_thermal_init);
|
||||
module_exit(proc_thermal_exit);
|
||||
module_pci_driver(proc_thermal_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
|
||||
MODULE_DESCRIPTION("Processor Thermal Reporting Device Driver");
|
||||
|
|
|
@ -151,18 +151,7 @@ static struct pci_driver proc_thermal_pci_driver = {
|
|||
.driver.pm = &proc_thermal_pci_pm,
|
||||
};
|
||||
|
||||
static int __init proc_thermal_init(void)
|
||||
{
|
||||
return pci_register_driver(&proc_thermal_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit proc_thermal_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&proc_thermal_pci_driver);
|
||||
}
|
||||
|
||||
module_init(proc_thermal_init);
|
||||
module_exit(proc_thermal_exit);
|
||||
module_pci_driver(proc_thermal_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
|
||||
MODULE_DESCRIPTION("Processor Thermal Reporting Device Driver");
|
||||
|
|
|
@ -62,8 +62,7 @@ static struct dentry *debug_dir;
|
|||
static unsigned int set_target_ratio;
|
||||
static unsigned int current_ratio;
|
||||
static bool should_skip;
|
||||
static bool reduce_irq;
|
||||
static atomic_t idle_wakeup_counter;
|
||||
|
||||
static unsigned int control_cpu; /* The cpu assigned to collect stat and update
|
||||
* control parameters. default to BSP but BSP
|
||||
* can be offlined.
|
||||
|
@ -285,9 +284,6 @@ static unsigned int get_compensation(int ratio)
|
|||
cal_data[ratio + 1].steady_comp) / 3;
|
||||
}
|
||||
|
||||
/* REVISIT: simple penalty of double idle injection */
|
||||
if (reduce_irq)
|
||||
comp = ratio;
|
||||
/* do not exceed limit */
|
||||
if (comp + ratio >= MAX_TARGET_RATIO)
|
||||
comp = MAX_TARGET_RATIO - ratio - 1;
|
||||
|
@ -301,13 +297,9 @@ static void adjust_compensation(int target_ratio, unsigned int win)
|
|||
struct powerclamp_calibration_data *d = &cal_data[target_ratio];
|
||||
|
||||
/*
|
||||
* adjust compensations if confidence level has not been reached or
|
||||
* there are too many wakeups during the last idle injection period, we
|
||||
* cannot trust the data for compensation.
|
||||
* adjust compensations if confidence level has not been reached.
|
||||
*/
|
||||
if (d->confidence >= CONFIDENCE_OK ||
|
||||
atomic_read(&idle_wakeup_counter) >
|
||||
win * num_online_cpus())
|
||||
if (d->confidence >= CONFIDENCE_OK)
|
||||
return;
|
||||
|
||||
delta = set_target_ratio - current_ratio;
|
||||
|
@ -347,14 +339,7 @@ static bool powerclamp_adjust_controls(unsigned int target_ratio,
|
|||
tsc_last = tsc_now;
|
||||
|
||||
adjust_compensation(target_ratio, win);
|
||||
/*
|
||||
* too many external interrupts, set flag such
|
||||
* that we can take measure later.
|
||||
*/
|
||||
reduce_irq = atomic_read(&idle_wakeup_counter) >=
|
||||
2 * win * num_online_cpus();
|
||||
|
||||
atomic_set(&idle_wakeup_counter, 0);
|
||||
/* if we are above target+guard, skip */
|
||||
return set_target_ratio + guard <= current_ratio;
|
||||
}
|
||||
|
@ -532,8 +517,10 @@ static int start_power_clamp(void)
|
|||
|
||||
/* prefer BSP */
|
||||
control_cpu = 0;
|
||||
if (!cpu_online(control_cpu))
|
||||
control_cpu = smp_processor_id();
|
||||
if (!cpu_online(control_cpu)) {
|
||||
control_cpu = get_cpu();
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
clamping = true;
|
||||
schedule_delayed_work(&poll_pkg_cstate_work, 0);
|
||||
|
|
|
@ -106,7 +106,7 @@ static struct platform_driver thermal_mmio_driver = {
|
|||
.probe = thermal_mmio_probe,
|
||||
.driver = {
|
||||
.name = "thermal-mmio",
|
||||
.of_match_table = of_match_ptr(thermal_mmio_id_table),
|
||||
.of_match_table = thermal_mmio_id_table,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче