lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Wed, 5 Oct 2016 19:46:00 -0300
From:   Arnaldo Carvalho de Melo <acme@...nel.org>
To:     Andi Kleen <andi@...stfloor.org>
Cc:     linux-kernel@...r.kernel.org, jolsa@...nel.org,
        Sukadev Bhattiprolu <sukadev@...ux.vnet.ibm.com>,
        Andi Kleen <ak@...ux.intel.com>
Subject: Re: [PATCH] perf, tools: Handle completion of upper case events

Em Wed, Oct 05, 2016 at 03:19:48PM -0700, Andi Kleen escreveu:
> From: Andi Kleen <ak@...ux.intel.com>
> 
> Vendor events are often specified in upper case. perf list outputs them
> in lower case. Handle this case in perf-completion.sh so that
> completion on the upper case events still works.
> 
> v2: Use locale aware check for upper case
> Signed-off-by: Andi Kleen <ak@...ux.intel.com>

Ok, this makes it work, but then:

[root@...et ~]# perf stat -e CPU-<TAB>
CPU-CLOCK       CPU-CYCLES      CPU-MIGRATIONS  
[root@...et ~]# perf stat -e CPU-CLOCK usleep 1
event syntax error: 'CPU-CLOCK'
                        \___ parser error
Run 'perf list' for a list of valid events

 Usage: perf stat [<options>] [<command>]

    -e, --event <event>   event selector. use 'perf list' to list available events
[root@...et ~]# 

It now allows for non-JSON events to be tab completed only to then to
fail when passing it to perf.

We need to uppercase autocomplete only JSON events, that then gets
accepted by perf's event parser, i.e. you need something like:

		[[:upper:]]*) evts=$($cmd list --raw-dump JSON | tr a-z A-Z) ;;

Just like we have for other event types, for instance, for
PERF_TYPE_HARDWARE:

[acme@...et linux]$ perf list --raw hw
branch-instructions branch-misses bus-cycles cache-misses cache-references cpu-cycles instructions ref-cycles

or software:

[acme@...et linux]$ perf list --raw sw
alignment-faults bpf-output context-switches cpu-clock cpu-migrations dummy emulation-faults major-faults minor-faults page-faults task-clock 
[acme@...et linux]$ 

That would be a nice fit as all events so far are lowercase, just these vendor
names are upper case.

- Arnaldo

> ---
>  tools/perf/perf-completion.sh | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/perf-completion.sh b/tools/perf/perf-completion.sh
> index 3ba80b2359cc..3cb5a800b646 100644
> --- a/tools/perf/perf-completion.sh
> +++ b/tools/perf/perf-completion.sh
> @@ -161,7 +161,11 @@ __perf_main ()
>  	# List possible events for -e option
>  	elif [[ $prev == @("-e"|"--event") &&
>  		$prev_skip_opts == @(record|stat|top) ]]; then
> -		evts=$($cmd list --raw-dump)
> +		# handle upper case events
> +		case "$cur" in
> +			[[:upper:]]*) evts=$($cmd list --raw-dump | tr a-z A-Z) ;;
> +			*) evts=$($cmd list --raw-dump) ;;
> +		esac
>  		__perfcomp_colon "$evts" "$cur"
>  	else
>  		# List subcommands for perf commands
> -- 
> 2.5.5

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