linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: acme@redhat.com, a.p.zijlstra@chello.nl, mingo@elte.hu,
	paulus@samba.org, cjashfor@linux.vnet.ibm.com,
	eranian@google.com, gorcunov@openvz.org, tzanussi@gmail.com,
	mhiramat@redhat.com, robert.richter@amd.com, fche@redhat.com,
	linux-kernel@vger.kernel.org, masami.hiramatsu.pt@hitachi.com,
	drepper@gmail.com, asharma@fb.com,
	benjamin.redelings@nescent.org, Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Roland McGrath <roland@hack.frob.com>
Subject: Re: [RFC 09/23] x86_64: Store userspace rsp in system_call fastpath
Date: Thu, 28 Jun 2012 14:08:49 +0200	[thread overview]
Message-ID: <20120628120846.GA28527@somewhere> (raw)
In-Reply-To: <1340120894-9465-10-git-send-email-jolsa@redhat.com>

On Tue, Jun 19, 2012 at 05:48:00PM +0200, Jiri Olsa wrote:
> hi,
> I'd need help with this change.. basically it works, but I guess
> I could alter the FIXUP_TOP_OF_STACK macro as well, so the rsp is
> not initialized twice in slowpath.
> 
> But it seems quite complex.. so not really sure at the moment ;)
> 
> ideas?
> 
> thanks,
> jirka
> 
> ---
> Storing the userspace rsp into the pt_regs struct for the
> system_call fastpath (syscall instruction handler).
> 
> Following part of the pt_regs is allocated on stack:
> (via KERNEL_STACK_OFFSET)
> 
>     unsigned long ip;
>     unsigned long cs;
>     unsigned long flags;
>     unsigned long sp;
>     unsigned long ss;
> 
> but only ip is actually saved for fastpath.
> 
> For perf post unwind we need at least ip and sp to be able to
> start the unwind, so storing the old_rsp value to the sp.
> 
> Signed-off-by: Jiri Olsa <jolsa@redhat.com>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Cc: Roland McGrath <roland@hack.frob.com>
> ---
>  arch/x86/kernel/entry_64.S |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
> index 111f6bb..0444917 100644
> --- a/arch/x86/kernel/entry_64.S
> +++ b/arch/x86/kernel/entry_64.S
> @@ -516,6 +516,11 @@ GLOBAL(system_call_after_swapgs)
>  	SAVE_ARGS 8,0
>  	movq  %rax,ORIG_RAX-ARGOFFSET(%rsp)
>  	movq  %rcx,RIP-ARGOFFSET(%rsp)
> +#ifdef CONFIG_PERF_EVENTS
> +	/* We need rsp in fast path for perf post unwind. */
> +	movq  PER_CPU_VAR(old_rsp), %rcx
> +	movq  %rcx,RSP-ARGOFFSET(%rsp)
> +#endif

Another solution is to set/unset some TIF flag in perf_event_sched_in/out
such that we take the syscall slow path (tracesys) which records every non-scratch
registers. I can see that old_rsp is not saved in pt_regs by SAVE_REST so this may be
something to add in tracesys.

This way we don't bloat the syscall fastpath with a feature only used by some
developers.

