Wanpeng Li <kernellwp@xxxxxxxxx> writes: > From: Wanpeng Li <wanpengli@xxxxxxxxxxx> > > In the progress of vCPUs creation, it queues a kvmclock sync worker to the global > workqueue before each vCPU creation completes. The workqueue subsystem guarantees > not to queue the already queued work, however, we can make the logic more clear by > make just one leader to trigger this kvmclock sync request and save on cacheline > boucing due to test_and_set_bit. > > Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> > --- > v2 -> v3: > * update patch description > v1 -> v2: > * check vcpu->vcpu_idx > > arch/x86/kvm/x86.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index fb5d64e..79bc995 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -9390,8 +9390,9 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) > if (!kvmclock_periodic_sync) > return; > > - schedule_delayed_work(&kvm->arch.kvmclock_sync_work, > - KVMCLOCK_SYNC_PERIOD); > + if (vcpu->vcpu_idx == 0) > + schedule_delayed_work(&kvm->arch.kvmclock_sync_work, > + KVMCLOCK_SYNC_PERIOD); I would've merged this new check with !kvmclock_periodic_sync above making it more obvious when the work is scheduled diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 5de200663f51..93550976f991 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -9389,11 +9389,9 @@ void kvm_arch_vcpu_postcreate(struct kvm_vcpu *vcpu) mutex_unlock(&vcpu->mutex); - if (!kvmclock_periodic_sync) - return; - - schedule_delayed_work(&kvm->arch.kvmclock_sync_work, - KVMCLOCK_SYNC_PERIOD); + if (vcpu->vcpu_idx == 0 && kvmclock_periodic_sync) + schedule_delayed_work(&kvm->arch.kvmclock_sync_work, + KVMCLOCK_SYNC_PERIOD); } > } > > void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu) With or without the change mentioned above, Reviewed-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> -- Vitaly