On Tuesday 22 January 2008 21:54:10 Avi Kivity wrote:
> Yang, Sheng wrote:
> > +
> > +/* Compute with 96 bit intermediate result: (a*b)/c */
> > +static u64 muldiv64(u64 a, u32 b, u32 c)
>
> Why do we need such high accuracy for the pit?

The direct reason is we using TSC as the reference of pit count_load_time. I 
think the only alternative is using host ACPI PM timer. But it will wrapped 
soon...

>
> > +
> > +static int pit_get_out(struct kvm *kvm, int channel)
> > +{
> > +   struct PITChannelState *c =
> > +           &kvm->arch.vpit->pit_state.channels[channel];
> > +   struct kvm_vcpu *vcpu = kvm->vcpus[0];
> > +   u64 d, t;
> > +   int out;
> > +
> > +   ASSERT(mutex_is_locked(&kvm->arch.vpit->pit_state.lock));
> > +
> > +   kvm_get_msr(vcpu, MSR_IA32_TIME_STAMP_COUNTER, &t);
> > +   d = muldiv64(t - c->count_load_time, PIT_FREQ, cpu_khz * 1000);
>
> I assume this is to correlate the tsc and the pit counters.  Doesn't
> this break with cpu frequency scaling or with vcpu migrations?

I think the cpu frequency scaling will affect TSC, though cpu_khz would be 
changed along with it. 

>
> What if this is called within the context of vcpu 1?  Not sure
> kvm_get_msr() will work correctly at all.

I don't think so. kvm_get_msr() with TSC only read guest tsc, which is 
indentity for the domain, not specific for vcpu. And I indicated vcpu0 as 
vcpu(though won't be refered). But I may do it more clear in the future.

>
> > +struct PITTimer {
> >
> > +
> > +struct PITChannelState {
> > +
> > +struct PITState {
>
> Please use the traditional naming convention (pit_timer,
> pit_channel_state, pit_state)

Sure.

-- 
Thanks
Yang, Sheng

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to