Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PM / Domains: Fix build for CONFIG_PM_RUNTIME unset

Function genpd_queue_power_off_work() is not defined for
CONFIG_PM_RUNTIME, so pm_genpd_poweroff_unused() causes a build
error to happen in that case. Fix the problem by making
pm_genpd_poweroff_unused() depend on CONFIG_PM_RUNTIME too.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>

+26 -18
+15 -15
drivers/base/power/domain.c
··· 460 460 return 0; 461 461 } 462 462 463 + /** 464 + * pm_genpd_poweroff_unused - Power off all PM domains with no devices in use. 465 + */ 466 + void pm_genpd_poweroff_unused(void) 467 + { 468 + struct generic_pm_domain *genpd; 469 + 470 + mutex_lock(&gpd_list_lock); 471 + 472 + list_for_each_entry(genpd, &gpd_list, gpd_list_node) 473 + genpd_queue_power_off_work(genpd); 474 + 475 + mutex_unlock(&gpd_list_lock); 476 + } 477 + 463 478 #else 464 479 465 480 static inline void genpd_power_off_work_fn(struct work_struct *work) {} ··· 1268 1253 genpd->domain.ops.complete = pm_genpd_complete; 1269 1254 mutex_lock(&gpd_list_lock); 1270 1255 list_add(&genpd->gpd_list_node, &gpd_list); 1271 - mutex_unlock(&gpd_list_lock); 1272 - } 1273 - 1274 - /** 1275 - * pm_genpd_poweroff_unused - Power off all PM domains with no devices in use. 1276 - */ 1277 - void pm_genpd_poweroff_unused(void) 1278 - { 1279 - struct generic_pm_domain *genpd; 1280 - 1281 - mutex_lock(&gpd_list_lock); 1282 - 1283 - list_for_each_entry(genpd, &gpd_list, gpd_list_node) 1284 - genpd_queue_power_off_work(genpd); 1285 - 1286 1256 mutex_unlock(&gpd_list_lock); 1287 1257 }
+7 -3
include/linux/pm_domain.h
··· 72 72 extern void pm_genpd_init(struct generic_pm_domain *genpd, 73 73 struct dev_power_governor *gov, bool is_off); 74 74 extern int pm_genpd_poweron(struct generic_pm_domain *genpd); 75 - extern void pm_genpd_poweroff_unused(void); 76 - extern void genpd_queue_power_off_work(struct generic_pm_domain *genpd); 77 75 #else 78 76 static inline int pm_genpd_add_device(struct generic_pm_domain *genpd, 79 77 struct device *dev) ··· 99 101 { 100 102 return -ENOSYS; 101 103 } 102 - static inline void pm_genpd_poweroff_unused(void) {} 104 + #endif 105 + 106 + #ifdef CONFIG_PM_GENERIC_DOMAINS_RUNTIME 107 + extern void genpd_queue_power_off_work(struct generic_pm_domain *genpd); 108 + extern void pm_genpd_poweroff_unused(void); 109 + #else 103 110 static inline void genpd_queue_power_off_work(struct generic_pm_domain *gpd) {} 111 + static inline void pm_genpd_poweroff_unused(void) {} 104 112 #endif 105 113 106 114 #endif /* _LINUX_PM_DOMAIN_H */
+4
kernel/power/Kconfig
··· 231 231 config PM_GENERIC_DOMAINS 232 232 bool 233 233 depends on PM 234 + 235 + config PM_GENERIC_DOMAINS_RUNTIME 236 + def_bool y 237 + depends on PM_RUNTIME && PM_GENERIC_DOMAINS