From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753500AbdCPTUR (ORCPT ); Thu, 16 Mar 2017 15:20:17 -0400 Received: from mail.kernel.org ([198.145.29.136]:40998 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752591AbdCPTUP (ORCPT ); Thu, 16 Mar 2017 15:20:15 -0400 Date: Thu, 16 Mar 2017 15:19:32 -0400 From: Steven Rostedt To: Linus Torvalds Cc: Linux Kernel Mailing List , Ingo Molnar , Andrew Morton , Thomas Gleixner , Peter Zijlstra , Masami Hiramatsu , "H. Peter Anvin" , Andy Lutomirski , Josh Poimboeuf Subject: Re: [PATCH 4/5 v3] ftrace/x86_32: Clean up ftrace_regs_caller Message-ID: <20170316151932.5b9167b5@gandalf.local.home> In-Reply-To: References: <20170316172008.086705006@goodmis.org> <20170316172056.576095199@goodmis.org> <20170316140913.653af64d@gandalf.local.home> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 16 Mar 2017 11:19:44 -0700 Linus Torvalds wrote: > On Thu, Mar 16, 2017 at 11:09 AM, Steven Rostedt wrote: > > + > > + /* Since we don't care about cs, move flags there to simplify return */ > > + movl 14*4(%esp), %eax > > + movl %eax, 13*4(%esp) > > + > > + /* Move return ip back to its original location */ > > + movl 12*4(%esp), %eax > > + movl %eax, 14*4(%esp) > > Could this perhaps be removed entirely? > > The return code could instead do: > > ... restore all the normal registers .. > > # Now restore flags that is under the return address and our > fake __KERNEL_CS > pushl 8(%esp) > popfl > > # and then return, skipping __KERNEL_CS and %flasg > ret $8 > > which is smaller and simpler than (again) playing games with stack entries. > > Linus The thing is we don't return, we jump to the location that may be modified to run the function graph tracer. .Lftrace_ret: #ifdef CONFIG_FUNCTION_GRAPH_TRACER .globl ftrace_graph_call ftrace_graph_call: jmp ftrace_stub <- this can turn to a jump to function graph tracing #endif WEAK(ftrace_stub) ret END(ftrace_caller) [...] popf /* flags is in the cs location */ jmp .Lftrace_ret -- Steve