All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
To: Kumar Gala <galak@kernel.crashing.org>
Cc: linuxppc-dev@ozlabs.org, Paul Mackerras <paulus@samba.org>,
	prasanna@in.ibm.com
Subject: Re: RFC: kprobes support for ppc32
Date: Tue, 30 Jan 2007 11:54:47 +0530	[thread overview]
Message-ID: <20070130062447.GA32077@in.ibm.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0701300010550.32498@localhost.localdomain>

On Tue, Jan 30, 2007 at 12:13:32AM -0600, Kumar Gala wrote:
> Here's a first cut on ppc32 support for kprobes.  I haven't tested this, 
> but I think I got all the places that needed fixing up.
> 
> - k

Kumar,

This looks fine (very similar to a patch I had done, but couldn't test
it for lack of hardware).

Acked-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>

> 
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index d6abe49..db1e118 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -1182,7 +1182,7 @@ source "arch/powerpc/oprofile/Kconfig"
> 
>  config KPROBES
>  	bool "Kprobes (EXPERIMENTAL)"
> -	depends on PPC64 && KALLSYMS && EXPERIMENTAL && MODULES
> +	depends on !BOOKE && KALLSYMS && EXPERIMENTAL && MODULES
>  	help
>  	  Kprobes allows you to trap at almost any kernel address and
>  	  execute a callback function.  register_kprobe() establishes
> diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
> index 4657563..dd2886f 100644
> --- a/arch/powerpc/kernel/kprobes.c
> +++ b/arch/powerpc/kernel/kprobes.c
> @@ -46,8 +46,8 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
>  	if ((unsigned long)p->addr & 0x03) {
>  		printk("Attempt to register kprobe at an unaligned 
>  		address\n");
>  		ret = -EINVAL;
> -	} else if (IS_MTMSRD(insn) || IS_RFID(insn)) {
> -		printk("Cannot register a kprobe on rfid or mtmsrd\n");
> +	} else if (IS_MTMSRD(insn) || IS_RFID(insn) || IS_RFI(insn)) {
> +		printk("Cannot register a kprobe on rfi/rfid or mtmsr[d]\n");
>  		ret = -EINVAL;
>  	}
> 
> @@ -483,8 +483,12 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, 
> struct pt_regs *regs)
>  	memcpy(&kcb->jprobe_saved_regs, regs, sizeof(struct pt_regs));
> 
>  	/* setup return addr to the jprobe handler routine */
> +#ifdef CONFIG_PPC64
>  	regs->nip = (unsigned long)(((func_descr_t *)jp->entry)->entry);
>  	regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc);
> +#else
> +	regs->nip = (unsigned long)jp->entry;
> +#endif
> 
>  	return 1;
>  }
> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
> index a0360ae..116432f 100644
> --- a/arch/powerpc/lib/Makefile
> +++ b/arch/powerpc/lib/Makefile
> @@ -16,10 +16,10 @@ obj-$(CONFIG_PPC64)	+= checksum_64.o 
> copypage_64.o copyuser_64.o \
>  			   strcase.o
>  obj-$(CONFIG_QUICC_ENGINE) += rheap.o
>  obj-$(CONFIG_XMON)	+= sstep.o
> +obj-$(CONFIG_KPROBES) += sstep.o
> 
>  ifeq ($(CONFIG_PPC64),y)
>  obj-$(CONFIG_SMP)	+= locks.o
> -obj-$(CONFIG_DEBUG_KERNEL) += sstep.o
>  endif
> 
>  # Temporary hack until we have migrated to asm-powerpc
> diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h
> index 2dafa37..4658a95 100644
> --- a/include/asm-powerpc/kprobes.h
> +++ b/include/asm-powerpc/kprobes.h
> @@ -66,7 +66,11 @@ typedef unsigned int kprobe_opcode_t;
>  	}								\
>  }
> 
> +#ifdef CONFIG_PPC64
>  #define JPROBE_ENTRY(pentry)	(kprobe_opcode_t *)((func_descr_t *)pentry)
> +#else
> +#define JPROBE_ENTRY(pentry)	(kprobe_opcode_t *)(pentry)
> +#endif
> 
>  #define is_trap(instr)	(IS_TW(instr) || IS_TD(instr) || \
>  			IS_TWI(instr) || IS_TDI(instr))
> diff --git a/include/asm-powerpc/sstep.h b/include/asm-powerpc/sstep.h
> index 630a988..f593b0f 100644
> --- a/include/asm-powerpc/sstep.h
> +++ b/include/asm-powerpc/sstep.h
> @@ -21,6 +21,7 @@ struct pt_regs;
>   */
>  #define IS_MTMSRD(instr)	(((instr) & 0xfc0007be) == 0x7c000124)
>  #define IS_RFID(instr)		(((instr) & 0xfc0007fe) == 
>  0x4c000024)
> +#define IS_RFI(instr)		(((instr) & 0xfc0007fe) == 0x4c000064)
> 
>  /* Emulate instructions that cause a transfer of control. */
>  extern int emulate_step(struct pt_regs *regs, unsigned int instr);

  reply	other threads:[~2007-01-30  6:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-30  6:13 RFC: kprobes support for ppc32 Kumar Gala
2007-01-30  6:24 ` Ananth N Mavinakayanahalli [this message]
2007-01-30 10:46 ` Christoph Hellwig
2007-01-30 11:33   ` Ananth N Mavinakayanahalli
2007-01-30 14:45   ` Kumar Gala

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070130062447.GA32077@in.ibm.com \
    --to=ananth@in.ibm.com \
    --cc=galak@kernel.crashing.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.org \
    --cc=prasanna@in.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.