From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from hrndva-omtalb.mail.rr.com (hrndva-omtalb.mail.rr.com [71.74.56.122]) by ozlabs.org (Postfix) with ESMTP id 4507CB7113 for ; Thu, 3 Feb 2011 01:28:19 +1100 (EST) Subject: RE: [PATCH 4/6] ftrace syscalls: Allow arch specific syscallsymbol matching From: Steven Rostedt To: David Laight In-Reply-To: References: Content-Type: text/plain; charset="ISO-8859-15" Date: Wed, 02 Feb 2011 09:28:13 -0500 Message-ID: <1296656893.10797.53.camel@gandalf.stny.rr.com> Mime-Version: 1.0 Cc: Andreas Dilger , David Gibson , Dave Kleikamp , "open list:DOCUMENTATION" , Jiri Kosina , Namhyung Kim , linux-kernel@vger.kernel.org, Alexander Graf , Avantika Mathur , Ingo Molnar , Andreas Schwab , Ian Munsie , KOSAKI Motohiro , Frederic Weisbecker , Scott Wood , Paul Mackerras , Andrew Morton , Nathan Lynch , linuxppc-dev , Jason Baron List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On Wed, 2011-02-02 at 14:15 +0000, David Laight wrote: > > +#define arch_syscall_match_sym_name(sym, name) !strcmp(sym + 3, name > + 3) > > Whenever you use a #define macro arg, you should enclose it in (). > About the only time you don't need to is when it is being > passed as an argument to another function > (ie when it's use is also ',' separated). > > So the above ought to be: > #define arch_syscall_match_sym_name(sym, name) (!strcmp((sym) + 3, > (name) + 3)) I would have mentioned this if I wanted it to stay a macro ;) > > Whether an inline function is better or worse is much more subtle! > For instance I've used: > asm volatile ( "# line " STR(__LINE__) :: ) > to stop gcc merging the tails of conditionals. > Useful when the conditional is at the end of a loop (etc), > it might increase code size slightly, but removes a branch. > > If I put one of those in an 'inline' function separate copies > of the function end up sharing code. > With a #define __LINE__ differs so they don't. > > (I had some code to get below 190 clocks, these changes > were significant!) For what you were doing, this may have helped. But the code in question is the "default" version of the function. I much more prefer it to be a static inline. The issues you experience could change from gcc to gcc. But static inlined functions are much cleaner and easier to read than macros. Using a macro for this purpose is just too messy. Again, look at include/trace/ftrace.h. If I'm saying using a macro is ugly, then don't use it! Listen to me, because I'm Mr. Ugly Macro Man. -- Steve