Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0555642 authored by Ian Munsie's avatar Ian Munsie Committed by Ingo Molnar
Browse files

perf: Fix endianness argument compatibility with OPT_BOOLEAN() and introduce OPT_INCR()



Parsing an option from the command line with OPT_BOOLEAN on a
bool data type would not work on a big-endian machine due to the
manner in which the boolean was being cast into an int and
incremented. For example, running 'perf probe --list' on a
PowerPC machine would fail to properly set the list_events bool
and would therefore print out the usage information and
terminate.

This patch makes OPT_BOOLEAN work as expected with a bool
datatype. For cases where the original OPT_BOOLEAN was
intentionally being used to increment an int each time it was
passed in on the command line, this patch introduces OPT_INCR
with the old behaviour of OPT_BOOLEAN (the verbose variable is
currently the only such example of this).

I have reviewed every use of OPT_BOOLEAN to verify that a true
C99 bool was passed. Where integers were used, I verified that
they were only being used for boolean logic and changed them to
bools to ensure that they would not be mistakenly used as ints.
The major exception was the verbose variable which now uses
OPT_INCR instead of OPT_BOOLEAN.

Signed-off-by: default avatarIan Munsie <imunsie@au.ibm.com>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Cc: <stable@kernel.org> # NOTE: wont apply to .3[34].x cleanly, please backport
Cc: Git development list <git@vger.kernel.org>
Cc: Ian Munsie <imunsie@au1.ibm.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Eric B Munson <ebmunson@us.ibm.com>
Cc: Valdis.Kletnieks@vt.edu
Cc: WANG Cong <amwang@redhat.com>
Cc: Thiago Farina <tfransosi@gmail.com>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Jaswinder Singh Rajput <jaswinderrajput@gmail.com>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Anton Blanchard <anton@samba.org>
Cc: John Kacur <jkacur@redhat.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <1271147857-11604-1-git-send-email-imunsie@au.ibm.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 53e5b5c2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@

static const char	*length_str	= "1MB";
static const char	*routine	= "default";
static int		use_clock	= 0;
static bool		use_clock	= false;
static int		clock_fd;

static const struct option options[] = {
+2 −2
Original line number Diff line number Diff line
@@ -31,9 +31,9 @@

#define DATASIZE 100

static int use_pipes = 0;
static bool use_pipes = false;
static unsigned int loops = 100;
static unsigned int thread_mode = 0;
static bool thread_mode = false;
static unsigned int num_groups = 10;

struct sender_context {
+4 −4
Original line number Diff line number Diff line
@@ -28,11 +28,11 @@

static char		const *input_name = "perf.data";

static int		force;
static bool		force;

static int		full_paths;
static bool		full_paths;

static int		print_line;
static bool		print_line;

struct sym_hist {
	u64		sum;
@@ -595,7 +595,7 @@ static const struct option options[] = {
	OPT_STRING('s', "symbol", &sym_hist_filter, "symbol",
		    "symbol to annotate"),
	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
	OPT_BOOLEAN('v', "verbose", &verbose,
	OPT_INCR('v', "verbose", &verbose,
		    "be more verbose (show symbol address, etc)"),
	OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
		    "dump raw trace in ASCII"),
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ static const struct option buildid_cache_options[] = {
		   "file list", "file(s) to add"),
	OPT_STRING('r', "remove", &remove_name_list_str, "file list",
		    "file(s) to remove"),
	OPT_BOOLEAN('v', "verbose", &verbose, "be more verbose"),
	OPT_INCR('v', "verbose", &verbose, "be more verbose"),
	OPT_END()
};

+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#include "util/symbol.h"

static char const *input_name = "perf.data";
static int force;
static bool force;
static bool with_hits;

static const char * const buildid_list_usage[] = {
@@ -29,7 +29,7 @@ static const struct option options[] = {
	OPT_STRING('i', "input", &input_name, "file",
		    "input file name"),
	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
	OPT_BOOLEAN('v', "verbose", &verbose,
	OPT_INCR('v', "verbose", &verbose,
		    "be more verbose"),
	OPT_END()
};
Loading