Lines Matching refs:p
62 static void copy_instruction(struct kprobe *p) in copy_instruction() argument
64 unsigned long ip = (unsigned long) p->addr; in copy_instruction()
75 ftrace_generate_nop_insn((struct ftrace_insn *)p->ainsn.insn); in copy_instruction()
76 p->ainsn.is_ftrace_insn = 1; in copy_instruction()
78 memcpy(p->ainsn.insn, p->addr, insn_length(*p->addr >> 8)); in copy_instruction()
79 p->opcode = p->ainsn.insn[0]; in copy_instruction()
80 if (!probe_is_insn_relative_long(p->ainsn.insn)) in copy_instruction()
89 disp = *(s32 *)&p->ainsn.insn[1]; in copy_instruction()
90 addr = (u64)(unsigned long)p->addr; in copy_instruction()
91 new_addr = (u64)(unsigned long)p->ainsn.insn; in copy_instruction()
93 *(s32 *)&p->ainsn.insn[1] = new_disp; in copy_instruction()
102 static int s390_get_insn_slot(struct kprobe *p) in s390_get_insn_slot() argument
109 p->ainsn.insn = NULL; in s390_get_insn_slot()
110 if (is_kernel_addr(p->addr)) in s390_get_insn_slot()
111 p->ainsn.insn = get_dmainsn_slot(); in s390_get_insn_slot()
112 else if (is_module_addr(p->addr)) in s390_get_insn_slot()
113 p->ainsn.insn = get_insn_slot(); in s390_get_insn_slot()
114 return p->ainsn.insn ? 0 : -ENOMEM; in s390_get_insn_slot()
118 static void s390_free_insn_slot(struct kprobe *p) in s390_free_insn_slot() argument
120 if (!p->ainsn.insn) in s390_free_insn_slot()
122 if (is_kernel_addr(p->addr)) in s390_free_insn_slot()
123 free_dmainsn_slot(p->ainsn.insn, 0); in s390_free_insn_slot()
125 free_insn_slot(p->ainsn.insn, 0); in s390_free_insn_slot()
126 p->ainsn.insn = NULL; in s390_free_insn_slot()
130 int arch_prepare_kprobe(struct kprobe *p) in arch_prepare_kprobe() argument
132 if ((unsigned long) p->addr & 0x01) in arch_prepare_kprobe()
135 if (probe_is_prohibited_opcode(p->addr)) in arch_prepare_kprobe()
137 if (s390_get_insn_slot(p)) in arch_prepare_kprobe()
139 copy_instruction(p); in arch_prepare_kprobe()
144 int arch_check_ftrace_location(struct kprobe *p) in arch_check_ftrace_location() argument
150 struct kprobe *p; member
160 struct kprobe *p = args->p; in swap_instruction() local
163 new_insn.opc = args->arm_kprobe ? BREAKPOINT_INSTRUCTION : p->opcode; in swap_instruction()
165 if (!p->ainsn.is_ftrace_insn) in swap_instruction()
168 insn = (struct ftrace_insn *) p->addr; in swap_instruction()
175 ftrace_generate_call_insn(&new_insn, (unsigned long)p->addr); in swap_instruction()
181 s390_kernel_write(p->addr, &new_insn, len); in swap_instruction()
187 void arch_arm_kprobe(struct kprobe *p) in arch_arm_kprobe() argument
189 struct swap_insn_args args = {.p = p, .arm_kprobe = 1}; in arch_arm_kprobe()
195 void arch_disarm_kprobe(struct kprobe *p) in arch_disarm_kprobe() argument
197 struct swap_insn_args args = {.p = p, .arm_kprobe = 0}; in arch_disarm_kprobe()
203 void arch_remove_kprobe(struct kprobe *p) in arch_remove_kprobe() argument
205 s390_free_insn_slot(p); in arch_remove_kprobe()
250 static void push_kprobe(struct kprobe_ctlblk *kcb, struct kprobe *p) in push_kprobe() argument
254 __this_cpu_write(current_kprobe, p); in push_kprobe()
279 static void kprobe_reenter_check(struct kprobe_ctlblk *kcb, struct kprobe *p) in kprobe_reenter_check() argument
284 kprobes_inc_nmissed_count(p); in kprobe_reenter_check()
294 printk(KERN_EMERG "Invalid kprobe detected at %p.\n", p->addr); in kprobe_reenter_check()
295 dump_kprobe(p); in kprobe_reenter_check()
304 struct kprobe *p; in kprobe_handler() local
313 p = get_kprobe((void *)((regs->psw.addr & PSW_ADDR_INSN) - 2)); in kprobe_handler()
315 if (p) { in kprobe_handler()
326 kprobe_reenter_check(kcb, p); in kprobe_handler()
327 push_kprobe(kcb, p); in kprobe_handler()
338 push_kprobe(kcb, p); in kprobe_handler()
340 if (p->pre_handler && p->pre_handler(p, regs)) in kprobe_handler()
344 enable_singlestep(kcb, regs, (unsigned long) p->ainsn.insn); in kprobe_handler()
347 p = __this_cpu_read(current_kprobe); in kprobe_handler()
348 if (p->break_handler && p->break_handler(p, regs)) { in kprobe_handler()
358 (unsigned long) p->ainsn.insn); in kprobe_handler()
392 static int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) in trampoline_probe_handler() argument
490 static void resume_execution(struct kprobe *p, struct pt_regs *regs) in resume_execution() argument
494 int fixup = probe_get_fixup_type(p->ainsn.insn); in resume_execution()
497 if (p->ainsn.is_ftrace_insn) { in resume_execution()
498 struct ftrace_insn *insn = (struct ftrace_insn *) p->addr; in resume_execution()
501 ftrace_generate_call_insn(&call_insn, (unsigned long) p->addr); in resume_execution()
510 regs->gprs[0] = (unsigned long)p->addr + sizeof(*insn); in resume_execution()
515 ip += (unsigned long) p->addr - (unsigned long) p->ainsn.insn; in resume_execution()
518 int ilen = insn_length(p->ainsn.insn[0] >> 8); in resume_execution()
519 if (ip - (unsigned long) p->ainsn.insn == ilen) in resume_execution()
520 ip = (unsigned long) p->addr + ilen; in resume_execution()
524 int reg = (p->ainsn.insn[0] & 0xf0) >> 4; in resume_execution()
525 regs->gprs[reg] += (unsigned long) p->addr - in resume_execution()
526 (unsigned long) p->ainsn.insn; in resume_execution()
536 struct kprobe *p = kprobe_running(); in post_kprobe_handler() local
538 if (!p) in post_kprobe_handler()
541 if (kcb->kprobe_status != KPROBE_REENTER && p->post_handler) { in post_kprobe_handler()
543 p->post_handler(p, regs, 0); in post_kprobe_handler()
546 resume_execution(p, regs); in post_kprobe_handler()
565 struct kprobe *p = kprobe_running(); in kprobe_trap_handler() local
581 disable_singlestep(kcb, regs, (unsigned long) p->addr); in kprobe_trap_handler()
592 kprobes_inc_nmissed_count(p); in kprobe_trap_handler()
601 if (p->fault_handler && p->fault_handler(p, regs, trapnr)) in kprobe_trap_handler()
677 int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) in setjmp_pre_handler() argument
679 struct jprobe *jp = container_of(p, struct jprobe, kp); in setjmp_pre_handler()
703 int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) in longjmp_break_handler() argument
729 int arch_trampoline_kprobe(struct kprobe *p) in arch_trampoline_kprobe() argument
731 return p->addr == (kprobe_opcode_t *) &kretprobe_trampoline; in arch_trampoline_kprobe()