[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 06/10] x86/hvm: Setup TSC scaling ratio
On 02/05/16 21:54, Jan Beulich wrote: > >>> On 17.01.16 at 22:58, <haozhong.zhang@xxxxxxxxx> wrote: > > +u64 hvm_get_tsc_scaling_ratio(u32 gtsc_khz) > > +{ > > + u64 ratio; > > + > > + if ( !hvm_tsc_scaling_supported ) > > + return 0; > > + > > + /* > > + * The multiplication of the first two terms may overflow a 64-bit > > + * integer, so use mul_u64_u32_div() instead to keep precision. > > + */ > > + ratio = mul_u64_u32_div(1ULL << hvm_funcs.tsc_scaling_ratio_frac_bits, > > + gtsc_khz, cpu_khz); > > Is this the only use for this new math64 function? If so, I don't > see the point of adding that function, because (leaving limited > significant bits aside) the above simply is > > (gtsc_khz << hvm_funcs.tsc_scaling_ratio_frac_bits) / cpu_khz > > which can be had without any multiplication. Personally, if indeed > the only use I'd favor converting the above to inline assembly > here instead of adding that helper function (just like we have a > number of asm()-s in x86/time.c for similar reasons). > OK, I'll rewrite it as asm(). mul_u64_u32_div() will not be used any more and will be removed. I'll also inline another math64 function mul_u64_u64_shr() in its single caller hvm_scale_tsc(). Then the math64 patch will be dropped in the next version. > > +void hvm_setup_tsc_scaling(struct vcpu *v) > > +{ > > + v->arch.hvm_vcpu.tsc_scaling_ratio = > > + hvm_get_tsc_scaling_ratio(v->domain->arch.tsc_khz); > > +} > > So why again is this per-vCPU setup of per-vCPU state when it > only depends on a per-domain input? If this was per-domain, its > setup could be where it belongs - in arch_hvm_load(). > It's a per-domain state. I'll the state to x86's struct arch_domain where other TSC fields are (or struct hvm_domain, because this is only used for HVM?). Then it will be setup in tsc_set_info() after guest tsc frequency is determined. > > @@ -5504,6 +5536,9 @@ void hvm_vcpu_reset_state(struct vcpu *v, uint16_t > > cs, uint16_t ip) > > hvm_set_segment_register(v, x86_seg_gdtr, ®); > > hvm_set_segment_register(v, x86_seg_idtr, ®); > > > > + if ( hvm_tsc_scaling_supported && !d->arch.vtsc ) > > + hvm_setup_tsc_scaling(v); > > Could you remind me why this is needed? What state of the guest > would have changed making this necessary? Is this perhaps just > because it's per-vCPU instead of per-domain? > > Jan > Yes, just because I mistakenly made it per-vcpu. So it will be not necessary in this patch after tsc_scaling_ratio become per-domain. Haozhong _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |