PM / Sleep: Add user space interface for manipulating wakeup sources, v3

Android allows user space to manipulate wakelocks using two
sysfs file
located in /sys/power/, wake_lock and wake_unlock.
Writing a wakelock
name and optionally a timeout to the wake_lock
file causes the wakelock
whose name was written to be acquired (it
is created before is
necessary), optionally with the given timeout.
Writing the name of a
wakelock to wake_unlock causes that wakelock
to be released.

Implement
an analogous interface for user space using wakeup sources.
Add the
/sys/power/wake_lock and /sys/power/wake_unlock files
allowing user
space to create, activate and deactivate wakeup
sources, such that
writing a name and optionally a timeout to
wake_lock causes the wakeup
source of that name to be activated,
optionally with the given timeout.
If that wakeup source doesn't
exist, it will be created and then
activated.  Writing a name to
wake_unlock causes the wakeup source of
that name, if there is one,
to be deactivated.  Wakeup sources created
with the help of
wake_lock that haven't been used for more than 5
minutes are garbage
collected and destroyed.  Moreover, there can be
only WL_NUMBER_LIMIT
wakeup sources created with the help of wake_lock
present at a time.

The data type used to track wakeup sources created
by user space is
called "struct wakelock" to indicate the origins of
this feature.

This version of the patch includes an rbtree manipulation
fix from John Stultz.

Change-Id:
Icb452cfd54362b49dcb1cff88345928a2528ad97
Signed-off-by: Rafael J.
Wysocki <rjw@sisk.pl>
Acked-by: Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Reviewed-by: NeilBrown
<neilb@suse.de>
Git-commit: b86ff98
Git-repo:
git://codeaurora.org/kernel/msm.git
[anursing@codeaurora.org: replace
existing implementation, resolve
merge conflicts]
Signed-off-by: Anurag
Singh <anursing@codeaurora.org>

Conflicts:

kernel/power/wakelock.c

idea is taken here -
https://github.com/rmbq/android_kernel_htc_msm8960/commit/834eb328c4cff9004b2b1c83d888bd8e8f204a63