From: Andi Kleen <ak@suse.de>
To: Jan Beulich <jbeulich@novell.com>
Cc: Andi Kleen <ak@suse.de>,
linux-kernel@vger.kernel.org, patches@x86-64.org
Subject: Re: [PATCH] x86: optionally show last exception from/to register contents
Date: Mon, 13 Aug 2007 15:08:45 +0200 [thread overview]
Message-ID: <20070813130845.GA3406@bingen.suse.de> (raw)
In-Reply-To: <46C05D91.76E4.0078.0@novell.com>
On Mon, Aug 13, 2007 at 12:33:05PM +0100, Jan Beulich wrote:
>
> if (cpu_has_ds) {
> unsigned int l1;
> --- linux-2.6.23-rc3/arch/i386/kernel/traps.c 2007-08-13 08:59:45.000000000 +0200
> +++ 2.6.23-rc3-x86-ler/arch/i386/kernel/traps.c 2007-08-07 10:42:55.000000000 +0200
> @@ -321,6 +321,13 @@ void show_registers(struct pt_regs *regs
> unsigned int code_len = code_bytes;
> unsigned char c;
>
> + if (__get_cpu_var(ler_msr)) {
> + u32 from, to, hi;
> +
> + rdmsr(__get_cpu_var(ler_msr), from, hi);
> + rdmsr(__get_cpu_var(ler_msr) + 1, to, hi);
> + printk("LER: %08x -> %08x\n", from, to);
> + }
This seems racy -- AFAIK the MSR will record the last branch
before an interrupt too, and the trap handlers enable interrupts
before coming here.
Can't think of a good way to avoid that for page fault at least
without impacting interrupt latency or reading the MSR always.
The other thing is that this should use print_symbol()
> printk("\n" KERN_EMERG "Stack: ");
> show_stack_log_lvl(NULL, regs, (unsigned long *)esp, KERN_EMERG);
>
> @@ -360,6 +367,18 @@ int is_valid_bugaddr(unsigned long eip)
> return ud2 == 0x0b0f;
> }
>
> +DEFINE_PER_CPU(u32, ler_msr);
> +int ler_enabled = 0;
> +
> +void ler_enable(void) {
> + if (__get_cpu_var(ler_msr)) {
> + u64 debugctl;
> +
> + rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl);
> + wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | 1);
Better use checking_rd/wrmsrl and disable on fail -- often emulators
fake specific CPUs, but don't implement all debugging features.
> +static int __init ler_setup(char *s)
> +{
> + ler_enabled = 1;
> + return 1;
> +}
> +__setup("ler", ler_setup);
I don't think the option is very useful.
BTW I have a patch somewhere to save/report last branch on exception
too, but it never seemed suitable for mainline because of its
high overhead. If someone submitted a full BTS driver I would
be tempted though :)
-Andi
next prev parent reply other threads:[~2007-08-13 14:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-13 11:33 [PATCH] x86: optionally show last exception from/to register contents Jan Beulich
2007-08-13 13:08 ` Andi Kleen [this message]
2007-08-13 13:13 ` Jan Beulich
2007-08-13 14:21 ` Andi Kleen
2007-08-13 16:45 ` Randy Dunlap
2007-08-13 15:05 ` Keith Owens
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=20070813130845.GA3406@bingen.suse.de \
--to=ak@suse.de \
--cc=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@x86-64.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 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.