diff options
author | Varun Wadekar <vwadekar@nvidia.com> | 2012-07-23 13:33:18 +0530 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2012-07-23 13:44:45 +0530 |
commit | 26f05f47e2eda472ae43b7c00d36f249d8a913ea (patch) | |
tree | 176583a8a33a11b20444638d4356b679c99e79ae /kernel | |
parent | 42511dd658956ca5481dafcc1ef639eed9324359 (diff) |
Revert "PM: Add user-space wake lock api."
This reverts commit 4a17311edfa17c502d4f5a64c569d0c4ec129f44 and
commit 4d09c863239d323e34a8e59cc738f126d7ed3382.
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/Kconfig | 10 | ||||
-rw-r--r-- | kernel/power/Makefile | 1 | ||||
-rw-r--r-- | kernel/power/main.c | 9 | ||||
-rw-r--r-- | kernel/power/power.h | 11 | ||||
-rw-r--r-- | kernel/power/userwakelock.c | 219 |
5 files changed, 0 insertions, 250 deletions
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 3fe601b9db0e..c09bbc931058 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -26,16 +26,6 @@ config WAKELOCK bool default y -config USER_WAKELOCK - bool "Userspace wake locks" - depends on PM_SLEEP - default y - ---help--- - User-space wake lock api. Write "lockname" or "lockname timeout" - to /sys/power/wake_lock lock and if needed create a wake lock. - Write "lockname" to /sys/power/wake_unlock to unlock a user wake - lock. - config HIBERNATE_CALLBACKS bool diff --git a/kernel/power/Makefile b/kernel/power/Makefile index 7f51f84d530c..c0708ae9d332 100644 --- a/kernel/power/Makefile +++ b/kernel/power/Makefile @@ -9,7 +9,6 @@ obj-$(CONFIG_SUSPEND) += suspend.o obj-$(CONFIG_PM_TEST_SUSPEND) += suspend_test.o obj-$(CONFIG_HIBERNATION) += hibernate.o snapshot.o swap.o user.o \ block_io.o -obj-$(CONFIG_USER_WAKELOCK) += userwakelock.o obj-$(CONFIG_SUSPEND_TIME) += suspend_time.o obj-$(CONFIG_MAGIC_SYSRQ) += poweroff.o diff --git a/kernel/power/main.c b/kernel/power/main.c index 7f3c91a634cd..1c12581f1c62 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -400,11 +400,6 @@ power_attr(pm_trace_dev_match); #endif /* CONFIG_PM_TRACE */ -#ifdef CONFIG_USER_WAKELOCK -power_attr(wake_lock); -power_attr(wake_unlock); -#endif - static struct attribute * g[] = { &state_attr.attr, #ifdef CONFIG_PM_TRACE @@ -417,10 +412,6 @@ static struct attribute * g[] = { #ifdef CONFIG_PM_DEBUG &pm_test_attr.attr, #endif -#ifdef CONFIG_USER_WAKELOCK - &wake_lock_attr.attr, - &wake_unlock_attr.attr, -#endif #endif NULL, }; diff --git a/kernel/power/power.h b/kernel/power/power.h index c4ecb81cb4fe..98f3622d7407 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h @@ -264,14 +264,3 @@ static inline void suspend_thaw_processes(void) { } #endif - -#ifdef CONFIG_USER_WAKELOCK -ssize_t wake_lock_show(struct kobject *kobj, struct kobj_attribute *attr, - char *buf); -ssize_t wake_lock_store(struct kobject *kobj, struct kobj_attribute *attr, - const char *buf, size_t n); -ssize_t wake_unlock_show(struct kobject *kobj, struct kobj_attribute *attr, - char *buf); -ssize_t wake_unlock_store(struct kobject *kobj, struct kobj_attribute *attr, - const char *buf, size_t n); -#endif diff --git a/kernel/power/userwakelock.c b/kernel/power/userwakelock.c deleted file mode 100644 index a28a8db41468..000000000000 --- a/kernel/power/userwakelock.c +++ /dev/null @@ -1,219 +0,0 @@ -/* kernel/power/userwakelock.c - * - * Copyright (C) 2005-2008 Google, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include <linux/ctype.h> -#include <linux/module.h> -#include <linux/wakelock.h> -#include <linux/slab.h> - -#include "power.h" - -enum { - DEBUG_FAILURE = BIT(0), - DEBUG_ERROR = BIT(1), - DEBUG_NEW = BIT(2), - DEBUG_ACCESS = BIT(3), - DEBUG_LOOKUP = BIT(4), -}; -static int debug_mask = DEBUG_FAILURE; -module_param_named(debug_mask, debug_mask, int, S_IRUGO | S_IWUSR | S_IWGRP); - -static DEFINE_MUTEX(tree_lock); - -struct user_wake_lock { - struct rb_node node; - struct wake_lock wake_lock; - char name[0]; -}; -struct rb_root user_wake_locks; - -static struct user_wake_lock *lookup_wake_lock_name( - const char *buf, int allocate, long *timeoutptr) -{ - struct rb_node **p = &user_wake_locks.rb_node; - struct rb_node *parent = NULL; - struct user_wake_lock *l; - int diff; - u64 timeout; - int name_len; - const char *arg; - - /* Find length of lock name and start of optional timeout string */ - arg = buf; - while (*arg && !isspace(*arg)) - arg++; - name_len = arg - buf; - if (!name_len) - goto bad_arg; - while (isspace(*arg)) - arg++; - - /* Process timeout string */ - if (timeoutptr && *arg) { - timeout = simple_strtoull(arg, (char **)&arg, 0); - while (isspace(*arg)) - arg++; - if (*arg) - goto bad_arg; - /* convert timeout from nanoseconds to jiffies > 0 */ - timeout += (NSEC_PER_SEC / HZ) - 1; - do_div(timeout, (NSEC_PER_SEC / HZ)); - if (timeout <= 0) - timeout = 1; - *timeoutptr = timeout; - } else if (*arg) - goto bad_arg; - else if (timeoutptr) - *timeoutptr = 0; - - /* Lookup wake lock in rbtree */ - while (*p) { - parent = *p; - l = rb_entry(parent, struct user_wake_lock, node); - diff = strncmp(buf, l->name, name_len); - if (!diff && l->name[name_len]) - diff = -1; - if (debug_mask & DEBUG_ERROR) - pr_info("lookup_wake_lock_name: compare %.*s %s %d\n", - name_len, buf, l->name, diff); - - if (diff < 0) - p = &(*p)->rb_left; - else if (diff > 0) - p = &(*p)->rb_right; - else - return l; - } - - /* Allocate and add new wakelock to rbtree */ - if (!allocate) { - if (debug_mask & DEBUG_ERROR) - pr_info("lookup_wake_lock_name: %.*s not found\n", - name_len, buf); - return ERR_PTR(-EINVAL); - } - l = kzalloc(sizeof(*l) + name_len + 1, GFP_KERNEL); - if (l == NULL) { - if (debug_mask & DEBUG_FAILURE) - pr_err("lookup_wake_lock_name: failed to allocate " - "memory for %.*s\n", name_len, buf); - return ERR_PTR(-ENOMEM); - } - memcpy(l->name, buf, name_len); - if (debug_mask & DEBUG_NEW) - pr_info("lookup_wake_lock_name: new wake lock %s\n", l->name); - wake_lock_init(&l->wake_lock, WAKE_LOCK_SUSPEND, l->name); - rb_link_node(&l->node, parent, p); - rb_insert_color(&l->node, &user_wake_locks); - return l; - -bad_arg: - if (debug_mask & DEBUG_ERROR) - pr_info("lookup_wake_lock_name: wake lock, %.*s, bad arg, %s\n", - name_len, buf, arg); - return ERR_PTR(-EINVAL); -} - -ssize_t wake_lock_show( - struct kobject *kobj, struct kobj_attribute *attr, char *buf) -{ - char *s = buf; - char *end = buf + PAGE_SIZE; - struct rb_node *n; - struct user_wake_lock *l; - - mutex_lock(&tree_lock); - - for (n = rb_first(&user_wake_locks); n != NULL; n = rb_next(n)) { - l = rb_entry(n, struct user_wake_lock, node); - if (wake_lock_active(&l->wake_lock)) - s += scnprintf(s, end - s, "%s ", l->name); - } - s += scnprintf(s, end - s, "\n"); - - mutex_unlock(&tree_lock); - return (s - buf); -} - -ssize_t wake_lock_store( - struct kobject *kobj, struct kobj_attribute *attr, - const char *buf, size_t n) -{ - long timeout; - struct user_wake_lock *l; - - mutex_lock(&tree_lock); - l = lookup_wake_lock_name(buf, 1, &timeout); - if (IS_ERR(l)) { - n = PTR_ERR(l); - goto bad_name; - } - - if (debug_mask & DEBUG_ACCESS) - pr_info("wake_lock_store: %s, timeout %ld\n", l->name, timeout); - - if (timeout) - wake_lock_timeout(&l->wake_lock, timeout); - else - wake_lock(&l->wake_lock); -bad_name: - mutex_unlock(&tree_lock); - return n; -} - - -ssize_t wake_unlock_show( - struct kobject *kobj, struct kobj_attribute *attr, char *buf) -{ - char *s = buf; - char *end = buf + PAGE_SIZE; - struct rb_node *n; - struct user_wake_lock *l; - - mutex_lock(&tree_lock); - - for (n = rb_first(&user_wake_locks); n != NULL; n = rb_next(n)) { - l = rb_entry(n, struct user_wake_lock, node); - if (!wake_lock_active(&l->wake_lock)) - s += scnprintf(s, end - s, "%s ", l->name); - } - s += scnprintf(s, end - s, "\n"); - - mutex_unlock(&tree_lock); - return (s - buf); -} - -ssize_t wake_unlock_store( - struct kobject *kobj, struct kobj_attribute *attr, - const char *buf, size_t n) -{ - struct user_wake_lock *l; - - mutex_lock(&tree_lock); - l = lookup_wake_lock_name(buf, 0, NULL); - if (IS_ERR(l)) { - n = PTR_ERR(l); - goto not_found; - } - - if (debug_mask & DEBUG_ACCESS) - pr_info("wake_unlock_store: %s\n", l->name); - - wake_unlock(&l->wake_lock); -not_found: - mutex_unlock(&tree_lock); - return n; -} - |