Lines Matching refs:key
212 union futex_key key; member
242 union futex_key key; member
251 .key = FUTEX_KEY_INIT,
339 static inline void futex_get_mm(union futex_key *key) in futex_get_mm() argument
341 atomic_inc(&key->private.mm->mm_count); in futex_get_mm()
391 static struct futex_hash_bucket *hash_futex(union futex_key *key) in hash_futex() argument
393 u32 hash = jhash2((u32*)&key->both.word, in hash_futex()
394 (sizeof(key->both.word)+sizeof(key->both.ptr))/4, in hash_futex()
395 key->both.offset); in hash_futex()
420 static void get_futex_key_refs(union futex_key *key) in get_futex_key_refs() argument
422 if (!key->both.ptr) in get_futex_key_refs()
435 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) { in get_futex_key_refs()
437 ihold(key->shared.inode); /* implies smp_mb(); (B) */ in get_futex_key_refs()
440 futex_get_mm(key); /* implies smp_mb(); (B) */ in get_futex_key_refs()
458 static void drop_futex_key_refs(union futex_key *key) in drop_futex_key_refs() argument
460 if (!key->both.ptr) { in drop_futex_key_refs()
469 switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) { in drop_futex_key_refs()
471 iput(key->shared.inode); in drop_futex_key_refs()
474 mmdrop(key->private.mm); in drop_futex_key_refs()
498 get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw) in get_futex_key() argument
509 key->both.offset = address % PAGE_SIZE; in get_futex_key()
512 address -= key->both.offset; in get_futex_key()
528 key->private.mm = mm; in get_futex_key()
529 key->private.address = address; in get_futex_key()
530 get_futex_key_refs(key); /* implies smp_mb(); (B) */ in get_futex_key()
629 key->both.offset |= FUT_OFF_MMSHARED; /* ref taken on mm */ in get_futex_key()
630 key->private.mm = mm; in get_futex_key()
631 key->private.address = address; in get_futex_key()
633 get_futex_key_refs(key); /* implies smp_mb(); (B) */ in get_futex_key()
694 key->both.offset |= FUT_OFF_INODE; /* inode-based key */ in get_futex_key()
695 key->shared.inode = inode; in get_futex_key()
696 key->shared.pgoff = basepage_index(tail); in get_futex_key()
705 static inline void put_futex_key(union futex_key *key) in put_futex_key() argument
707 drop_futex_key_refs(key); in put_futex_key()
743 union futex_key *key) in futex_top_waiter() argument
748 if (match_futex(&this->key, key)) in futex_top_waiter()
797 pi_state->key = FUTEX_KEY_INIT; in refill_pi_state_cache()
882 union futex_key key = FUTEX_KEY_INIT; in exit_pi_state_list() local
896 key = pi_state->key; in exit_pi_state_list()
897 hb = hash_futex(&key); in exit_pi_state_list()
1053 static int attach_to_pi_owner(u32 uval, union futex_key *key, in attach_to_pi_owner() argument
1107 pi_state->key = *key; in attach_to_pi_owner()
1122 union futex_key *key, struct futex_pi_state **ps) in lookup_pi_state() argument
1124 struct futex_q *match = futex_top_waiter(hb, key); in lookup_pi_state()
1137 return attach_to_pi_owner(uval, key, ps); in lookup_pi_state()
1173 union futex_key *key, in futex_lock_pi_atomic() argument
1204 match = futex_top_waiter(hb, key); in futex_lock_pi_atomic()
1245 return attach_to_pi_owner(uval, key, ps); in futex_lock_pi_atomic()
1417 union futex_key key = FUTEX_KEY_INIT; in futex_wake() local
1424 ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, VERIFY_READ); in futex_wake()
1428 hb = hash_futex(&key); in futex_wake()
1437 if (match_futex (&this->key, &key)) { in futex_wake()
1456 put_futex_key(&key); in futex_wake()
1520 if (match_futex (&this->key, &key1)) { in futex_wake_op()
1534 if (match_futex (&this->key, &key2)) { in futex_wake_op()
1582 q->key = *key2; in requeue_futex()
1600 void requeue_pi_wake_futex(struct futex_q *q, union futex_key *key, in requeue_pi_wake_futex() argument
1603 get_futex_key_refs(key); in requeue_pi_wake_futex()
1604 q->key = *key; in requeue_pi_wake_futex()
1871 if (!match_futex(&this->key, &key1)) in futex_requeue()
1988 hb = hash_futex(&q->key); in queue_lock()
2098 drop_futex_key_refs(&q->key); in unqueue_me()
2372 ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, VERIFY_READ); in futex_wait_setup()
2391 put_futex_key(&q->key); in futex_wait_setup()
2402 put_futex_key(&q->key); in futex_wait_setup()
2526 ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q.key, VERIFY_WRITE); in futex_lock_pi()
2533 ret = futex_lock_pi_atomic(uaddr, hb, &q.key, &q.pi_state, current, 0); in futex_lock_pi()
2554 put_futex_key(&q.key); in futex_lock_pi()
2608 put_futex_key(&q.key); in futex_lock_pi()
2624 put_futex_key(&q.key); in futex_lock_pi()
2636 union futex_key key = FUTEX_KEY_INIT; in futex_unlock_pi() local
2650 ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, VERIFY_WRITE); in futex_unlock_pi()
2654 hb = hash_futex(&key); in futex_unlock_pi()
2662 match = futex_top_waiter(hb, &key); in futex_unlock_pi()
2683 put_futex_key(&key); in futex_unlock_pi()
2711 put_futex_key(&key); in futex_unlock_pi()
2716 put_futex_key(&key); in futex_unlock_pi()
2755 if (!match_futex(&q->key, key2)) { in handle_early_requeue_pi_wakeup()
2870 if (match_futex(&q.key, &key2)) { in futex_wait_requeue_pi()
2962 put_futex_key(&q.key); in futex_wait_requeue_pi()