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

Merge back earlier 'pm-runtime' material for 3.19-rc1.

+34 -36
+1
arch/ia64/Kconfig
··· 233 233 config IA64_HP_SIM 234 234 bool "Ski-simulator" 235 235 select SWIOTLB 236 + depends on !PM_RUNTIME 236 237 237 238 endchoice 238 239
+32 -35
drivers/base/power/runtime.c
··· 13 13 #include <trace/events/rpm.h> 14 14 #include "power.h" 15 15 16 - #define RPM_GET_CALLBACK(dev, cb) \ 17 - ({ \ 18 - int (*__rpm_cb)(struct device *__d); \ 19 - \ 20 - if (dev->pm_domain) \ 21 - __rpm_cb = dev->pm_domain->ops.cb; \ 22 - else if (dev->type && dev->type->pm) \ 23 - __rpm_cb = dev->type->pm->cb; \ 24 - else if (dev->class && dev->class->pm) \ 25 - __rpm_cb = dev->class->pm->cb; \ 26 - else if (dev->bus && dev->bus->pm) \ 27 - __rpm_cb = dev->bus->pm->cb; \ 28 - else \ 29 - __rpm_cb = NULL; \ 30 - \ 31 - if (!__rpm_cb && dev->driver && dev->driver->pm) \ 32 - __rpm_cb = dev->driver->pm->cb; \ 33 - \ 34 - __rpm_cb; \ 35 - }) 16 + typedef int (*pm_callback_t)(struct device *); 36 17 37 - static int (*rpm_get_suspend_cb(struct device *dev))(struct device *) 18 + static pm_callback_t __rpm_get_callback(struct device *dev, size_t cb_offset) 38 19 { 39 - return RPM_GET_CALLBACK(dev, runtime_suspend); 20 + pm_callback_t cb; 21 + const struct dev_pm_ops *ops; 22 + 23 + if (dev->pm_domain) 24 + ops = &dev->pm_domain->ops; 25 + else if (dev->type && dev->type->pm) 26 + ops = dev->type->pm; 27 + else if (dev->class && dev->class->pm) 28 + ops = dev->class->pm; 29 + else if (dev->bus && dev->bus->pm) 30 + ops = dev->bus->pm; 31 + else 32 + ops = NULL; 33 + 34 + if (ops) 35 + cb = *(pm_callback_t *)((void *)ops + cb_offset); 36 + else 37 + cb = NULL; 38 + 39 + if (!cb && dev->driver && dev->driver->pm) 40 + cb = *(pm_callback_t *)((void *)dev->driver->pm + cb_offset); 41 + 42 + return cb; 40 43 } 41 44 42 - static int (*rpm_get_resume_cb(struct device *dev))(struct device *) 43 - { 44 - return RPM_GET_CALLBACK(dev, runtime_resume); 45 - } 45 + #define RPM_GET_CALLBACK(dev, callback) \ 46 + __rpm_get_callback(dev, offsetof(struct dev_pm_ops, callback)) 46 47 47 48 #ifdef CONFIG_PM_RUNTIME 48 - static int (*rpm_get_idle_cb(struct device *dev))(struct device *) 49 - { 50 - return RPM_GET_CALLBACK(dev, runtime_idle); 51 - } 52 49 53 50 static int rpm_resume(struct device *dev, int rpmflags); 54 51 static int rpm_suspend(struct device *dev, int rpmflags); ··· 344 347 345 348 dev->power.idle_notification = true; 346 349 347 - callback = rpm_get_idle_cb(dev); 350 + callback = RPM_GET_CALLBACK(dev, runtime_idle); 348 351 349 352 if (callback) 350 353 retval = __rpm_callback(callback, dev); ··· 514 517 515 518 __update_runtime_status(dev, RPM_SUSPENDING); 516 519 517 - callback = rpm_get_suspend_cb(dev); 520 + callback = RPM_GET_CALLBACK(dev, runtime_suspend); 518 521 519 522 retval = rpm_callback(callback, dev); 520 523 if (retval) ··· 734 737 735 738 __update_runtime_status(dev, RPM_RESUMING); 736 739 737 - callback = rpm_get_resume_cb(dev); 740 + callback = RPM_GET_CALLBACK(dev, runtime_resume); 738 741 739 742 retval = rpm_callback(callback, dev); 740 743 if (retval) { ··· 1428 1431 if (pm_runtime_status_suspended(dev)) 1429 1432 return 0; 1430 1433 1431 - callback = rpm_get_suspend_cb(dev); 1434 + callback = RPM_GET_CALLBACK(dev, runtime_suspend); 1432 1435 1433 1436 if (!callback) { 1434 1437 ret = -ENOSYS; ··· 1464 1467 int (*callback)(struct device *); 1465 1468 int ret = 0; 1466 1469 1467 - callback = rpm_get_resume_cb(dev); 1470 + callback = RPM_GET_CALLBACK(dev, runtime_resume); 1468 1471 1469 1472 if (!callback) { 1470 1473 ret = -ENOSYS;
+1 -1
kernel/power/Kconfig
··· 94 94 config PM_SLEEP 95 95 def_bool y 96 96 depends on SUSPEND || HIBERNATE_CALLBACKS 97 + select PM_RUNTIME 97 98 98 99 config PM_SLEEP_SMP 99 100 def_bool y ··· 132 131 133 132 config PM_RUNTIME 134 133 bool "Run-time PM core functionality" 135 - depends on !IA64_HP_SIM 136 134 ---help--- 137 135 Enable functionality allowing I/O devices to be put into energy-saving 138 136 (low power) states at run time (or autosuspended) after a specified