Lines Matching +full:wakeup +full:- +full:capable

1 // SPDX-License-Identifier: GPL-2.0
5 * User space wakeup sources support.
48 if (wl->ws->active == show_active) in pm_show_wakelocks()
49 len += sysfs_emit_at(buf, len, "%s ", wl->name); in pm_show_wakelocks()
53 --len; in pm_show_wakelocks()
76 number_of_wakelocks--; in decrement_wakelocks_number()
95 list_add(&wl->lru, &wakelocks_lru_list); in wakelocks_lru_add()
100 list_move(&wl->lru, &wakelocks_lru_list); in wakelocks_lru_most_recent()
115 spin_lock_irq(&wl->ws->lock); in __wakelocks_gc()
116 idle_time_ns = ktime_to_ns(ktime_sub(now, wl->ws->last_time)); in __wakelocks_gc()
117 active = wl->ws->active; in __wakelocks_gc()
118 spin_unlock_irq(&wl->ws->lock); in __wakelocks_gc()
124 wakeup_source_unregister(wl->ws); in __wakelocks_gc()
125 rb_erase(&wl->node, &wakelocks_tree); in __wakelocks_gc()
126 list_del(&wl->lru); in __wakelocks_gc()
127 kfree(wl->name); in __wakelocks_gc()
162 diff = strncmp(name, wl->name, len); in wakelock_lookup_add()
164 if (wl->name[len]) in wakelock_lookup_add()
165 diff = -1; in wakelock_lookup_add()
170 node = &(*node)->rb_left; in wakelock_lookup_add()
172 node = &(*node)->rb_right; in wakelock_lookup_add()
175 return ERR_PTR(-EINVAL); in wakelock_lookup_add()
178 return ERR_PTR(-ENOSPC); in wakelock_lookup_add()
183 return ERR_PTR(-ENOMEM); in wakelock_lookup_add()
185 wl->name = kstrndup(name, len, GFP_KERNEL); in wakelock_lookup_add()
186 if (!wl->name) { in wakelock_lookup_add()
188 return ERR_PTR(-ENOMEM); in wakelock_lookup_add()
191 wl->ws = wakeup_source_register(NULL, wl->name); in wakelock_lookup_add()
192 if (!wl->ws) { in wakelock_lookup_add()
193 kfree(wl->name); in wakelock_lookup_add()
195 return ERR_PTR(-ENOMEM); in wakelock_lookup_add()
197 wl->ws->last_time = ktime_get(); in wakelock_lookup_add()
199 rb_link_node(&wl->node, parent, node); in wakelock_lookup_add()
200 rb_insert_color(&wl->node, &wakelocks_tree); in wakelock_lookup_add()
214 if (!capable(CAP_BLOCK_SUSPEND)) in pm_wake_lock()
215 return -EPERM; in pm_wake_lock()
220 len = str - buf; in pm_wake_lock()
222 return -EINVAL; in pm_wake_lock()
228 return -EINVAL; in pm_wake_lock()
239 u64 timeout_ms = timeout_ns + NSEC_PER_MSEC - 1; in pm_wake_lock()
242 __pm_wakeup_event(wl->ws, timeout_ms); in pm_wake_lock()
244 __pm_stay_awake(wl->ws); in pm_wake_lock()
260 if (!capable(CAP_BLOCK_SUSPEND)) in pm_wake_unlock()
261 return -EPERM; in pm_wake_unlock()
265 return -EINVAL; in pm_wake_unlock()
267 if (buf[len-1] == '\n') in pm_wake_unlock()
268 len--; in pm_wake_unlock()
271 return -EINVAL; in pm_wake_unlock()
280 __pm_relax(wl->ws); in pm_wake_unlock()