All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: David Ahern <dsahern@gmail.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>, Jiri Olsa <jolsa@redhat.com>,
	KVM <kvm@vger.kernel.org>,
	linux-s390 <linux-s390@vger.kernel.org>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>,
	Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Subject: Re: [PATCH 08/11] perf kvm: allow for variable string sizes
Date: Mon, 05 May 2014 12:27:59 +0200	[thread overview]
Message-ID: <536767AF.3000907@de.ibm.com> (raw)
In-Reply-To: <1398417153-57347-9-git-send-email-borntraeger@de.ibm.com>

David,

thanks for the review. 

Are you ok with this change as well? The alternative is to shorten our descriptions (in 1/11 s390: add sie exit reasons tables), which would make the trace output less comprehensible, though.

Christian

On 25/04/14 11:12, Christian Borntraeger wrote:
> From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
> 
> This makes it possible for other architectures to decode to different
> string lengths.
> 
> Needed by follow-up patch "perf kvm: add stat support on s390".
> 
> Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
>  tools/perf/builtin-kvm.c | 38 +++++++++++++++++++++++---------------
>  1 file changed, 23 insertions(+), 15 deletions(-)
> 
> diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
> index 922706c..806c0e4 100644
> --- a/tools/perf/builtin-kvm.c
> +++ b/tools/perf/builtin-kvm.c
> @@ -75,7 +75,7 @@ struct kvm_events_ops {
>  	bool (*is_end_event)(struct perf_evsel *evsel,
>  			     struct perf_sample *sample, struct event_key *key);
>  	void (*decode_key)(struct perf_kvm_stat *kvm, struct event_key *key,
> -			   char decode[20]);
> +			   char *decode);
>  	const char *name;
>  };
> 
> @@ -84,6 +84,8 @@ struct exit_reasons_table {
>  	const char *reason;
>  };
> 
> +#define DECODE_STR_LEN_MAX 80
> +
>  #define EVENTS_BITS		12
>  #define EVENTS_CACHE_SIZE	(1UL << EVENTS_BITS)
> 
> @@ -101,6 +103,8 @@ struct perf_kvm_stat {
>  	struct exit_reasons_table *exit_reasons;
>  	const char *exit_reasons_isa;
> 
> +	int decode_str_len;
> +
>  	struct kvm_events_ops *events_ops;
>  	key_cmp_fun compare;
>  	struct list_head kvm_events_cache[EVENTS_CACHE_SIZE];
> @@ -182,12 +186,12 @@ static const char *get_exit_reason(struct perf_kvm_stat *kvm,
> 
>  static void exit_event_decode_key(struct perf_kvm_stat *kvm,
>  				  struct event_key *key,
> -				  char decode[20])
> +				  char *decode)
>  {
>  	const char *exit_reason = get_exit_reason(kvm, kvm->exit_reasons,
>  						  key->key);
> 
> -	scnprintf(decode, 20, "%s", exit_reason);
> +	scnprintf(decode, kvm->decode_str_len, "%s", exit_reason);
>  }
> 
>  static struct kvm_events_ops exit_events = {
> @@ -249,10 +253,11 @@ static bool mmio_event_end(struct perf_evsel *evsel, struct perf_sample *sample,
> 
>  static void mmio_event_decode_key(struct perf_kvm_stat *kvm __maybe_unused,
>  				  struct event_key *key,
> -				  char decode[20])
> +				  char *decode)
>  {
> -	scnprintf(decode, 20, "%#lx:%s", (unsigned long)key->key,
> -				key->info == KVM_TRACE_MMIO_WRITE ? "W" : "R");
> +	scnprintf(decode, kvm->decode_str_len, "%#lx:%s",
> +		  (unsigned long)key->key,
> +		  key->info == KVM_TRACE_MMIO_WRITE ? "W" : "R");
>  }
> 
>  static struct kvm_events_ops mmio_events = {
> @@ -292,10 +297,11 @@ static bool ioport_event_end(struct perf_evsel *evsel,
> 
>  static void ioport_event_decode_key(struct perf_kvm_stat *kvm __maybe_unused,
>  				    struct event_key *key,
> -				    char decode[20])
> +				    char *decode)
>  {
> -	scnprintf(decode, 20, "%#llx:%s", (unsigned long long)key->key,
> -				key->info ? "POUT" : "PIN");
> +	scnprintf(decode, kvm->decode_str_len, "%#llx:%s",
> +		  (unsigned long long)key->key,
> +		  key->info ? "POUT" : "PIN");
>  }
> 
>  static struct kvm_events_ops ioport_events = {
> @@ -523,13 +529,13 @@ static bool handle_end_event(struct perf_kvm_stat *kvm,
>  	time_diff = sample->time - time_begin;
> 
>  	if (kvm->duration && time_diff > kvm->duration) {
> -		char decode[32];
> +		char decode[DECODE_STR_LEN_MAX];
> 
>  		kvm->events_ops->decode_key(kvm, &event->key, decode);
>  		if (strcmp(decode, "HLT")) {
> -			pr_info("%" PRIu64 " VM %d, vcpu %d: %s event took %" PRIu64 "usec\n",
> +			pr_info("%" PRIu64 " VM %d, vcpu %d: %*s event took %" PRIu64 "usec\n",
>  				 sample->time, sample->pid, vcpu_record->vcpu_id,
> -				 decode, time_diff/1000);
> +				 32, decode, time_diff/1000);
>  		}
>  	}
> 
> @@ -738,7 +744,7 @@ static void show_timeofday(void)
> 
>  static void print_result(struct perf_kvm_stat *kvm)
>  {
> -	char decode[20];
> +	char decode[DECODE_STR_LEN_MAX];
>  	struct kvm_event *event;
>  	int vcpu = kvm->trace_vcpu;
> 
> @@ -749,7 +755,7 @@ static void print_result(struct perf_kvm_stat *kvm)
> 
>  	pr_info("\n\n");
>  	print_vcpu_info(kvm);
> -	pr_info("%20s ", kvm->events_ops->name);
> +	pr_info("%*s ", kvm->decode_str_len, kvm->events_ops->name);
>  	pr_info("%10s ", "Samples");
>  	pr_info("%9s ", "Samples%");
> 
> @@ -768,7 +774,7 @@ static void print_result(struct perf_kvm_stat *kvm)
>  		min = get_event_min(event, vcpu);
> 
>  		kvm->events_ops->decode_key(kvm, &event->key, decode);
> -		pr_info("%20s ", decode);
> +		pr_info("%*s ", kvm->decode_str_len, decode);
>  		pr_info("%10llu ", (unsigned long long)ecount);
>  		pr_info("%8.2f%% ", (double)ecount / kvm->total_count * 100);
>  		pr_info("%8.2f%% ", (double)etime / kvm->total_time * 100);
> @@ -839,9 +845,11 @@ static int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
>  	if (strstr(cpuid, "Intel")) {
>  		kvm->exit_reasons = vmx_exit_reasons;
>  		kvm->exit_reasons_isa = "VMX";
> +		kvm->decode_str_len = 20;
>  	} else if (strstr(cpuid, "AMD")) {
>  		kvm->exit_reasons = svm_exit_reasons;
>  		kvm->exit_reasons_isa = "SVM";
> +		kvm->decode_str_len = 20;
>  	} else {
>  		pr_err("CPU %s is not supported.\n", cpuid);
>  		return -ENOTSUP;
> 

  reply	other threads:[~2014-05-05 10:27 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-25  9:12 [PATCH/RFC 00/11] perf/s390/kvm: trace events, perf kvm stat Christian Borntraeger
2014-04-25  9:12 ` [PATCH 01/11] s390: add sie exit reasons tables Christian Borntraeger
2014-04-25  9:12 ` [PATCH 02/11] KVM: s390: Use trace tables from sie.h Christian Borntraeger
2014-04-25  9:12 ` [PATCH 03/11] KVM: s390: decoder of SIE intercepted instructions Christian Borntraeger
2014-04-25  9:12 ` [PATCH 04/11] KVM: s390: Use intercept_insn decoder in trace event Christian Borntraeger
2014-04-25  9:12 ` [PATCH 05/11] perf kvm: Intoduce HAVE_KVM_STAT_SUPPORT flag Christian Borntraeger
2014-04-25  9:12 ` [PATCH 06/11] perf kvm: simplify of exit reasons tables definitions Christian Borntraeger
2014-04-25  9:12 ` [PATCH 07/11] perf kvm: Refactoring of cpu_isa_config() Christian Borntraeger
2014-04-25  9:12 ` [PATCH 08/11] perf kvm: allow for variable string sizes Christian Borntraeger
2014-05-05 10:27   ` Christian Borntraeger [this message]
2014-05-05 15:29     ` David Ahern
2014-04-25  9:12 ` [PATCH 09/11] perf kvm: use defines of kvm events Christian Borntraeger
2014-05-05 13:33   ` Paolo Bonzini
2014-04-25  9:12 ` [PATCH 10/11] perf: allow to use cpuinfo on s390 Christian Borntraeger
2014-04-25  9:12 ` [PATCH 11/11] perf kvm: add stat support " Christian Borntraeger
2014-05-05 10:43   ` Christian Borntraeger
2014-05-05 10:43     ` Christian Borntraeger
2014-05-02  9:16 ` [PATCH/RFC 00/11] perf/s390/kvm: trace events, perf kvm stat Jiri Olsa
2014-05-02 18:14   ` David Ahern
2014-05-05 10:36     ` Christian Borntraeger

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=536767AF.3000907@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=acme@redhat.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=dsahern@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=yarygin@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.