Lines Matching refs:c
96 static int slots_per_page(struct kprobe_insn_cache *c) in slots_per_page() argument
98 return PAGE_SIZE/(c->insn_size * sizeof(kprobe_opcode_t)); in slots_per_page()
125 static int collect_garbage_slots(struct kprobe_insn_cache *c);
131 kprobe_opcode_t *__get_insn_slot(struct kprobe_insn_cache *c) in __get_insn_slot() argument
137 mutex_lock(&c->mutex); in __get_insn_slot()
140 list_for_each_entry_rcu(kip, &c->pages, list) { in __get_insn_slot()
141 if (kip->nused < slots_per_page(c)) { in __get_insn_slot()
143 for (i = 0; i < slots_per_page(c); i++) { in __get_insn_slot()
147 slot = kip->insns + (i * c->insn_size); in __get_insn_slot()
153 kip->nused = slots_per_page(c); in __get_insn_slot()
160 if (c->nr_garbage && collect_garbage_slots(c) == 0) in __get_insn_slot()
164 kip = kmalloc(KPROBE_INSN_PAGE_SIZE(slots_per_page(c)), GFP_KERNEL); in __get_insn_slot()
173 kip->insns = c->alloc(); in __get_insn_slot()
179 memset(kip->slot_used, SLOT_CLEAN, slots_per_page(c)); in __get_insn_slot()
183 kip->cache = c; in __get_insn_slot()
184 list_add_rcu(&kip->list, &c->pages); in __get_insn_slot()
187 mutex_unlock(&c->mutex); in __get_insn_slot()
214 static int collect_garbage_slots(struct kprobe_insn_cache *c) in collect_garbage_slots() argument
221 list_for_each_entry_safe(kip, next, &c->pages, list) { in collect_garbage_slots()
226 for (i = 0; i < slots_per_page(c); i++) { in collect_garbage_slots()
231 c->nr_garbage = 0; in collect_garbage_slots()
235 void __free_insn_slot(struct kprobe_insn_cache *c, in __free_insn_slot() argument
241 mutex_lock(&c->mutex); in __free_insn_slot()
243 list_for_each_entry_rcu(kip, &c->pages, list) { in __free_insn_slot()
245 (c->insn_size * sizeof(kprobe_opcode_t)); in __free_insn_slot()
246 if (idx >= 0 && idx < slots_per_page(c)) in __free_insn_slot()
261 if (++c->nr_garbage > slots_per_page(c)) in __free_insn_slot()
262 collect_garbage_slots(c); in __free_insn_slot()
267 mutex_unlock(&c->mutex); in __free_insn_slot()
275 bool __is_insn_slot_addr(struct kprobe_insn_cache *c, unsigned long addr) in __is_insn_slot_addr() argument
281 list_for_each_entry_rcu(kip, &c->pages, list) { in __is_insn_slot_addr()