Message ID | 20210804085819.846610-12-oupton@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: Add idempotent controls for migrating system counter state | expand |
On Wed, Aug 04, 2021 at 08:58:09AM +0000, Oliver Upton wrote: > Make the implementation of update_vtimer_cntvoff() generic w.r.t. guest > timer context and spin off into a new helper method for later use. > Require callers of this new helper method to grab the kvm lock > beforehand. > > No functional change intended. > > Signed-off-by: Oliver Upton <oupton@google.com> > --- > arch/arm64/kvm/arch_timer.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kvm/arch_timer.c b/arch/arm64/kvm/arch_timer.c > index 3df67c127489..c0101db75ad4 100644 > --- a/arch/arm64/kvm/arch_timer.c > +++ b/arch/arm64/kvm/arch_timer.c > @@ -747,22 +747,32 @@ int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu) > return 0; > } > > -/* Make the updates of cntvoff for all vtimer contexts atomic */ > -static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff) > +/* Make offset updates for all timer contexts atomic */ > +static void update_timer_offset(struct kvm_vcpu *vcpu, > + enum kvm_arch_timers timer, u64 offset) > { > int i; > struct kvm *kvm = vcpu->kvm; > struct kvm_vcpu *tmp; > > - mutex_lock(&kvm->lock); > + lockdep_assert_held(&kvm->lock); > + > kvm_for_each_vcpu(i, tmp, kvm) > - timer_set_offset(vcpu_vtimer(tmp), cntvoff); > + timer_set_offset(vcpu_get_timer(tmp, timer), offset); > > /* > * When called from the vcpu create path, the CPU being created is not > * included in the loop above, so we just set it here as well. > */ > - timer_set_offset(vcpu_vtimer(vcpu), cntvoff); > + timer_set_offset(vcpu_get_timer(vcpu, timer), offset); > +} > + > +static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff) > +{ > + struct kvm *kvm = vcpu->kvm; > + > + mutex_lock(&kvm->lock); > + update_timer_offset(vcpu, TIMER_VTIMER, cntvoff); > mutex_unlock(&kvm->lock); > } > > -- > 2.32.0.605.g8dce9f2422-goog > Reviewed-by: Andrew Jones <drjones@redhat.com>
diff --git a/arch/arm64/kvm/arch_timer.c b/arch/arm64/kvm/arch_timer.c index 3df67c127489..c0101db75ad4 100644 --- a/arch/arm64/kvm/arch_timer.c +++ b/arch/arm64/kvm/arch_timer.c @@ -747,22 +747,32 @@ int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu) return 0; } -/* Make the updates of cntvoff for all vtimer contexts atomic */ -static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff) +/* Make offset updates for all timer contexts atomic */ +static void update_timer_offset(struct kvm_vcpu *vcpu, + enum kvm_arch_timers timer, u64 offset) { int i; struct kvm *kvm = vcpu->kvm; struct kvm_vcpu *tmp; - mutex_lock(&kvm->lock); + lockdep_assert_held(&kvm->lock); + kvm_for_each_vcpu(i, tmp, kvm) - timer_set_offset(vcpu_vtimer(tmp), cntvoff); + timer_set_offset(vcpu_get_timer(tmp, timer), offset); /* * When called from the vcpu create path, the CPU being created is not * included in the loop above, so we just set it here as well. */ - timer_set_offset(vcpu_vtimer(vcpu), cntvoff); + timer_set_offset(vcpu_get_timer(vcpu, timer), offset); +} + +static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff) +{ + struct kvm *kvm = vcpu->kvm; + + mutex_lock(&kvm->lock); + update_timer_offset(vcpu, TIMER_VTIMER, cntvoff); mutex_unlock(&kvm->lock); }
Make the implementation of update_vtimer_cntvoff() generic w.r.t. guest timer context and spin off into a new helper method for later use. Require callers of this new helper method to grab the kvm lock beforehand. No functional change intended. Signed-off-by: Oliver Upton <oupton@google.com> --- arch/arm64/kvm/arch_timer.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)