On Mon, Sep 28, 2015 at 08:28:57PM -0700, Eric Northup wrote: > On Sun, Sep 27, 2015 at 10:38 PM, Haozhong Zhang > <haozhong.zhang@xxxxxxxxx> wrote: > > > > 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@xxxxxxxxx> > > --- > > 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; > > Do we need all 3 of kvm_max_guest_tsc_khz, kvm_max_tsc_scaling_ratio, > and kvm_tsc_scaling_ratio_rsvd (since only SVM has reserved bits - and > just for complaining if the high bits are set, which can already be > expressed by max_tsc_scaling ratio) > > kvm_max_tsc_scaling_ratio seems to be write-only. > You are right. I'll remove kvm_tsc_scaling_ratio_rsvd and just use kvm_max_tsc_scaling_ratio to verify TSC scaling ratio in set_tsc_khz(). > > > > 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 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe kvm" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html