linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Paul Mackerras <paulus@samba.org>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [PATCH 2/6] [POWERPC] lockdep stacktrace support
Date: Thu, 10 Apr 2008 08:30:57 +1000	[thread overview]
Message-ID: <1207780257.9079.61.camel@pasglop> (raw)
In-Reply-To: <20080409072223.7DE7BDDE20@ozlabs.org>


On Wed, 2008-04-09 at 17:21 +1000, Benjamin Herrenschmidt wrote:
> From: Christoph Hellwig <hch@lst.de>
> 
> I recently tried to work on lockdep for powerpc.  I have preliminary
> version of the stacktrace code, but had to give up on trace irqflags
> support because I'm not that knowledgeable on lowlevel ppc details.
> 
> Maybe someone more faimilar with the code wants to give it another try?
> 
> My stacktrace code is below:
it's
BTW. I know this patch is still missing (c) boilerplate on the new file
and catch up with some other comments I got last week... I was busy
making the stuff actually work :-) I'll fix that up today.

> Signed-off-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> 
> ---
>  arch/powerpc/Kconfig             |    4 +++
>  arch/powerpc/kernel/Makefile     |    1 
>  arch/powerpc/kernel/stacktrace.c |   52 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 57 insertions(+)
> 
> --- linux-work.orig/arch/powerpc/Kconfig	2008-04-02 15:46:07.000000000 +1100
> +++ linux-work/arch/powerpc/Kconfig	2008-04-02 16:47:46.000000000 +1100
> @@ -49,6 +49,10 @@ config IRQ_PER_CPU
>  	bool
>  	default y
>  
> +config STACKTRACE_SUPPORT
> +	bool
> +	default y
> +
>  config RWSEM_GENERIC_SPINLOCK
>  	bool
>  
> Index: linux-work/arch/powerpc/kernel/Makefile
> ===================================================================
> --- linux-work.orig/arch/powerpc/kernel/Makefile	2008-04-02 15:46:07.000000000 +1100
> +++ linux-work/arch/powerpc/kernel/Makefile	2008-04-02 16:46:07.000000000 +1100
> @@ -67,6 +67,7 @@ obj-$(CONFIG_BOOTX_TEXT)	+= btext.o
>  obj-$(CONFIG_SMP)		+= smp.o
>  obj-$(CONFIG_KPROBES)		+= kprobes.o
>  obj-$(CONFIG_PPC_UDBG_16550)	+= legacy_serial.o udbg_16550.o
> +obj-$(CONFIG_STACKTRACE)	+= stacktrace.o
>  
>  pci64-$(CONFIG_PPC64)		+= pci_dn.o isa-bridge.o
>  obj-$(CONFIG_PCI)		+= pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \
> Index: linux-work/arch/powerpc/kernel/stacktrace.c
> ===================================================================
> --- /dev/null	1970-01-01 00:00:00.000000000 +0000
> +++ linux-work/arch/powerpc/kernel/stacktrace.c	2008-04-02 16:46:07.000000000 +1100
> @@ -0,0 +1,52 @@
> +
> +#include <linux/sched.h>
> +#include <linux/stacktrace.h>
> +
> +
> +#ifdef CONFIG_PPC64
> +#define MIN_STACK_FRAME 112     /* same as STACK_FRAME_OVERHEAD, in fact */
> +#define FRAME_LR_SAVE   2
> +#define INT_FRAME_SIZE  (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288)
> +#define REGS_MARKER     0x7265677368657265ul
> +#define FRAME_MARKER    12
> +#else
> +#define MIN_STACK_FRAME 16
> +#define FRAME_LR_SAVE   1
> +#define INT_FRAME_SIZE  (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
> +#define REGS_MARKER     0x72656773ul
> +#define FRAME_MARKER    2
> +#endif
> +
> +
> +/*
> + * Save stack-backtrace addresses into a stack_trace buffer.
> + * If all_contexts is set, all contexts (hardirq, softirq and process)
> + * are saved. If not set then only the current context is saved.
> + */
> +void save_stack_trace(struct stack_trace *trace)
> +{
> +	unsigned long sp;
> +
> +	asm("mr %0,1" : "=r" (sp));
> +
> +	for (;;) {
> +		unsigned long *stack = (unsigned long *) sp;
> +		unsigned long newsp, ip;
> +
> +		if (!validate_sp(sp, current, MIN_STACK_FRAME))
> +			return;
> +
> +		newsp = stack[0];
> +		ip = stack[FRAME_LR_SAVE];
> +
> +		if (!trace->skip)
> +			trace->entries[trace->nr_entries++] = ip;
> +		else
> +			trace->skip--;
> +
> +		if (trace->nr_entries >= trace->max_entries)
> +			return;
> +
> +		sp = newsp;
> +	}
> +}
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev

      reply	other threads:[~2008-04-09 22:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-09  7:21 [PATCH 2/6] [POWERPC] lockdep stacktrace support Benjamin Herrenschmidt
2008-04-09 22:30 ` Benjamin Herrenschmidt [this message]

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=1207780257.9079.61.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).