>  	CFI_REL_OFFSET rip,RIP-ARGOFFSET
>  	testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
>  	jnz tracesys
> -- 
> 1.7.7.6
> 

  reply	other threads:[~2012-06-28 12:08 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-19 15:47 [RFCv5 00/23] perf: Add backtrace post dwarf unwind Jiri Olsa
2012-06-19 15:47 ` [PATCH 01/23] tracing/filter: Add missing initialization Jiri Olsa
2012-08-21 15:17   ` [tip:perf/core] " tip-bot for Jiri Olsa
2012-06-19 15:47 ` [PATCH 02/23] perf: Unified API to record selective sets of arch registers Jiri Olsa
2012-06-20 16:42   ` Frederic Weisbecker
2012-06-20 17:39     ` Jiri Olsa
2012-06-27 14:58       ` Frederic Weisbecker
2012-06-29  7:36         ` Jiri Olsa
2012-06-19 15:47 ` [PATCH 03/23] perf: Add ability to attach user level registers dump to sample Jiri Olsa
2012-06-27 15:11   ` Frederic Weisbecker
2012-06-27 15:13     ` Stephane Eranian
2012-06-27 15:24       ` Frederic Weisbecker
2012-06-27 15:25         ` Peter Zijlstra
2012-06-27 15:30           ` Frederic Weisbecker
2012-06-29  7:50             ` Jiri Olsa
2012-06-29 11:23               ` Frederic Weisbecker
2012-06-29 11:30                 ` Jiri Olsa
2012-06-29 11:39                   ` Frederic Weisbecker
2012-06-19 15:47 ` [PATCH 04/23] perf, x86: Add copy_from_user_nmi_nochk for best effort copy Jiri Olsa
2012-06-27 15:19   ` Frederic Weisbecker
2012-06-29  7:38     ` Jiri Olsa
2012-06-19 15:47 ` [PATCH 05/23] perf: Factor __output_copy to be usable with specific copy function Jiri Olsa
2012-06-19 15:47 ` [PATCH 06/23] perf: Add perf_output_skip function to skip bytes in sample Jiri Olsa
2012-06-27 15:32   ` Frederic Weisbecker
2012-06-19 15:47 ` [PATCH 07/23] perf: Add ability to attach user stack dump to sample Jiri Olsa
2012-06-19 15:47 ` [PATCH 08/23] perf: Add attribute to filter out callchains Jiri Olsa
2012-06-19 15:48 ` [RFC 09/23] x86_64: Store userspace rsp in system_call fastpath Jiri Olsa
2012-06-28 12:08   ` Frederic Weisbecker [this message]
2012-06-29  8:03     ` Jiri Olsa
2012-06-29 11:37       ` Frederic Weisbecker
2012-06-19 15:48 ` [PATCH 10/23] perf, tool: Adding PERF_ATTR_SIZE_VER2 to the header swap check Jiri Olsa
2012-06-19 15:48 ` [PATCH 11/23] perf, tool: Remove unsused evsel parameter from machine__resolve_callchain Jiri Olsa
2012-06-19 15:48 ` [PATCH 12/23] perf, tool: Factor DSO symtab types to generic binary types Jiri Olsa
2012-06-19 15:48 ` [PATCH 13/23] perf, tool: Add interface to read DSO image data Jiri Olsa
2012-06-19 15:48 ` [PATCH 14/23] perf, tool: Add '.note' check into search for NOTE section Jiri Olsa
2012-07-06 10:59   ` [tip:perf/core] perf symbols: " tip-bot for Jiri Olsa
2012-06-19 15:48 ` [PATCH 15/23] perf, tool: Back [vdso] DSO with real data Jiri Olsa
2012-06-19 15:48 ` [PATCH 16/23] perf, tool: Add interface to arch registers sets Jiri Olsa
2012-06-19 15:48 ` [PATCH 17/23] perf, tool: Add libunwind dependency for dwarf cfi unwinding Jiri Olsa
2012-06-19 15:48 ` [PATCH 18/23] perf, tool: Support user regs and stack in sample parsing Jiri Olsa
2012-06-19 15:48 ` [PATCH 19/23] perf, tool: Support for dwarf cfi unwinding on post processing Jiri Olsa
2012-06-19 15:48 ` [PATCH 20/23] perf, tool: Adding round_up/round_down macros Jiri Olsa
2012-07-06 11:00   ` [tip:perf/core] perf tools: " tip-bot for Jiri Olsa
2012-06-19 15:48 ` [PATCH 21/23] perf, tool: Support for dwarf mode callchain on perf record Jiri Olsa
2012-06-19 15:48 ` [PATCH 22/23] perf, tool: Add dso data caching Jiri Olsa
2012-06-19 15:48 ` [PATCH 23/23] perf, tool: Add dso data caching tests Jiri Olsa

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=20120628120846.GA28527@somewhere \
    --to=fweisbec@gmail.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=asharma@fb.com \
    --cc=benjamin.redelings@nescent.org \
    --cc=bp@alien8.de \
    --cc=cjashfor@linux.vnet.ibm.com \
    --cc=drepper@gmail.com \
    --cc=eranian@google.com \
    --cc=fche@redhat.com \
    --cc=gorcunov@openvz.org \
    --cc=hpa@zytor.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mhiramat@redhat.com \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=robert.richter@amd.com \
    --cc=roland@hack.frob.com \
    --cc=tzanussi@gmail.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 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).