Lines Matching refs:kcb

155 static void save_previous_kprobe(struct kprobe_ctlblk *kcb)  in save_previous_kprobe()  argument
157 kcb->prev_kprobe.kp = kprobe_running(); in save_previous_kprobe()
158 kcb->prev_kprobe.status = kcb->kprobe_status; in save_previous_kprobe()
159 kcb->prev_kprobe.old_SR = kcb->kprobe_old_SR; in save_previous_kprobe()
160 kcb->prev_kprobe.saved_SR = kcb->kprobe_saved_SR; in save_previous_kprobe()
161 kcb->prev_kprobe.saved_epc = kcb->kprobe_saved_epc; in save_previous_kprobe()
164 static void restore_previous_kprobe(struct kprobe_ctlblk *kcb) in restore_previous_kprobe() argument
166 __this_cpu_write(current_kprobe, kcb->prev_kprobe.kp); in restore_previous_kprobe()
167 kcb->kprobe_status = kcb->prev_kprobe.status; in restore_previous_kprobe()
168 kcb->kprobe_old_SR = kcb->prev_kprobe.old_SR; in restore_previous_kprobe()
169 kcb->kprobe_saved_SR = kcb->prev_kprobe.saved_SR; in restore_previous_kprobe()
170 kcb->kprobe_saved_epc = kcb->prev_kprobe.saved_epc; in restore_previous_kprobe()
174 struct kprobe_ctlblk *kcb) in set_current_kprobe() argument
177 kcb->kprobe_saved_SR = kcb->kprobe_old_SR = (regs->cp0_status & ST0_IE); in set_current_kprobe()
178 kcb->kprobe_saved_epc = regs->cp0_epc; in set_current_kprobe()
195 struct kprobe_ctlblk *kcb) in evaluate_branch_instruction() argument
206 kcb->flags |= SKIP_DELAYSLOT; in evaluate_branch_instruction()
208 kcb->flags &= ~SKIP_DELAYSLOT; in evaluate_branch_instruction()
215 kcb->flags |= SKIP_DELAYSLOT; in evaluate_branch_instruction()
217 kcb->target_epc = regs->cp0_epc; in evaluate_branch_instruction()
229 struct kprobe_ctlblk *kcb) in prepare_singlestep() argument
240 ret = evaluate_branch_instruction(p, regs, kcb); in prepare_singlestep()
263 struct kprobe_ctlblk *kcb) in resume_execution() argument
266 regs->cp0_epc = kcb->target_epc; in resume_execution()
268 unsigned long orig_epc = kcb->kprobe_saved_epc; in resume_execution()
278 struct kprobe_ctlblk *kcb; in kprobe_handler() local
287 kcb = get_kprobe_ctlblk(); in kprobe_handler()
293 if (kcb->kprobe_status == KPROBE_HIT_SS && in kprobe_handler()
296 regs->cp0_status |= kcb->kprobe_saved_SR; in kprobe_handler()
306 save_previous_kprobe(kcb); in kprobe_handler()
307 set_current_kprobe(p, regs, kcb); in kprobe_handler()
309 prepare_singlestep(p, regs, kcb); in kprobe_handler()
310 kcb->kprobe_status = KPROBE_REENTER; in kprobe_handler()
311 if (kcb->flags & SKIP_DELAYSLOT) { in kprobe_handler()
312 resume_execution(p, regs, kcb); in kprobe_handler()
313 restore_previous_kprobe(kcb); in kprobe_handler()
344 set_current_kprobe(p, regs, kcb); in kprobe_handler()
345 kcb->kprobe_status = KPROBE_HIT_ACTIVE; in kprobe_handler()
354 prepare_singlestep(p, regs, kcb); in kprobe_handler()
355 if (kcb->flags & SKIP_DELAYSLOT) { in kprobe_handler()
356 kcb->kprobe_status = KPROBE_HIT_SSDONE; in kprobe_handler()
359 resume_execution(p, regs, kcb); in kprobe_handler()
362 kcb->kprobe_status = KPROBE_HIT_SS; in kprobe_handler()
375 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); in post_kprobe_handler() local
380 if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) { in post_kprobe_handler()
381 kcb->kprobe_status = KPROBE_HIT_SSDONE; in post_kprobe_handler()
385 resume_execution(cur, regs, kcb); in post_kprobe_handler()
387 regs->cp0_status |= kcb->kprobe_saved_SR; in post_kprobe_handler()
390 if (kcb->kprobe_status == KPROBE_REENTER) { in post_kprobe_handler()
391 restore_previous_kprobe(kcb); in post_kprobe_handler()
404 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); in kprobe_fault_handler() local
409 if (kcb->kprobe_status & KPROBE_HIT_SS) { in kprobe_fault_handler()
410 resume_execution(cur, regs, kcb); in kprobe_fault_handler()
411 regs->cp0_status |= kcb->kprobe_old_SR; in kprobe_fault_handler()