All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Glauber Costa <glommer@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, avi@redhat.com
Subject: Re: [PATCH 1/6] Enable pvclock flags in vcpu_time_info structure
Date: Mon, 26 Apr 2010 11:11:57 -0700	[thread overview]
Message-ID: <4BD5D76D.9020601@goop.org> (raw)
In-Reply-To: <1272303988-21929-2-git-send-email-glommer@redhat.com>

On 04/26/2010 10:46 AM, Glauber Costa wrote:
> This patch removes one padding byte and transform it into a flags
> field. New versions of guests using pvclock will query these flags
> upon each read.
>   

Is this necessary?  Why not just make the pvclock driver maintain a
local flag set, and have the HV backend call into it to update it.  Why
does it need to be part of the pvclock structure?

    J

> Flags, however, will only be interpreted when the guest decides to.
> It uses the pvclock_valid_flags function to signal that a specific
> set of flags should be taken into consideration. Which flags are valid
> are usually devised via HV negotiation.
>
> Signed-off-by: Glauber Costa <glommer@redhat.com>
> CC: Jeremy Fitzhardinge <jeremy@goop.org>
> ---
>  arch/x86/include/asm/pvclock-abi.h |    3 ++-
>  arch/x86/include/asm/pvclock.h     |    1 +
>  arch/x86/kernel/pvclock.c          |    9 +++++++++
>  3 files changed, 12 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/include/asm/pvclock-abi.h b/arch/x86/include/asm/pvclock-abi.h
> index 6d93508..ec5c41a 100644
> --- a/arch/x86/include/asm/pvclock-abi.h
> +++ b/arch/x86/include/asm/pvclock-abi.h
> @@ -29,7 +29,8 @@ struct pvclock_vcpu_time_info {
>  	u64   system_time;
>  	u32   tsc_to_system_mul;
>  	s8    tsc_shift;
> -	u8    pad[3];
> +	u8    flags;
> +	u8    pad[2];
>  } __attribute__((__packed__)); /* 32 bytes */
>  
>  struct pvclock_wall_clock {
> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
> index 53235fd..c50823f 100644
> --- a/arch/x86/include/asm/pvclock.h
> +++ b/arch/x86/include/asm/pvclock.h
> @@ -6,6 +6,7 @@
>  
>  /* some helper functions for xen and kvm pv clock sources */
>  cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src);
> +void pvclock_valid_flags(u8 flags);
>  unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src);
>  void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
>  			    struct pvclock_vcpu_time_info *vcpu,
> diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
> index 03801f2..8f4af7b 100644
> --- a/arch/x86/kernel/pvclock.c
> +++ b/arch/x86/kernel/pvclock.c
> @@ -31,8 +31,16 @@ struct pvclock_shadow_time {
>  	u32 tsc_to_nsec_mul;
>  	int tsc_shift;
>  	u32 version;
> +	u8  flags;
>  };
>  
> +static u8 valid_flags = 0;
> +
> +void pvclock_valid_flags(u8 flags)
> +{
> +	valid_flags = flags;
> +}
> +
>  /*
>   * Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
>   * yielding a 64-bit result.
> @@ -91,6 +99,7 @@ static unsigned pvclock_get_time_values(struct pvclock_shadow_time *dst,
>  		dst->system_timestamp  = src->system_time;
>  		dst->tsc_to_nsec_mul   = src->tsc_to_system_mul;
>  		dst->tsc_shift         = src->tsc_shift;
> +		dst->flags             = src->flags;
>  		rmb();		/* test version after fetching data */
>  	} while ((src->version & 1) || (dst->version != src->version));
>  
>   


  parent reply	other threads:[~2010-04-26 18:12 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-26 17:46 [PATCH 0/6] pvclock fixes Glauber Costa
2010-04-26 17:46 ` [PATCH 1/6] Enable pvclock flags in vcpu_time_info structure Glauber Costa
2010-04-26 17:46   ` [PATCH 2/6] Add a global synchronization point for pvclock Glauber Costa
2010-04-26 17:46     ` [PATCH 3/6] change msr numbers for kvmclock Glauber Costa
2010-04-26 17:46       ` [PATCH 4/6] export new cpuid KVM_CAP Glauber Costa
2010-04-26 17:46         ` [PATCH 5/6] Try using new kvm clock msrs Glauber Costa
2010-04-26 17:46           ` [PATCH 6/6] don't compute pvclock adjustments if we trust the tsc Glauber Costa
2010-04-27 13:40             ` Marcelo Tosatti
2010-04-27 15:11               ` Glauber Costa
2010-04-27 18:03               ` Avi Kivity
2010-04-27 18:57                 ` Glauber Costa
2010-04-27 13:35           ` [PATCH 5/6] Try using new kvm clock msrs Marcelo Tosatti
2010-04-27 13:30         ` [PATCH 4/6] export new cpuid KVM_CAP Marcelo Tosatti
2010-04-27 15:09           ` Glauber Costa
2010-04-27 16:55           ` Glauber Costa
2010-04-27 18:12         ` Avi Kivity
2010-04-27 19:09           ` Glauber Costa
2010-04-27 19:20             ` Avi Kivity
2010-04-27 13:28     ` [PATCH 2/6] Add a global synchronization point for pvclock Marcelo Tosatti
2010-04-27 18:00       ` Jeremy Fitzhardinge
2010-04-26 18:11   ` Jeremy Fitzhardinge [this message]
2010-04-26 18:45     ` [PATCH 1/6] Enable pvclock flags in vcpu_time_info structure Glauber Costa
2010-04-27 18:07   ` Avi Kivity
2010-04-27 19:09     ` Glauber Costa
2010-04-27  2:21 ` [PATCH 0/6] pvclock fixes Zachary Amsden

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=4BD5D76D.9020601@goop.org \
    --to=jeremy@goop.org \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@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 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.