Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS/kprobes: Remove jprobe implementation

Remove arch dependent setjump/longjump functions
and unused fields in kprobe_ctlblk for jprobes
from arch/mips.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: James Hogan <jhogan@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-arch@vger.kernel.org
Cc: linux-mips@linux-mips.org
Link: https://lore.kernel.org/lkml/152942451058.15209.3459785416221980965.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org>

authored by

Masami Hiramatsu and committed by
Ingo Molnar
8c2c3f2d 0aeaf6b3

-58
-13
arch/mips/include/asm/kprobes.h
··· 68 68 unsigned long saved_epc; 69 69 }; 70 70 71 - #define MAX_JPROBES_STACK_SIZE 128 72 - #define MAX_JPROBES_STACK_ADDR \ 73 - (((unsigned long)current_thread_info()) + THREAD_SIZE - 32 - sizeof(struct pt_regs)) 74 - 75 - #define MIN_JPROBES_STACK_SIZE(ADDR) \ 76 - ((((ADDR) + MAX_JPROBES_STACK_SIZE) > MAX_JPROBES_STACK_ADDR) \ 77 - ? MAX_JPROBES_STACK_ADDR - (ADDR) \ 78 - : MAX_JPROBES_STACK_SIZE) 79 - 80 - 81 71 #define SKIP_DELAYSLOT 0x0001 82 72 83 73 /* per-cpu kprobe control block */ ··· 76 86 unsigned long kprobe_old_SR; 77 87 unsigned long kprobe_saved_SR; 78 88 unsigned long kprobe_saved_epc; 79 - unsigned long jprobe_saved_sp; 80 - struct pt_regs jprobe_saved_regs; 81 89 /* Per-thread fields, used while emulating branches */ 82 90 unsigned long flags; 83 91 unsigned long target_epc; 84 - u8 jprobes_stack[MAX_JPROBES_STACK_SIZE]; 85 92 struct prev_kprobe prev_kprobe; 86 93 }; 87 94
-45
arch/mips/kernel/kprobes.c
··· 468 468 return ret; 469 469 } 470 470 471 - int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) 472 - { 473 - struct jprobe *jp = container_of(p, struct jprobe, kp); 474 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 475 - 476 - kcb->jprobe_saved_regs = *regs; 477 - kcb->jprobe_saved_sp = regs->regs[29]; 478 - 479 - memcpy(kcb->jprobes_stack, (void *)kcb->jprobe_saved_sp, 480 - MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp)); 481 - 482 - regs->cp0_epc = (unsigned long)(jp->entry); 483 - 484 - return 1; 485 - } 486 - 487 - /* Defined in the inline asm below. */ 488 - void jprobe_return_end(void); 489 - 490 - void __kprobes jprobe_return(void) 491 - { 492 - /* Assembler quirk necessitates this '0,code' business. */ 493 - asm volatile( 494 - "break 0,%0\n\t" 495 - ".globl jprobe_return_end\n" 496 - "jprobe_return_end:\n" 497 - : : "n" (BRK_KPROBE_BP) : "memory"); 498 - } 499 - 500 - int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) 501 - { 502 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 503 - 504 - if (regs->cp0_epc >= (unsigned long)jprobe_return && 505 - regs->cp0_epc <= (unsigned long)jprobe_return_end) { 506 - *regs = kcb->jprobe_saved_regs; 507 - memcpy((void *)kcb->jprobe_saved_sp, kcb->jprobes_stack, 508 - MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp)); 509 - preempt_enable_no_resched(); 510 - 511 - return 1; 512 - } 513 - return 0; 514 - } 515 - 516 471 /* 517 472 * Function return probe trampoline: 518 473 * - init_kprobes() establishes a probepoint here