Lines Matching refs:c
99 static int slots_per_page(struct kprobe_insn_cache *c) in slots_per_page() argument
101 return PAGE_SIZE/(c->insn_size * sizeof(kprobe_opcode_t)); in slots_per_page()
135 static int collect_garbage_slots(struct kprobe_insn_cache *c);
145 kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c) in __get_insn_slot() argument
150 guard(mutex)(&c->mutex); in __get_insn_slot()
153 list_for_each_entry_rcu(kip, &c->pages, list) { in __get_insn_slot()
154 if (kip->nused < slots_per_page(c)) { in __get_insn_slot()
157 for (i = 0; i < slots_per_page(c); i++) { in __get_insn_slot()
161 return kip->insns + (i * c->insn_size); in __get_insn_slot()
165 kip->nused = slots_per_page(c); in __get_insn_slot()
170 } while (c->nr_garbage && collect_garbage_slots(c) == 0); in __get_insn_slot()
173 kip = kmalloc(struct_size(kip, slot_used, slots_per_page(c)), GFP_KERNEL); in __get_insn_slot()
177 kip->insns = c->alloc(); in __get_insn_slot()
183 memset(kip->slot_used, SLOT_CLEAN, slots_per_page(c)); in __get_insn_slot()
187 kip->cache = c; in __get_insn_slot()
188 list_add_rcu(&kip->list, &c->pages); in __get_insn_slot()
192 PAGE_SIZE, false, c->sym); in __get_insn_slot()
227 static int collect_garbage_slots(struct kprobe_insn_cache *c) in collect_garbage_slots() argument
234 list_for_each_entry_safe(kip, next, &c->pages, list) { in collect_garbage_slots()
240 for (i = 0; i < slots_per_page(c); i++) { in collect_garbage_slots()
245 c->nr_garbage = 0; in collect_garbage_slots()
249 static long __find_insn_page(struct kprobe_insn_cache *c, in __find_insn_page() argument
256 list_for_each_entry_rcu(kip, &c->pages, list) { in __find_insn_page()
258 (c->insn_size * sizeof(kprobe_opcode_t)); in __find_insn_page()
259 if (idx >= 0 && idx < slots_per_page(c)) { in __find_insn_page()
270 void __free_insn_slot(struct kprobe_insn_cache *c, in __free_insn_slot() argument
276 guard(mutex)(&c->mutex); in __free_insn_slot()
277 idx = __find_insn_page(c, slot, &kip); in __free_insn_slot()
285 if (++c->nr_garbage > slots_per_page(c)) in __free_insn_slot()
286 collect_garbage_slots(c); in __free_insn_slot()
298 bool __is_insn_slot_addr(struct kprobe_insn_cache *c, unsigned long addr) in __is_insn_slot_addr() argument
304 list_for_each_entry_rcu(kip, &c->pages, list) { in __is_insn_slot_addr()
316 int kprobe_cache_get_kallsym(struct kprobe_insn_cache *c, unsigned int *symnum, in kprobe_cache_get_kallsym() argument
323 list_for_each_entry_rcu(kip, &c->pages, list) { in kprobe_cache_get_kallsym()
326 strscpy(sym, c->sym, KSYM_NAME_LEN); in kprobe_cache_get_kallsym()