Lines Matching refs:pid_list

12 static inline union lower_chunk *get_lower_chunk(struct trace_pid_list *pid_list)  in get_lower_chunk()  argument
16 lockdep_assert_held(&pid_list->lock); in get_lower_chunk()
18 if (!pid_list->lower_list) in get_lower_chunk()
21 chunk = pid_list->lower_list; in get_lower_chunk()
22 pid_list->lower_list = chunk->next; in get_lower_chunk()
23 pid_list->free_lower_chunks--; in get_lower_chunk()
24 WARN_ON_ONCE(pid_list->free_lower_chunks < 0); in get_lower_chunk()
30 if (pid_list->free_lower_chunks <= CHUNK_REALLOC) in get_lower_chunk()
31 irq_work_queue(&pid_list->refill_irqwork); in get_lower_chunk()
36 static inline union upper_chunk *get_upper_chunk(struct trace_pid_list *pid_list) in get_upper_chunk() argument
40 lockdep_assert_held(&pid_list->lock); in get_upper_chunk()
42 if (!pid_list->upper_list) in get_upper_chunk()
45 chunk = pid_list->upper_list; in get_upper_chunk()
46 pid_list->upper_list = chunk->next; in get_upper_chunk()
47 pid_list->free_upper_chunks--; in get_upper_chunk()
48 WARN_ON_ONCE(pid_list->free_upper_chunks < 0); in get_upper_chunk()
54 if (pid_list->free_upper_chunks <= CHUNK_REALLOC) in get_upper_chunk()
55 irq_work_queue(&pid_list->refill_irqwork); in get_upper_chunk()
60 static inline void put_lower_chunk(struct trace_pid_list *pid_list, in put_lower_chunk() argument
63 lockdep_assert_held(&pid_list->lock); in put_lower_chunk()
65 chunk->next = pid_list->lower_list; in put_lower_chunk()
66 pid_list->lower_list = chunk; in put_lower_chunk()
67 pid_list->free_lower_chunks++; in put_lower_chunk()
70 static inline void put_upper_chunk(struct trace_pid_list *pid_list, in put_upper_chunk() argument
73 lockdep_assert_held(&pid_list->lock); in put_upper_chunk()
75 chunk->next = pid_list->upper_list; in put_upper_chunk()
76 pid_list->upper_list = chunk; in put_upper_chunk()
77 pid_list->free_upper_chunks++; in put_upper_chunk()
129 bool trace_pid_list_is_set(struct trace_pid_list *pid_list, unsigned int pid) in trace_pid_list_is_set() argument
139 if (!pid_list) in trace_pid_list_is_set()
145 raw_spin_lock_irqsave(&pid_list->lock, flags); in trace_pid_list_is_set()
146 upper_chunk = pid_list->upper[upper1]; in trace_pid_list_is_set()
152 raw_spin_unlock_irqrestore(&pid_list->lock, flags); in trace_pid_list_is_set()
168 int trace_pid_list_set(struct trace_pid_list *pid_list, unsigned int pid) in trace_pid_list_set() argument
178 if (!pid_list) in trace_pid_list_set()
184 raw_spin_lock_irqsave(&pid_list->lock, flags); in trace_pid_list_set()
185 upper_chunk = pid_list->upper[upper1]; in trace_pid_list_set()
187 upper_chunk = get_upper_chunk(pid_list); in trace_pid_list_set()
192 pid_list->upper[upper1] = upper_chunk; in trace_pid_list_set()
196 lower_chunk = get_lower_chunk(pid_list); in trace_pid_list_set()
206 raw_spin_unlock_irqrestore(&pid_list->lock, flags); in trace_pid_list_set()
221 int trace_pid_list_clear(struct trace_pid_list *pid_list, unsigned int pid) in trace_pid_list_clear() argument
230 if (!pid_list) in trace_pid_list_clear()
236 raw_spin_lock_irqsave(&pid_list->lock, flags); in trace_pid_list_clear()
237 upper_chunk = pid_list->upper[upper1]; in trace_pid_list_clear()
249 put_lower_chunk(pid_list, lower_chunk); in trace_pid_list_clear()
252 put_upper_chunk(pid_list, upper_chunk); in trace_pid_list_clear()
253 pid_list->upper[upper1] = NULL; in trace_pid_list_clear()
257 raw_spin_unlock_irqrestore(&pid_list->lock, flags); in trace_pid_list_clear()
273 int trace_pid_list_next(struct trace_pid_list *pid_list, unsigned int pid, in trace_pid_list_next() argument
283 if (!pid_list) in trace_pid_list_next()
289 raw_spin_lock_irqsave(&pid_list->lock, flags); in trace_pid_list_next()
291 upper_chunk = pid_list->upper[upper1]; in trace_pid_list_next()
309 raw_spin_unlock_irqrestore(&pid_list->lock, flags); in trace_pid_list_next()
327 int trace_pid_list_first(struct trace_pid_list *pid_list, unsigned int *pid) in trace_pid_list_first() argument
329 return trace_pid_list_next(pid_list, 0, pid); in trace_pid_list_first()
334 struct trace_pid_list *pid_list = container_of(iwork, struct trace_pid_list, in pid_list_refill_irq() local
346 raw_spin_lock(&pid_list->lock); in pid_list_refill_irq()
347 upper_count = CHUNK_ALLOC - pid_list->free_upper_chunks; in pid_list_refill_irq()
348 lower_count = CHUNK_ALLOC - pid_list->free_lower_chunks; in pid_list_refill_irq()
349 raw_spin_unlock(&pid_list->lock); in pid_list_refill_irq()
376 raw_spin_lock(&pid_list->lock); in pid_list_refill_irq()
378 *upper_next = pid_list->upper_list; in pid_list_refill_irq()
379 pid_list->upper_list = upper; in pid_list_refill_irq()
380 pid_list->free_upper_chunks += ucnt; in pid_list_refill_irq()
383 *lower_next = pid_list->lower_list; in pid_list_refill_irq()
384 pid_list->lower_list = lower; in pid_list_refill_irq()
385 pid_list->free_lower_chunks += lcnt; in pid_list_refill_irq()
387 raw_spin_unlock(&pid_list->lock); in pid_list_refill_irq()
413 struct trace_pid_list *pid_list; in trace_pid_list_alloc() local
419 pid_list = kzalloc(sizeof(*pid_list), GFP_KERNEL); in trace_pid_list_alloc()
420 if (!pid_list) in trace_pid_list_alloc()
423 init_irq_work(&pid_list->refill_irqwork, pid_list_refill_irq); in trace_pid_list_alloc()
425 raw_spin_lock_init(&pid_list->lock); in trace_pid_list_alloc()
433 chunk->next = pid_list->upper_list; in trace_pid_list_alloc()
434 pid_list->upper_list = chunk; in trace_pid_list_alloc()
435 pid_list->free_upper_chunks++; in trace_pid_list_alloc()
444 chunk->next = pid_list->lower_list; in trace_pid_list_alloc()
445 pid_list->lower_list = chunk; in trace_pid_list_alloc()
446 pid_list->free_lower_chunks++; in trace_pid_list_alloc()
449 return pid_list; in trace_pid_list_alloc()
457 void trace_pid_list_free(struct trace_pid_list *pid_list) in trace_pid_list_free() argument
463 if (!pid_list) in trace_pid_list_free()
466 irq_work_sync(&pid_list->refill_irqwork); in trace_pid_list_free()
468 while (pid_list->lower_list) { in trace_pid_list_free()
471 chunk = pid_list->lower_list; in trace_pid_list_free()
472 pid_list->lower_list = pid_list->lower_list->next; in trace_pid_list_free()
476 while (pid_list->upper_list) { in trace_pid_list_free()
479 chunk = pid_list->upper_list; in trace_pid_list_free()
480 pid_list->upper_list = pid_list->upper_list->next; in trace_pid_list_free()
485 upper = pid_list->upper[i]; in trace_pid_list_free()
494 kfree(pid_list); in trace_pid_list_free()