• Home
  • Raw
  • Download

Lines Matching refs:m

28 static void install(struct slot_map *m, int count, unsigned long *map)  in install()  argument
30 spin_lock(&m->q.lock); in install()
31 m->c = m->count = count; in install()
32 m->map = map; in install()
33 wake_up_all_locked(&m->q); in install()
34 spin_unlock(&m->q.lock); in install()
37 static void mark_killed(struct slot_map *m) in mark_killed() argument
39 spin_lock(&m->q.lock); in mark_killed()
40 m->c -= m->count + 1; in mark_killed()
41 spin_unlock(&m->q.lock); in mark_killed()
44 static void run_down(struct slot_map *m) in run_down() argument
47 spin_lock(&m->q.lock); in run_down()
48 if (m->c != -1) { in run_down()
51 __add_wait_queue_entry_tail(&m->q, &wait); in run_down()
54 if (m->c == -1) in run_down()
57 spin_unlock(&m->q.lock); in run_down()
59 spin_lock(&m->q.lock); in run_down()
61 __remove_wait_queue(&m->q, &wait); in run_down()
64 m->map = NULL; in run_down()
65 spin_unlock(&m->q.lock); in run_down()
68 static void put(struct slot_map *m, int slot) in put() argument
71 spin_lock(&m->q.lock); in put()
72 __clear_bit(slot, m->map); in put()
73 v = ++m->c; in put()
75 wake_up_locked(&m->q); in put()
77 wake_up_all_locked(&m->q); in put()
78 spin_unlock(&m->q.lock); in put()
81 static int wait_for_free(struct slot_map *m) in wait_for_free() argument
89 __add_wait_queue_entry_tail_exclusive(&m->q, &wait); in wait_for_free()
92 if (m->c > 0) in wait_for_free()
95 if (m->c < 0) { in wait_for_free()
101 spin_unlock(&m->q.lock); in wait_for_free()
103 spin_lock(&m->q.lock); in wait_for_free()
104 if (unlikely(!t) && n != left && m->c < 0) in wait_for_free()
114 else if (left <= 0 && waitqueue_active(&m->q)) in wait_for_free()
115 __wake_up_locked_key(&m->q, TASK_INTERRUPTIBLE, NULL); in wait_for_free()
124 static int get(struct slot_map *m) in get() argument
127 spin_lock(&m->q.lock); in get()
128 if (unlikely(m->c <= 0)) in get()
129 res = wait_for_free(m); in get()
131 m->c--; in get()
132 res = find_first_zero_bit(m->map, m->count); in get()
133 __set_bit(res, m->map); in get()
135 spin_unlock(&m->q.lock); in get()