Prev: max730x: make pullups configurable via platformdata
Next: [PATCH 1/2] Driver core: use kmemdup in platform_device_add_resources
From: Avi Kivity on 15 Jun 2010 04:30 On 06/15/2010 10:34 AM, Zachary Amsden wrote: > If there are active VCPUs which are marked as belonging to > a particular hardware CPU, request a clock sync for them when > enabling hardware; the TSC could be desynchronized on a newly > arriving CPU, and we need to recompute guests system time > relative to boot after a suspend event. > > This covers both cases. > > Note that it is acceptable to take the spinlock, as either > no other tasks will be running and no locks held (BSP after > resume), or other tasks will be guaranteed to drop the lock > relatively quickly (AP on CPU_STARTING). > > Noting we now get clock synchronization requests for VCPUs > which are starting up (or restarting), it is tempting to > attempt to remove the arch/x86/kvm/x86.c CPU hot-notifiers > at this time, however it is not correct to do so; they are > required for systems with non-constant TSC as the frequency > may not be known immediately after the processor has started > until the cpufreq driver has had a chance to run and query > the chipset. > > Updated: implement better locking semantics for hardware_enable > > Removed the hack of dropping and retaking the lock by adding the > semantic that we always hold kvm_lock when hardware_enable is > called. The one place that doesn't need to worry about it is > resume, as resuming a frozen CPU, the spinlock won't be taken. > > Signed-off-by: Zachary Amsden<zamsden(a)redhat.com> > --- > arch/x86/kvm/x86.c | 8 ++++++++ > virt/kvm/kvm_main.c | 6 +++++- > 2 files changed, 13 insertions(+), 1 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 4b15d03..05c559d 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -5442,7 +5442,15 @@ int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu) > > int kvm_arch_hardware_enable(void *garbage) > { > + struct kvm *kvm; > + struct kvm_vcpu *vcpu; > + int i; > + > kvm_shared_msr_cpu_online(); > + list_for_each_entry(kvm,&vm_list, vm_list) > + kvm_for_each_vcpu(i, vcpu, kvm) > + if (vcpu->cpu == smp_processor_id()) > + kvm_request_guest_time_update(vcpu); > return kvm_x86_ops->hardware_enable(garbage); > } > > An alternative to this loop (and a similar one in the cpu frequency notifier earlier) is to have a per-cpu cpu_freq_generation_counter, which is checked on every entry against a snapshot of the counter in the vcpu. This would replace the loop with an O(1) mechanism, at the cost of another compare. I don't think it's worthwhile at this point though, just something to keep in mind. -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Rik van Riel on 14 Jul 2010 22:40
On 07/12/2010 10:25 PM, Zachary Amsden wrote: > If there are active VCPUs which are marked as belonging to > a particular hardware CPU, request a clock sync for them when > enabling hardware; the TSC could be desynchronized on a newly > arriving CPU, and we need to recompute guests system time > relative to boot after a suspend event. > > This covers both cases. > > Note that it is acceptable to take the spinlock, as either > no other tasks will be running and no locks held (BSP after > resume), or other tasks will be guaranteed to drop the lock > relatively quickly (AP on CPU_STARTING). Acked-by: Rik van Riel <riel(a)redhat.com> -- All rights reversed -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |