lkml.org 
[lkml]   [2015]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 01/12] KVM: x86: Collect information for setting TSC scaling ratio
    Date
    The number of bits of the fractional part of the 64-bit TSC scaling
    ratio in VMX and SVM is different. This patch makes the architecture
    code to collect the number of fractional bits and other related
    information into variables that can be accessed in the common code.

    Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
    ---
    arch/x86/include/asm/kvm_host.h | 8 ++++++++
    arch/x86/kvm/svm.c | 5 +++++
    arch/x86/kvm/x86.c | 8 ++++++++
    3 files changed, 21 insertions(+)

    diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
    index 2beee03..5b9b86e 100644
    --- a/arch/x86/include/asm/kvm_host.h
    +++ b/arch/x86/include/asm/kvm_host.h
    @@ -965,6 +965,14 @@ extern bool kvm_has_tsc_control;
    extern u32 kvm_min_guest_tsc_khz;
    /* maximum supported tsc_khz for guests */
    extern u32 kvm_max_guest_tsc_khz;
    +/* number of bits of the fractional part of the TSC scaling ratio */
    +extern u8 kvm_tsc_scaling_ratio_frac_bits;
    +/* reserved bits of TSC scaling ratio (SBZ) */
    +extern u64 kvm_tsc_scaling_ratio_rsvd;
    +/* default TSC scaling ratio (= 1.0) */
    +extern u64 kvm_default_tsc_scaling_ratio;
    +/* maximum allowed value of TSC scaling ratio */
    +extern u64 kvm_max_tsc_scaling_ratio;

    enum emulation_result {
    EMULATE_DONE, /* no further processing */
    diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
    index 94b7d15..eff7db7 100644
    --- a/arch/x86/kvm/svm.c
    +++ b/arch/x86/kvm/svm.c
    @@ -963,7 +963,12 @@ static __init int svm_hardware_setup(void)
    max = min(0x7fffffffULL, __scale_tsc(tsc_khz, TSC_RATIO_MAX));

    kvm_max_guest_tsc_khz = max;
    +
    + kvm_max_tsc_scaling_ratio = TSC_RATIO_MAX;
    + kvm_tsc_scaling_ratio_frac_bits = 32;
    + kvm_tsc_scaling_ratio_rsvd = TSC_RATIO_RSVD;
    }
    + kvm_default_tsc_scaling_ratio = TSC_RATIO_DEFAULT;

    if (nested) {
    printk(KERN_INFO "kvm: Nested Virtualization enabled\n");
    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 991466b..f888225 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -106,6 +106,14 @@ bool kvm_has_tsc_control;
    EXPORT_SYMBOL_GPL(kvm_has_tsc_control);
    u32 kvm_max_guest_tsc_khz;
    EXPORT_SYMBOL_GPL(kvm_max_guest_tsc_khz);
    +u8 kvm_tsc_scaling_ratio_frac_bits;
    +EXPORT_SYMBOL_GPL(kvm_tsc_scaling_ratio_frac_bits);
    +u64 kvm_tsc_scaling_ratio_rsvd;
    +EXPORT_SYMBOL_GPL(kvm_tsc_scaling_ratio_rsvd);
    +u64 kvm_default_tsc_scaling_ratio;
    +EXPORT_SYMBOL_GPL(kvm_default_tsc_scaling_ratio);
    +u64 kvm_max_tsc_scaling_ratio;
    +EXPORT_SYMBOL_GPL(kvm_max_tsc_scaling_ratio);

    /* tsc tolerance in parts per million - default to 1/2 of the NTP threshold */
    static u32 tsc_tolerance_ppm = 250;
    --
    2.4.8


    \
     
     \ /
      Last update: 2015-09-28 08:01    [W:4.122 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site