lkml.org 
[lkml]   [2010]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/7] Enable pvclock flags in vcpu_time_info structure
    Date
    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.

    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..cd02f32 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_set_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..aa2262b 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_set_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));

    --
    1.6.2.2


    \
     
     \ /
      Last update: 2010-05-03 17:57    [W:0.034 / U:61.116 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site