From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30465 invoked by alias); 8 Mar 2006 11:17:24 -0000 Received: (qmail 30455 invoked by uid 22791); 8 Mar 2006 11:17:22 -0000 X-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_00,DNS_FROM_RFC_ABUSE,SPF_SOFTFAIL X-Spam-Check-By: sourceware.org Received: from e32.co.us.ibm.com (HELO e32.co.us.ibm.com) (32.97.110.150) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 08 Mar 2006 11:17:18 +0000 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by e32.co.us.ibm.com (8.12.11/8.12.11) with ESMTP id k28BHGr2022326 for ; Wed, 8 Mar 2006 06:17:16 -0500 Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay04.boulder.ibm.com (8.12.10/NCO/VER6.8) with ESMTP id k28BK5Lf163912 for ; Wed, 8 Mar 2006 04:20:05 -0700 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.12.11/8.13.3) with ESMTP id k28BHFnm025664 for ; Wed, 8 Mar 2006 04:17:15 -0700 Received: from newton.in.ibm.com ([9.124.35.47]) by d03av02.boulder.ibm.com (8.12.11/8.12.11) with ESMTP id k28BHEGd025636; Wed, 8 Mar 2006 04:17:15 -0700 Received: by newton.in.ibm.com (Postfix, from userid 500) id 93448CE3; Wed, 8 Mar 2006 16:48:48 +0530 (IST) Date: Wed, 08 Mar 2006 11:17:00 -0000 From: Prasanna S Panchamukhi To: "bibo,mao" Cc: systemtap@sources.redhat.com Subject: Re: [4/5 PATCH] Kprobes fix for broken fault handling for ia64 Message-ID: <20060308111848.GA32564@in.ibm.com> Reply-To: prasanna@in.ibm.com References: <20060307133832.GA2245@in.ibm.com> <20060307134010.GA32071@in.ibm.com> <20060307134119.GB32071@in.ibm.com> <20060307134208.GC32071@in.ibm.com> <440E9047.5040603@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <440E9047.5040603@intel.com> User-Agent: Mutt/1.4.1i X-IsSubscribed: yes Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org X-SW-Source: 2006-q1/txt/msg00736.txt.bz2 On Wed, Mar 08, 2006 at 04:05:27PM +0800, bibo,mao wrote: > 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. Bibo, Thanks for testing this on ia64, I will make the changes before sending it upstream. Since the system page fault handler might sleep while loading the page into the memory and we cannot afford to sleep at this point, we skip loading the page into the memory and just call fixup_exception. Thanks Prasanna > > The attachment is my test case in IA64, it is easy to port to other > platform. > > Bibo,mao -- Thanks & Regards Prasanna S Panchamukhi Linux Technology Center India Software Labs, IBM Bangalore Email: prasanna@in.ibm.com Ph: 91-80-51776329