From: Anthony Liguori <aliguori@us.ibm.com>
To: Eric B Munson <emunson@mgebm.net>
Cc: avi@redhat.com, mingo@redhat.com, x86@kernel.org, hpa@zytor.com,
arnd@arndb.de, linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
linux-arch@vger.kernel.org, ryanh@linux.vnet.ibm.com
Subject: Re: [PATCH 6/6 V2] Add age out of guest paused flag
Date: Tue, 01 Nov 2011 14:34:27 -0500 [thread overview]
Message-ID: <4EB049C3.7080206@us.ibm.com> (raw)
In-Reply-To: <1320091650-24682-7-git-send-email-emunson@mgebm.net>
On 10/31/2011 03:07 PM, Eric B Munson wrote:
> The KVM_GUEST_PAUSED flag will prevent a guest from compaining about a soft
> lockup but it can mask real soft lockups if the flag isn't cleared when it is
> no longer relevant. This patch adds a kvm ioctl that the hypervisor will use
> when it resumes a guest to start a timer for aging out the flag. The time out
> will be specified by the hypervisor in the ioctl call.
>
> Signed-off-by: Eric B Munson<emunson@mgebm.net>
Why not have the guest clear the flag when it acknowledges it?
The hypervisor would unconditionally set the bit, and the guest would do a
testandclear to check if the bit is set. I think that avoids the whole aging
business.
Regards,
Anthony Liguori
> ---
> Cahnges from V1:
> Add host functions for flag management to arch/x86/kvm/x86.c instead of
> kvmclock.c
>
> arch/x86/include/asm/pvclock.h | 2 ++
> arch/x86/kvm/x86.c | 32 ++++++++++++++++++++++++++++++++
> include/linux/kvm.h | 2 ++
> include/linux/kvm_host.h | 2 ++
> 4 files changed, 38 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
> index 9312814..e8460b9 100644
> --- a/arch/x86/include/asm/pvclock.h
> +++ b/arch/x86/include/asm/pvclock.h
> @@ -18,6 +18,8 @@ void kvm_set_host_stopped(struct kvm_vcpu *vcpu);
>
> bool kvm_check_and_clear_host_stopped(int cpu);
>
> +void kvm_clear_guest_paused(struct kvm_vcpu *vcpu, unsigned int length);
> +
> /*
> * Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
> * yielding a 64-bit result.
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 592ac3b..fb0132a 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -46,6 +46,7 @@
> #include<linux/hash.h>
> #include<linux/pci.h>
> #include<trace/events/kvm.h>
> +#include<linux/timer.h>
>
> #define CREATE_TRACE_POINTS
> #include "trace.h"
> @@ -3300,6 +3301,15 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
> kvm_set_host_stopped(vcpu);
> break;
> }
> + case KVM_CLEAR_GUEST_PAUSED: {
> + unsigned int length;
> + r = -EFAULT;
> + if (copy_from_user(&length, argp, sizeof length))
> + goto out;
> + r = 0;
> + kvm_clear_guest_paused(vcpu, length);
> + break;
> + }
> default:
> r = -EINVAL;
> }
> @@ -6133,6 +6143,28 @@ void kvm_set_host_stopped(struct kvm_vcpu *vcpu)
> }
> EXPORT_SYMBOL_GPL(kvm_set_host_stopped);
>
> +static void kvm_timer_clear_guest_paused(unsigned long vcpu_addr)
> +{
> + struct kvm_vcpu *vcpu = (struct kvm_vcpu *)vcpu_addr;
> + struct pvclock_vcpu_time_info *src =&vcpu->arch.hv_clock;
> + src->flags = src->flags& (~PVCLOCK_GUEST_STOPPED);
> +}
> +
> +/*
> + * Host has resumed the guest, we need to clear the guest paused flag so we
> + * don't mask any real soft lockups.
> + */
> +void kvm_clear_guest_paused(struct kvm_vcpu *vcpu, unsigned int length)
> +{
> + if (!timer_pending(&vcpu->flag_timer))
> + setup_timer(&vcpu->flag_timer,
> + kvm_timer_clear_guest_paused,
> + (unsigned long)vcpu);
> + mod_timer(&vcpu->flag_timer,
> + jiffies + (length * HZ));
> +}
> +EXPORT_SYMBOL_GPL(kvm_clear_guest_paused);
> +
> int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
> struct kvm_sregs *sregs)
> {
> diff --git a/include/linux/kvm.h b/include/linux/kvm.h
> index 87cab0d..bd9724c 100644
> --- a/include/linux/kvm.h
> +++ b/include/linux/kvm.h
> @@ -765,6 +765,8 @@ struct kvm_clock_data {
> #define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma)
> /* VM is being stopped by host */
> #define KVM_GUEST_PAUSED _IO(KVMIO, 0xaa)
> +/* Start the timer to clear the paused flag */
> +#define KVM_CLEAR_GUEST_PAUSED _IO(KVMIO, 0xab)
>
> #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1<< 0)
>
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index d526231..043af4d 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -19,6 +19,7 @@
> #include<linux/slab.h>
> #include<linux/rcupdate.h>
> #include<linux/ratelimit.h>
> +#include<linux/timer.h>
> #include<asm/signal.h>
>
> #include<linux/kvm.h>
> @@ -154,6 +155,7 @@ struct kvm_vcpu {
> #endif
>
> struct kvm_vcpu_arch arch;
> + struct timer_list flag_timer;
> };
>
> static inline int kvm_vcpu_exiting_guest_mode(struct kvm_vcpu *vcpu)
next prev parent reply other threads:[~2011-11-01 19:40 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-31 20:07 [PATCH 0/6 V2] Avoid soft lockup message when KVM is stopped by host Eric B Munson
2011-10-31 20:07 ` [PATCH 1/6 V2] Add flag to indicate that a vm was stopped by the host Eric B Munson
2011-11-01 19:22 ` Anthony Liguori
2011-10-31 20:07 ` [PATCH 2/6 V2] Add functions to check if the host has stopped the vm Eric B Munson
2011-11-01 19:28 ` Anthony Liguori
2011-11-01 20:07 ` Eric B Munson
2011-10-31 20:07 ` [PATCH 3/6 V2] Add ioctl for KVM_GUEST_STOPPED Eric B Munson
2011-11-01 19:32 ` Anthony Liguori
2011-11-01 20:11 ` Eric B Munson
2011-10-31 20:07 ` [PATCH 4/6 V2] Add generic stubs for kvm stop check functions Eric B Munson
2011-10-31 20:07 ` [PATCH 5/6 V2] Add check for suspended vm in softlockup detector Eric B Munson
2011-10-31 20:07 ` [PATCH 6/6 V2] Add age out of guest paused flag Eric B Munson
2011-11-01 19:34 ` Anthony Liguori [this message]
2011-11-01 19:51 ` Eric B Munson
2011-11-01 19:58 ` Anthony Liguori
2011-11-01 20:10 ` Eric B Munson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EB049C3.7080206@us.ibm.com \
--to=aliguori@us.ibm.com \
--cc=arnd@arndb.de \
--cc=avi@redhat.com \
--cc=emunson@mgebm.net \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=ryanh@linux.vnet.ibm.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.