Lines Matching refs:kip
149 struct kprobe_insn_page *kip; in __get_insn_slot() local
154 list_for_each_entry(kip, &c->pages, list) { in __get_insn_slot()
155 if (kip->nused < slots_per_page(c)) { in __get_insn_slot()
158 if (kip->slot_used[i] == SLOT_CLEAN) { in __get_insn_slot()
159 kip->slot_used[i] = SLOT_USED; in __get_insn_slot()
160 kip->nused++; in __get_insn_slot()
161 slot = kip->insns + (i * c->insn_size); in __get_insn_slot()
166 kip->nused = slots_per_page(c); in __get_insn_slot()
176 kip = kmalloc(KPROBE_INSN_PAGE_SIZE(slots_per_page(c)), GFP_KERNEL); in __get_insn_slot()
177 if (!kip) in __get_insn_slot()
185 kip->insns = c->alloc(); in __get_insn_slot()
186 if (!kip->insns) { in __get_insn_slot()
187 kfree(kip); in __get_insn_slot()
190 INIT_LIST_HEAD(&kip->list); in __get_insn_slot()
191 memset(kip->slot_used, SLOT_CLEAN, slots_per_page(c)); in __get_insn_slot()
192 kip->slot_used[0] = SLOT_USED; in __get_insn_slot()
193 kip->nused = 1; in __get_insn_slot()
194 kip->ngarbage = 0; in __get_insn_slot()
195 kip->cache = c; in __get_insn_slot()
196 list_add(&kip->list, &c->pages); in __get_insn_slot()
197 slot = kip->insns; in __get_insn_slot()
204 static int collect_one_slot(struct kprobe_insn_page *kip, int idx) in collect_one_slot() argument
206 kip->slot_used[idx] = SLOT_CLEAN; in collect_one_slot()
207 kip->nused--; in collect_one_slot()
208 if (kip->nused == 0) { in collect_one_slot()
215 if (!list_is_singular(&kip->list)) { in collect_one_slot()
216 list_del(&kip->list); in collect_one_slot()
217 kip->cache->free(kip->insns); in collect_one_slot()
218 kfree(kip); in collect_one_slot()
227 struct kprobe_insn_page *kip, *next; in collect_garbage_slots() local
232 list_for_each_entry_safe(kip, next, &c->pages, list) { in collect_garbage_slots()
234 if (kip->ngarbage == 0) in collect_garbage_slots()
236 kip->ngarbage = 0; /* we will collect all garbages */ in collect_garbage_slots()
238 if (kip->slot_used[i] == SLOT_DIRTY && in collect_garbage_slots()
239 collect_one_slot(kip, i)) in collect_garbage_slots()
250 struct kprobe_insn_page *kip; in __free_insn_slot() local
253 list_for_each_entry(kip, &c->pages, list) { in __free_insn_slot()
254 long idx = ((long)slot - (long)kip->insns) / in __free_insn_slot()
257 WARN_ON(kip->slot_used[idx] != SLOT_USED); in __free_insn_slot()
259 kip->slot_used[idx] = SLOT_DIRTY; in __free_insn_slot()
260 kip->ngarbage++; in __free_insn_slot()
264 collect_one_slot(kip, idx); in __free_insn_slot()