diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-01-01 21:09:16 -0500 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-01-04 16:28:59 -0500 |
| commit | a1e9ca6967d68209c70e616a224efa89a6b86ca6 (patch) | |
| tree | 5de17c38e1f91798105a401d8cbfe84e63f6eeae | |
| parent | 013c074f8642d8e815ad670601f8e27155a74b57 (diff) | |
PM / sleep: Add support for read-only sysfs attributes
Some sysfs attributes in /sys/power/ should really be read-only,
so add support for that, convert those attributes to read-only
and drop the stub .show() routines from them.
Original-by: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
| -rw-r--r-- | kernel/power/main.c | 17 | ||||
| -rw-r--r-- | kernel/power/power.h | 9 |
2 files changed, 11 insertions, 15 deletions
diff --git a/kernel/power/main.c b/kernel/power/main.c index b2dd4d999900..27946975eff0 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c | |||
| @@ -280,13 +280,7 @@ static ssize_t pm_wakeup_irq_show(struct kobject *kobj, | |||
| 280 | return pm_wakeup_irq ? sprintf(buf, "%u\n", pm_wakeup_irq) : -ENODATA; | 280 | return pm_wakeup_irq ? sprintf(buf, "%u\n", pm_wakeup_irq) : -ENODATA; |
| 281 | } | 281 | } |
| 282 | 282 | ||
| 283 | static ssize_t pm_wakeup_irq_store(struct kobject *kobj, | 283 | power_attr_ro(pm_wakeup_irq); |
| 284 | struct kobj_attribute *attr, | ||
| 285 | const char *buf, size_t n) | ||
| 286 | { | ||
| 287 | return -EINVAL; | ||
| 288 | } | ||
| 289 | power_attr(pm_wakeup_irq); | ||
| 290 | 284 | ||
| 291 | #else /* !CONFIG_PM_SLEEP_DEBUG */ | 285 | #else /* !CONFIG_PM_SLEEP_DEBUG */ |
| 292 | static inline void pm_print_times_init(void) {} | 286 | static inline void pm_print_times_init(void) {} |
| @@ -564,14 +558,7 @@ static ssize_t pm_trace_dev_match_show(struct kobject *kobj, | |||
| 564 | return show_trace_dev_match(buf, PAGE_SIZE); | 558 | return show_trace_dev_match(buf, PAGE_SIZE); |
| 565 | } | 559 | } |
| 566 | 560 | ||
| 567 | static ssize_t | 561 | power_attr_ro(pm_trace_dev_match); |
| 568 | pm_trace_dev_match_store(struct kobject *kobj, struct kobj_attribute *attr, | ||
| 569 | const char *buf, size_t n) | ||
| 570 | { | ||
| 571 | return -EINVAL; | ||
| 572 | } | ||
| 573 | |||
| 574 | power_attr(pm_trace_dev_match); | ||
| 575 | 562 | ||
| 576 | #endif /* CONFIG_PM_TRACE */ | 563 | #endif /* CONFIG_PM_TRACE */ |
| 577 | 564 | ||
diff --git a/kernel/power/power.h b/kernel/power/power.h index caadb566e82b..efe1b3b17c88 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
| @@ -77,6 +77,15 @@ static struct kobj_attribute _name##_attr = { \ | |||
| 77 | .store = _name##_store, \ | 77 | .store = _name##_store, \ |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | #define power_attr_ro(_name) \ | ||
| 81 | static struct kobj_attribute _name##_attr = { \ | ||
| 82 | .attr = { \ | ||
| 83 | .name = __stringify(_name), \ | ||
| 84 | .mode = S_IRUGO, \ | ||
| 85 | }, \ | ||
| 86 | .show = _name##_show, \ | ||
| 87 | } | ||
| 88 | |||
| 80 | /* Preferred image size in bytes (default 500 MB) */ | 89 | /* Preferred image size in bytes (default 500 MB) */ |
| 81 | extern unsigned long image_size; | 90 | extern unsigned long image_size; |
| 82 | /* Size of memory reserved for drivers (default SPARE_PAGES x PAGE_SIZE) */ | 91 | /* Size of memory reserved for drivers (default SPARE_PAGES x PAGE_SIZE) */ |
