mirror of https://gitee.com/openkylin/linux.git
PM: wakeup: simplify the output logic of pm_show_wakelocks()
commit c9d967b2ce
upstream.
The buffer handling in pm_show_wakelocks() is tricky, and hopefully
correct. Ensure it really is correct by using sysfs_emit_at() which
handles all of the tricky string handling logic in a PAGE_SIZE buffer
for us automatically as this is a sysfs file being read from.
Reviewed-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3df5244897
commit
fb9b60bbda
|
@ -39,23 +39,20 @@ ssize_t pm_show_wakelocks(char *buf, bool show_active)
|
||||||
{
|
{
|
||||||
struct rb_node *node;
|
struct rb_node *node;
|
||||||
struct wakelock *wl;
|
struct wakelock *wl;
|
||||||
char *str = buf;
|
int len = 0;
|
||||||
char *end = buf + PAGE_SIZE;
|
|
||||||
|
|
||||||
mutex_lock(&wakelocks_lock);
|
mutex_lock(&wakelocks_lock);
|
||||||
|
|
||||||
for (node = rb_first(&wakelocks_tree); node; node = rb_next(node)) {
|
for (node = rb_first(&wakelocks_tree); node; node = rb_next(node)) {
|
||||||
wl = rb_entry(node, struct wakelock, node);
|
wl = rb_entry(node, struct wakelock, node);
|
||||||
if (wl->ws->active == show_active)
|
if (wl->ws->active == show_active)
|
||||||
str += scnprintf(str, end - str, "%s ", wl->name);
|
len += sysfs_emit_at(buf, len, "%s ", wl->name);
|
||||||
}
|
}
|
||||||
if (str > buf)
|
|
||||||
str--;
|
|
||||||
|
|
||||||
str += scnprintf(str, end - str, "\n");
|
len += sysfs_emit_at(buf, len, "\n");
|
||||||
|
|
||||||
mutex_unlock(&wakelocks_lock);
|
mutex_unlock(&wakelocks_lock);
|
||||||
return (str - buf);
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_PM_WAKELOCKS_LIMIT > 0
|
#if CONFIG_PM_WAKELOCKS_LIMIT > 0
|
||||||
|
|
Loading…
Reference in New Issue