public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Hollis Blanchard <hollisb@us.ibm.com>
To: Avi Kivity <avi@qumranet.com>
Cc: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, "Liu,
	Eric E" <eric.e.liu@intel.com>, Jerone Young <jyoung5@us.ibm.com>
Subject: Re: [PATCH 1 of 3] Remove use of bit fields in kvm trace structure
Date: Fri, 20 Jun 2008 11:59:28 -0500	[thread overview]
Message-ID: <1213981168.5618.5.camel@localhost.localdomain> (raw)
In-Reply-To: <c2777036ad4d61259024.1213935553@thinkpadL>

Slightly unconventional coding style, but Acked-by: Hollis Blanchard
<hollisb@us.ibm.com>

Eric, as I mentioned previously, bitfields cannot be used in portable
binary formats.

Avi, would you apply please?

-- 
Hollis Blanchard
IBM Linux Technology Center

On Thu, 2008-06-19 at 23:19 -0500, Jerone Young wrote:
> 2 files changed, 21 insertions(+), 11 deletions(-)
> include/linux/kvm.h  |   10 +++++++---
> virt/kvm/kvm_trace.c |   22 ++++++++++++++--------
> 
> 
> This patch fixes kvmtrace use on big endian systems. When using bit fields the compiler will lay data out in the wrong order expected when laid down into a file. This fixes it by using one variable instead of using bit fields.
> 
> Signed-off-by: Jerone Young <jyoung5@us.ibm.com>
> 
> diff --git a/include/linux/kvm.h b/include/linux/kvm.h
> --- a/include/linux/kvm.h
> +++ b/include/linux/kvm.h
> @@ -311,9 +311,13 @@ struct kvm_s390_interrupt {
> 
>  /* This structure represents a single trace buffer record. */
>  struct kvm_trace_rec {
> -	__u32 event:28;
> -	__u32 extra_u32:3;
> -	__u32 cycle_in:1;
> +	/* variable rec_val
> + 	 * is split into:
> + 	 * bits 0 - 27  -> event id
> + 	 * bits 28 -30  -> number of extra data args of size u32
> + 	 * bits 31      -> binary indicator for if tsc is in record
> + 	 */
> +	__u32 rec_val;
>  	__u32 pid;
>  	__u32 vcpu_id;
>  	union {
> diff --git a/virt/kvm/kvm_trace.c b/virt/kvm/kvm_trace.c
> --- a/virt/kvm/kvm_trace.c
> +++ b/virt/kvm/kvm_trace.c
> @@ -54,12 +54,15 @@ static void kvm_add_trace(void *probe_pr
>  	struct kvm_trace *kt = kvm_trace;
>  	struct kvm_trace_rec rec;
>  	struct kvm_vcpu *vcpu;
> -	int    i, extra, size;
> +	int    i, size;
> +	u32 extra;
> 
>  	if (unlikely(kt->trace_state != KVM_TRACE_STATE_RUNNING))
>  		return;
> +	
> +	/* set event id */	
> +	rec.rec_val	= 0x0fffffff & va_arg(*args, u32);
> 
> -	rec.event	= va_arg(*args, u32);
>  	vcpu		= va_arg(*args, struct kvm_vcpu *);
>  	rec.pid		= current->tgid;
>  	rec.vcpu_id	= vcpu->vcpu_id;
> @@ -67,21 +70,24 @@ static void kvm_add_trace(void *probe_pr
>  	extra   	= va_arg(*args, u32);
>  	WARN_ON(!(extra <= KVM_TRC_EXTRA_MAX));
>  	extra 		= min_t(u32, extra, KVM_TRC_EXTRA_MAX);
> -	rec.extra_u32   = extra;
> 
> -	rec.cycle_in 	= p->cycle_in;
> +	/* set inidicator for tcs record */
> +	rec.rec_val 	|= 0x80000000 & (p->cycle_in << 31);
> +	
> +	/* set extra data num */
> +	rec.rec_val     |= 0x70000000 & (extra << 28);
> 
> -	if (rec.cycle_in) {
> +	if (p->cycle_in) {
>  		rec.u.cycle.cycle_u64 = get_cycles();
> 
> -		for (i = 0; i < rec.extra_u32; i++)
> +		for (i = 0; i < extra; i++)
>  			rec.u.cycle.extra_u32[i] = va_arg(*args, u32);
>  	} else {
> -		for (i = 0; i < rec.extra_u32; i++)
> +		for (i = 0; i < extra; i++)
>  			rec.u.nocycle.extra_u32[i] = va_arg(*args, u32);
>  	}
> 
> -	size = calc_rec_size(rec.cycle_in, rec.extra_u32 * sizeof(u32));
> +	size = calc_rec_size(p->cycle_in, extra * sizeof(u32));
>  	relay_write(kt->rchan, &rec, size);
>  }
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


  reply	other threads:[~2008-06-20 16:59 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-20  4:19 [PATCH 0 of 3] Add ability for KVM TRACE to work on other archs Jerone Young
2008-06-20  4:19 ` [PATCH 1 of 3] Remove use of bit fields in kvm trace structure Jerone Young
2008-06-20 16:59   ` Hollis Blanchard [this message]
2008-06-23  2:33   ` Avi Kivity
2008-06-20  4:19 ` [PATCH 2 of 3] Move KVM TRACE DEFINITIONS to common header Jerone Young
2008-06-29 11:50   ` Avi Kivity
2008-07-01 19:59     ` Hollis Blanchard
2008-07-01 21:23       ` [PATCH 2 of 3] [v2] " Hollis Blanchard
2008-07-05  9:35         ` Avi Kivity
2008-06-20  4:19 ` [PATCH 3 of 3] Add new KVM TRACE events Jerone Young

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=1213981168.5618.5.camel@localhost.localdomain \
    --to=hollisb@us.ibm.com \
    --cc=avi@qumranet.com \
    --cc=eric.e.liu@intel.com \
    --cc=jyoung5@us.ibm.com \
    --cc=kvm-ppc@vger.kernel.org \
    --cc=kvm@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox