lkml.org 
[lkml]   [2012]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/4 V10] Add ioctl for KVMCLOCK_GUEST_STOPPED
    On 2012-01-30 16:07, Avi Kivity wrote:
    > On 01/17/2012 08:40 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.
    >>
    >>
    >> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
    >> index e1d94bf..1931e5c 100644
    >> --- a/Documentation/virtual/kvm/api.txt
    >> +++ b/Documentation/virtual/kvm/api.txt
    >> @@ -1491,6 +1491,19 @@ following algorithm:
    >> Some guests configure the LINT1 NMI input to cause a panic, aiding in
    >> debugging.
    >>
    >> +4.65 KVMCLOCK_GUEST_PAUSED
    >> +
    >> +Capability: KVM_CAP_GUEST_PAUSED
    >> +Architechtures: Any that implement pvclocks (currently x86 only)
    >> +Type: vcpu ioctl
    >
    > vm ioctl.
    >
    >> +Parameters: None
    >> +Returns: 0 on success, -1 on error
    >> +
    >> +This signals to the host kernel that the specified guest is being paused by
    >> +userspace. The host will set a flag in the pvclock structure that is checked
    >> +from the soft lockup watchdog. This ioctl can be called during pause or
    >> +unpause.
    >> +
    >> 5. The kvm_run structure
    >>
    >>
    >> +/*
    >> + * 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.
    >> + */
    >> +static int kvm_set_guest_paused(struct kvm *kvm)
    >> +{
    >> + struct kvm_vcpu *vcpu;
    >> + struct pvclock_vcpu_time_info *src;
    >> + int i;
    >> +
    >> + kvm_for_each_vcpu(i, vcpu, kvm) {
    >> + if (!vcpu->arch.time_page)
    >> + continue;
    >> + src = &vcpu->arch.hv_clock;
    >> + src->flags |= PVCLOCK_GUEST_STOPPED;
    >
    > This looks racy. The vcpu can remove its kvmclock concurrently with
    > this access, and src will be NULL.

    There is no race here (src is member of the vcpu), but arch.time might
    have become invalid. KVM_REQ_CLOCK_UPDATE instead of mark_page_dirty
    would indeed be the way to go. Trivial solution, I would say.

    However, the concept of "guest stopped" has VM, not VCPU scope. That
    makes the call more appropriate as a VM ioctl. If that thing should
    really become per-vcpu, at least call it KVMCLOCK_VCPU_STOPPED.

    Jan

    --
    Siemens AG, Corporate Technology, CT T DE IT 1
    Corporate Competence Center Embedded Linux


    \
     
     \ /
      Last update: 2012-01-30 17:21    [W:3.877 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site