Lines Matching refs:kip
149 struct kprobe_insn_page *kip; in __get_insn_slot() local
155 list_for_each_entry_rcu(kip, &c->pages, list) { in __get_insn_slot()
156 if (kip->nused < slots_per_page(c)) { in __get_insn_slot()
160 if (kip->slot_used[i] == SLOT_CLEAN) { in __get_insn_slot()
161 kip->slot_used[i] = SLOT_USED; in __get_insn_slot()
162 kip->nused++; in __get_insn_slot()
163 return kip->insns + (i * c->insn_size); in __get_insn_slot()
167 kip->nused = slots_per_page(c); in __get_insn_slot()
175 kip = kmalloc_flex(*kip, slot_used, slots_per_page(c)); in __get_insn_slot()
176 if (!kip) in __get_insn_slot()
179 kip->insns = c->alloc(); in __get_insn_slot()
180 if (!kip->insns) { in __get_insn_slot()
181 kfree(kip); in __get_insn_slot()
184 INIT_LIST_HEAD(&kip->list); in __get_insn_slot()
185 memset(kip->slot_used, SLOT_CLEAN, slots_per_page(c)); in __get_insn_slot()
186 kip->slot_used[0] = SLOT_USED; in __get_insn_slot()
187 kip->nused = 1; in __get_insn_slot()
188 kip->ngarbage = 0; in __get_insn_slot()
189 kip->cache = c; in __get_insn_slot()
190 list_add_rcu(&kip->list, &c->pages); in __get_insn_slot()
193 perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL, (unsigned long)kip->insns, in __get_insn_slot()
196 return kip->insns; in __get_insn_slot()
200 static bool collect_one_slot(struct kprobe_insn_page *kip, int idx) in collect_one_slot() argument
202 kip->slot_used[idx] = SLOT_CLEAN; in collect_one_slot()
203 kip->nused--; in collect_one_slot()
204 if (kip->nused != 0) in collect_one_slot()
213 if (!list_is_singular(&kip->list)) { in collect_one_slot()
219 (unsigned long)kip->insns, PAGE_SIZE, true, in collect_one_slot()
220 kip->cache->sym); in collect_one_slot()
221 list_del_rcu(&kip->list); in collect_one_slot()
223 kip->cache->free(kip->insns); in collect_one_slot()
224 kfree(kip); in collect_one_slot()
231 struct kprobe_insn_page *kip, *next; in collect_garbage_slots() local
236 list_for_each_entry_safe(kip, next, &c->pages, list) { in collect_garbage_slots()
239 if (kip->ngarbage == 0) in collect_garbage_slots()
241 kip->ngarbage = 0; /* we will collect all garbages */ in collect_garbage_slots()
243 if (kip->slot_used[i] == SLOT_DIRTY && collect_one_slot(kip, i)) in collect_garbage_slots()
254 struct kprobe_insn_page *kip = NULL; in __find_insn_page() local
258 list_for_each_entry_rcu(kip, &c->pages, list) { in __find_insn_page()
259 idx = ((long)slot - (long)kip->insns) / in __find_insn_page()
262 *pkip = kip; in __find_insn_page()
275 struct kprobe_insn_page *kip = NULL; in __free_insn_slot() local
279 idx = __find_insn_page(c, slot, &kip); in __free_insn_slot()
281 if (kip) { in __free_insn_slot()
283 WARN_ON(kip->slot_used[idx] != SLOT_USED); in __free_insn_slot()
285 kip->slot_used[idx] = SLOT_DIRTY; in __free_insn_slot()
286 kip->ngarbage++; in __free_insn_slot()
290 collect_one_slot(kip, idx); in __free_insn_slot()
302 struct kprobe_insn_page *kip; in __is_insn_slot_addr() local
306 list_for_each_entry_rcu(kip, &c->pages, list) { in __is_insn_slot_addr()
307 if (addr >= (unsigned long)kip->insns && in __is_insn_slot_addr()
308 addr < (unsigned long)kip->insns + PAGE_SIZE) { in __is_insn_slot_addr()
321 struct kprobe_insn_page *kip; in kprobe_cache_get_kallsym() local
325 list_for_each_entry_rcu(kip, &c->pages, list) { in kprobe_cache_get_kallsym()
330 *value = (unsigned long)kip->insns; in kprobe_cache_get_kallsym()