Prasanna S Panchamukhi wrote: > This patch fixes the broken kprobes fault handling similar > to i386 architecture. > > Signed-off-by: Prasanna S Panchamukhi > Acked-by: Anil S Keshavamurthy > > > arch/ia64/kernel/kprobes.c | 55 ++++++++++++++++++++++++++++++++++++++++----- > 1 files changed, 50 insertions(+), 5 deletions(-) > > diff -puN arch/ia64/kernel/kprobes.c~kprobes-ia64-pagefault-handling arch/ia64/kernel/kprobes.c > --- linux-2.6.16-rc5-mm2/arch/ia64/kernel/kprobes.c~kprobes-ia64-pagefault-handling 2006-03-07 11:18:46.000000000 +0530 > +++ linux-2.6.16-rc5-mm2-prasanna/arch/ia64/kernel/kprobes.c 2006-03-07 11:21:12.000000000 +0530 > @@ -34,6 +34,7 @@ > #include > #include > #include > +#include > > extern void jprobe_inst_return(void); > > @@ -722,13 +723,57 @@ static int __kprobes kprobes_fault_handl > struct kprobe *cur = kprobe_running(); > struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); > > - if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr)) > - return 1; > > - if (kcb->kprobe_status & KPROBE_HIT_SS) { > - resume_execution(cur, regs); > - reset_current_kprobe(); > + switch(kcb->kprobe_status) { > + case KPROBE_HIT_SS: > + case KPROBE_REENTER: > + /* > + * We are here because the instruction being single > + * stepped caused a page fault. We reset the current > + * kprobe and the instruction pointer points back to > + * the probe address and allow the page fault handler > + * to continue as a normal page fault. > + */ > + regs->cr_iip = ((unsigned long)cur->addr) & ~0xFULL; > + ia64_psr(regs) = ((unsigned long)cur->addr) & 0xf; It should be: regs->cr_iip = ((unsigned long)cur->addr) & ~0xFULL; ia64_psr(regs)->ri = ((unsigned long)cur->addr) & 0xf; And I test this patch in IA64 platform, it passed. But find that sometime user space copy is incomplete. If page fault happens in kprobe prehandler/posthandler, if will first call fix_exception() and return, Normally in page fault process procedure system will load page into memory, and the system will call fix_exceptioin if failed to load page into memory. The attachment is my test case in IA64, it is easy to port to other platform. Bibo,mao