• Home
  • Raw
  • Download

Lines Matching refs:hwlock

88 int __hwspin_trylock(struct hwspinlock *hwlock, int mode, unsigned long *flags)  in __hwspin_trylock()  argument
92 BUG_ON(!hwlock); in __hwspin_trylock()
109 ret = spin_trylock_irqsave(&hwlock->lock, *flags); in __hwspin_trylock()
111 ret = spin_trylock_irq(&hwlock->lock); in __hwspin_trylock()
113 ret = spin_trylock(&hwlock->lock); in __hwspin_trylock()
120 ret = hwlock->bank->ops->trylock(hwlock); in __hwspin_trylock()
125 spin_unlock_irqrestore(&hwlock->lock, *flags); in __hwspin_trylock()
127 spin_unlock_irq(&hwlock->lock); in __hwspin_trylock()
129 spin_unlock(&hwlock->lock); in __hwspin_trylock()
177 int __hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int to, in __hwspin_lock_timeout() argument
187 ret = __hwspin_trylock(hwlock, mode, flags); in __hwspin_lock_timeout()
202 if (hwlock->bank->ops->relax) in __hwspin_lock_timeout()
203 hwlock->bank->ops->relax(hwlock); in __hwspin_lock_timeout()
229 void __hwspin_unlock(struct hwspinlock *hwlock, int mode, unsigned long *flags) in __hwspin_unlock() argument
231 BUG_ON(!hwlock); in __hwspin_unlock()
248 hwlock->bank->ops->unlock(hwlock); in __hwspin_unlock()
252 spin_unlock_irqrestore(&hwlock->lock, *flags); in __hwspin_unlock()
254 spin_unlock_irq(&hwlock->lock); in __hwspin_unlock()
256 spin_unlock(&hwlock->lock); in __hwspin_unlock()
260 static int hwspin_lock_register_single(struct hwspinlock *hwlock, int id) in hwspin_lock_register_single() argument
267 ret = radix_tree_insert(&hwspinlock_tree, id, hwlock); in hwspin_lock_register_single()
278 WARN_ON(tmp != hwlock); in hwspin_lock_register_single()
287 struct hwspinlock *hwlock = NULL; in hwspin_lock_unregister_single() local
299 hwlock = radix_tree_delete(&hwspinlock_tree, id); in hwspin_lock_unregister_single()
300 if (!hwlock) { in hwspin_lock_unregister_single()
307 return hwlock; in hwspin_lock_unregister_single()
328 struct hwspinlock *hwlock; in hwspin_lock_register() local
343 hwlock = &bank->lock[i]; in hwspin_lock_register()
345 spin_lock_init(&hwlock->lock); in hwspin_lock_register()
346 hwlock->bank = bank; in hwspin_lock_register()
348 ret = hwspin_lock_register_single(hwlock, base_id + i); in hwspin_lock_register()
375 struct hwspinlock *hwlock, *tmp; in hwspin_lock_unregister() local
379 hwlock = &bank->lock[i]; in hwspin_lock_unregister()
386 WARN_ON(tmp != hwlock); in hwspin_lock_unregister()
403 static int __hwspin_lock_request(struct hwspinlock *hwlock) in __hwspin_lock_request() argument
405 struct device *dev = hwlock->bank->dev; in __hwspin_lock_request()
425 tmp = radix_tree_tag_clear(&hwspinlock_tree, hwlock_to_id(hwlock), in __hwspin_lock_request()
429 WARN_ON(tmp != hwlock); in __hwspin_lock_request()
440 int hwspin_lock_get_id(struct hwspinlock *hwlock) in hwspin_lock_get_id() argument
442 if (!hwlock) { in hwspin_lock_get_id()
447 return hwlock_to_id(hwlock); in hwspin_lock_get_id()
466 struct hwspinlock *hwlock; in hwspin_lock_request() local
472 ret = radix_tree_gang_lookup_tag(&hwspinlock_tree, (void **)&hwlock, in hwspin_lock_request()
476 hwlock = NULL; in hwspin_lock_request()
484 ret = __hwspin_lock_request(hwlock); in hwspin_lock_request()
486 hwlock = NULL; in hwspin_lock_request()
490 return hwlock; in hwspin_lock_request()
509 struct hwspinlock *hwlock; in hwspin_lock_request_specific() local
515 hwlock = radix_tree_lookup(&hwspinlock_tree, id); in hwspin_lock_request_specific()
516 if (!hwlock) { in hwspin_lock_request_specific()
522 WARN_ON(hwlock_to_id(hwlock) != id); in hwspin_lock_request_specific()
528 hwlock = NULL; in hwspin_lock_request_specific()
533 ret = __hwspin_lock_request(hwlock); in hwspin_lock_request_specific()
535 hwlock = NULL; in hwspin_lock_request_specific()
539 return hwlock; in hwspin_lock_request_specific()
555 int hwspin_lock_free(struct hwspinlock *hwlock) in hwspin_lock_free() argument
561 if (!hwlock) { in hwspin_lock_free()
566 dev = hwlock->bank->dev; in hwspin_lock_free()
570 ret = radix_tree_tag_get(&hwspinlock_tree, hwlock_to_id(hwlock), in hwspin_lock_free()
585 tmp = radix_tree_tag_set(&hwspinlock_tree, hwlock_to_id(hwlock), in hwspin_lock_free()
589 WARN_ON(tmp != hwlock); in hwspin_lock_free()