On 12/15/2011 09:42 PM, Eric B Munson wrote: > Now that we have a flag that will tell the guest it was suspended, create an > interface for that communication using a KVM ioctl. > > > +int kvm_set_guest_paused(struct kvm_vcpu *vcpu); Please avoid the needless forward declaration. > + > extern bool tdp_enabled; > > u64 vcpu_tsc_khz(struct kvm_vcpu *vcpu); > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index c38efd7..1dab5fd 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -3295,6 +3295,10 @@ long kvm_arch_vcpu_ioctl(struct file *filp, > > goto out; > } > + case KVMCLOCK_GUEST_PAUSED: { > + r = kvm_set_guest_paused(vcpu); > + break; > + } > default: > r = -EINVAL; > } > @@ -6117,6 +6121,22 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason, > } > EXPORT_SYMBOL_GPL(kvm_task_switch); > > +/* > + * kvm_set_guest_paused() indicates to the guest kernel that it has been > + * stopped by the hypervisor. This function will be called from the host only. > + * EINVAL is returned when the host attempts to set the flag for a guest that > + * does not support pv clocks. > + */ > +int kvm_set_guest_paused(struct kvm_vcpu *vcpu) > +{ > + struct pvclock_vcpu_time_info *src = &vcpu->arch.hv_clock; > + if (!vcpu->arch.time_page) > + return -EINVAL; > + src->flags |= PVCLOCK_GUEST_STOPPED; > + return 0; > +} > +EXPORT_SYMBOL_GPL(kvm_set_guest_paused); > + > You're writing to a page without mark_page_dirty(), this breaks live migration. -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html