aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-09-03 18:06:34 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-09-03 18:06:34 -0400
commit835f12819ba7e51c21ae8370e8be337bf82d8de4 (patch)
tree0b8190b443a05646a943ce60d5aacb5ad4d84376
parent7b01463e51f6849d0787b24d06a62efcb243dd44 (diff)
parent0a9f429ffbac64b6d1b7c478f9c049cd3badbaa1 (diff)
Merge branch 'pm-devfreq'
* pm-devfreq: PM / devfreq: Fix memory leak when fail to register device PM / devfreq: Add dependency on PM_OPP PM / devfreq: Move private devfreq_update_stats() into devfreq PM / devfreq: Convert to using %pOF instead of full_name
-rw-r--r--drivers/devfreq/Kconfig1
-rw-r--r--drivers/devfreq/devfreq-event.c4
-rw-r--r--drivers/devfreq/devfreq.c5
-rw-r--r--drivers/devfreq/governor.h4
-rw-r--r--include/linux/devfreq.h13
5 files changed, 11 insertions, 16 deletions
diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig
index 41254e702f1e..6a172d338f6d 100644
--- a/drivers/devfreq/Kconfig
+++ b/drivers/devfreq/Kconfig
@@ -1,6 +1,7 @@
1menuconfig PM_DEVFREQ 1menuconfig PM_DEVFREQ
2 bool "Generic Dynamic Voltage and Frequency Scaling (DVFS) support" 2 bool "Generic Dynamic Voltage and Frequency Scaling (DVFS) support"
3 select SRCU 3 select SRCU
4 select PM_OPP
4 help 5 help
5 A device may have a list of frequencies and voltages available. 6 A device may have a list of frequencies and voltages available.
6 devfreq, a generic DVFS framework can be registered for a device 7 devfreq, a generic DVFS framework can be registered for a device
diff --git a/drivers/devfreq/devfreq-event.c b/drivers/devfreq/devfreq-event.c
index 8648b32ebc89..d67242d87744 100644
--- a/drivers/devfreq/devfreq-event.c
+++ b/drivers/devfreq/devfreq-event.c
@@ -277,8 +277,8 @@ int devfreq_event_get_edev_count(struct device *dev)
277 sizeof(u32)); 277 sizeof(u32));
278 if (count < 0) { 278 if (count < 0) {
279 dev_err(dev, 279 dev_err(dev,
280 "failed to get the count of devfreq-event in %s node\n", 280 "failed to get the count of devfreq-event in %pOF node\n",
281 dev->of_node->full_name); 281 dev->of_node);
282 return count; 282 return count;
283 } 283 }
284 284
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index dea04871b50d..a1c4ee818614 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -564,7 +564,7 @@ struct devfreq *devfreq_add_device(struct device *dev,
564 err = device_register(&devfreq->dev); 564 err = device_register(&devfreq->dev);
565 if (err) { 565 if (err) {
566 mutex_unlock(&devfreq->lock); 566 mutex_unlock(&devfreq->lock);
567 goto err_out; 567 goto err_dev;
568 } 568 }
569 569
570 devfreq->trans_table = devm_kzalloc(&devfreq->dev, 570 devfreq->trans_table = devm_kzalloc(&devfreq->dev,
@@ -610,6 +610,9 @@ err_init:
610 mutex_unlock(&devfreq_list_lock); 610 mutex_unlock(&devfreq_list_lock);
611 611
612 device_unregister(&devfreq->dev); 612 device_unregister(&devfreq->dev);
613err_dev:
614 if (devfreq)
615 kfree(devfreq);
613err_out: 616err_out:
614 return ERR_PTR(err); 617 return ERR_PTR(err);
615} 618}
diff --git a/drivers/devfreq/governor.h b/drivers/devfreq/governor.h
index a4f2fa1091e4..cfc50a61a90d 100644
--- a/drivers/devfreq/governor.h
+++ b/drivers/devfreq/governor.h
@@ -69,4 +69,8 @@ extern int devfreq_remove_governor(struct devfreq_governor *governor);
69 69
70extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); 70extern int devfreq_update_status(struct devfreq *devfreq, unsigned long freq);
71 71
72static inline int devfreq_update_stats(struct devfreq *df)
73{
74 return df->profile->get_dev_status(df->dev.parent, &df->last_status);
75}
72#endif /* _GOVERNOR_H */ 76#endif /* _GOVERNOR_H */
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h
index 6c220e4ebb6b..597294e0cc40 100644
--- a/include/linux/devfreq.h
+++ b/include/linux/devfreq.h
@@ -214,19 +214,6 @@ extern void devm_devfreq_unregister_notifier(struct device *dev,
214extern struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, 214extern struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev,
215 int index); 215 int index);
216 216
217/**
218 * devfreq_update_stats() - update the last_status pointer in struct devfreq
219 * @df: the devfreq instance whose status needs updating
220 *
221 * Governors are recommended to use this function along with last_status,
222 * which allows other entities to reuse the last_status without affecting
223 * the values fetched later by governors.
224 */
225static inline int devfreq_update_stats(struct devfreq *df)
226{
227 return df->profile->get_dev_status(df->dev.parent, &df->last_status);
228}
229
230#if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) 217#if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND)
231/** 218/**
232 * struct devfreq_simple_ondemand_data - void *data fed to struct devfreq 219 * struct devfreq_simple_ondemand_data - void *data fed to struct devfreq