diff options
Diffstat (limited to 'drivers/devfreq')
-rw-r--r-- | drivers/devfreq/Kconfig | 2 | ||||
-rw-r--r-- | drivers/devfreq/devfreq.c | 6 | ||||
-rw-r--r-- | drivers/devfreq/governor_bw_hwmon.c | 5 | ||||
-rw-r--r-- | drivers/devfreq/governor_memlat.c | 8 | ||||
-rw-r--r-- | drivers/devfreq/tegra-devfreq.c | 4 |
5 files changed, 13 insertions, 12 deletions
diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 396f66bb28d1..459cbaee990f 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -210,7 +210,6 @@ config DEVFREQ_SIMPLE_DEV tristate "Device driver for simple clock device with no status info" select DEVFREQ_GOV_PERFORMANCE select DEVFREQ_GOV_POWERSAVE - select DEVFREQ_GOV_USERSPACE select DEVFREQ_GOV_CPUFREQ help Device driver for simple devices that control their frequency using @@ -221,7 +220,6 @@ config QCOM_DEVFREQ_DEVBW depends on ARCH_QCOM select DEVFREQ_GOV_PERFORMANCE select DEVFREQ_GOV_POWERSAVE - select DEVFREQ_GOV_USERSPACE select DEVFREQ_GOV_CPUFREQ default n help diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 64e86ad63d0a..63fe0520b4df 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -420,11 +420,6 @@ static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type, static void _remove_devfreq(struct devfreq *devfreq) { mutex_lock(&devfreq_list_lock); - if (IS_ERR(find_device_devfreq(devfreq->dev.parent))) { - mutex_unlock(&devfreq_list_lock); - dev_warn(&devfreq->dev, "releasing devfreq which doesn't exist\n"); - return; - } list_del(&devfreq->node); mutex_unlock(&devfreq_list_lock); @@ -496,6 +491,7 @@ struct devfreq *devfreq_add_device(struct device *dev, devfreq->dev.parent = dev; devfreq->dev.class = devfreq_class; devfreq->dev.release = devfreq_dev_release; + INIT_LIST_HEAD(&devfreq->node); devfreq->profile = profile; strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN); devfreq->previous_freq = profile->initial_freq; diff --git a/drivers/devfreq/governor_bw_hwmon.c b/drivers/devfreq/governor_bw_hwmon.c index 972de02ca549..93a820315389 100644 --- a/drivers/devfreq/governor_bw_hwmon.c +++ b/drivers/devfreq/governor_bw_hwmon.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -175,7 +175,7 @@ static DEVICE_ATTR(__attr, 0644, show_list_##__attr, store_list_##__attr) #define MAX_MS 500U /* Returns MBps of read/writes for the sampling window. */ -static unsigned int bytes_to_mbps(long long bytes, unsigned int us) +static unsigned long bytes_to_mbps(unsigned long long bytes, unsigned int us) { bytes *= USEC_PER_SEC; do_div(bytes, us); @@ -866,6 +866,7 @@ static int devfreq_bw_hwmon_ev_handler(struct devfreq *df, if (ret) { dev_err(df->dev.parent, "Unable to resume HW monitor (%d)\n", ret); + mutex_unlock(&sync_lock); return ret; } mutex_unlock(&sync_lock); diff --git a/drivers/devfreq/governor_memlat.c b/drivers/devfreq/governor_memlat.c index a3c826e152e1..6a8448955183 100644 --- a/drivers/devfreq/governor_memlat.c +++ b/drivers/devfreq/governor_memlat.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -245,7 +245,11 @@ static int devfreq_memlat_get_freq(struct devfreq *df, hw->core_stats[i].mem_count, hw->core_stats[i].freq, ratio); - if (ratio && ratio <= node->ratio_ceil + if (!hw->core_stats[i].inst_count + || !hw->core_stats[i].freq) + continue; + + if (ratio <= node->ratio_ceil && hw->core_stats[i].freq > max_freq) { lat_dev = i; max_freq = hw->core_stats[i].freq; diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 64a2e02b87d7..0b0de6a049af 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -79,6 +79,8 @@ #define KHZ 1000 +#define KHZ_MAX (ULONG_MAX / KHZ) + /* Assume that the bus is saturated if the utilization is 25% */ #define BUS_SATURATION_RATIO 25 @@ -179,7 +181,7 @@ struct tegra_actmon_emc_ratio { }; static struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { - { 1400000, ULONG_MAX }, + { 1400000, KHZ_MAX }, { 1200000, 750000 }, { 1100000, 600000 }, { 1000000, 500000 }, |