All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Smetanin <asmetanin@virtuozzo.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Denis V. Lunev" <den@openvz.org>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [PATCH 9/9] qemu/kvm: kvm hyper-v based guest crash event handling
Date: Thu, 02 Jul 2015 16:19:40 +0300	[thread overview]
Message-ID: <1435843180.21037.13.camel@virtuozzo.com> (raw)
In-Reply-To: <5594023F.70104@redhat.com>

On Wed, 2015-07-01 at 17:07 +0200, Paolo Bonzini wrote:
> 
> On 30/06/2015 13:33, Denis V. Lunev wrote:
> > 
> > +static int kvm_arch_handle_hv_crash(CPUState *cs)
> > +{
> > +    X86CPU *cpu = X86_CPU(cs);
> > +    CPUX86State *env = &cpu->env;
> > +
> > +    /* Mark that Hyper-v guest crash occurred */
> > +    env->hv_crash_occurred = 1;
> 
> This need not be a hv crash.  You can add crash_occurred to CPUState
> directly, and set it in qemu_system_guest_panicked:
> 
> 	if (current_cpu) {
> 	    current_cpu->crash_occurred = true;
>         }
> 
> Then you would add two subsections: one for crash_occurred in exec.c
> (attached to vmstate_cpu_common), one for hyperv crash params in
> target-i386/machine.c.
> 
> This also gives an idea about splitting the patch: first the
> introduction of qemu_system_guest_panicked and crash_occurred, second
> the Hyper-V specific bits.
> 
> > +        if (cpu->hyperv_crash) {
> > +            c->edx |= HV_X64_GUEST_CRASH_MSR_AVAILABLE;
> > +            has_msr_hv_crash = true;
> 
> You can only set this to true if the kernel also supports the MSRs.
> 
> > +        }
> > +
> >          c = &cpuid_data.entries[cpuid_i++];
> >          c->function = HYPERV_CPUID_ENLIGHTMENT_INFO;
> >          if (cpu->hyperv_relaxed_timing) {
> > @@ -761,6 +767,10 @@ void kvm_arch_reset_vcpu(X86CPU *cpu)
> >      } else {
> >          env->mp_state = KVM_MP_STATE_RUNNABLE;
> >      }
> > +    if (has_msr_hv_crash) {
> > +            env->msr_hv_crash_ctl = HV_X64_MSR_CRASH_CTL_NOTIFY;
> 
> The value is always host-defined, so I think it doesn't need a field in
> CPUX86State.  On the other hand, this:
Kernel just works with that value, kernel doesn't setup it. 
The user space is allowed to setup this msr if qemu option "hv-crash" is
on. So the code "env->msr_hv_crash_ctl = HV_X64_MSR_CRASH_CTL_NOTIFY;"
setups msr in user space at cpu reset. When cpu setup it's registers
these msr's values are uploaded into kernel.

Anyway we need a code that initially set up crash ctl msr with value
HV_X64_MSR_CRASH_CTL_NOTIFY. And I think that code should be user space.
Any objections ?
> 
> 
> +static bool hyperv_crash_enable_needed(void *opaque)
> +{
> +    X86CPU *cpu = opaque;
> +    CPUX86State *env = &cpu->env;
> +
> +    return (env->msr_hv_crash_ctl & HV_X64_MSR_CRASH_CTL_CONTENTS) ?
> +            true : false;
> +}
> +
> 
> can just check if any of the params fields is nonzero.
> 
If we setup crash ctl msr by user space, we need it to migrate.

> Thanks,
> 
> Paolo
> 
> > +            env->hv_crash_occurred = 0;
> > +    }



WARNING: multiple messages have this Message-ID (diff)
From: Andrey Smetanin <asmetanin@virtuozzo.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Denis V. Lunev" <den@openvz.org>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 9/9] qemu/kvm: kvm hyper-v based guest crash event handling
Date: Thu, 02 Jul 2015 16:19:40 +0300	[thread overview]
Message-ID: <1435843180.21037.13.camel@virtuozzo.com> (raw)
In-Reply-To: <5594023F.70104@redhat.com>

On Wed, 2015-07-01 at 17:07 +0200, Paolo Bonzini wrote:
> 
> On 30/06/2015 13:33, Denis V. Lunev wrote:
> > 
> > +static int kvm_arch_handle_hv_crash(CPUState *cs)
> > +{
> > +    X86CPU *cpu = X86_CPU(cs);
> > +    CPUX86State *env = &cpu->env;
> > +
> > +    /* Mark that Hyper-v guest crash occurred */
> > +    env->hv_crash_occurred = 1;
> 
> This need not be a hv crash.  You can add crash_occurred to CPUState
> directly, and set it in qemu_system_guest_panicked:
> 
> 	if (current_cpu) {
> 	    current_cpu->crash_occurred = true;
>         }
> 
> Then you would add two subsections: one for crash_occurred in exec.c
> (attached to vmstate_cpu_common), one for hyperv crash params in
> target-i386/machine.c.
> 
> This also gives an idea about splitting the patch: first the
> introduction of qemu_system_guest_panicked and crash_occurred, second
> the Hyper-V specific bits.
> 
> > +        if (cpu->hyperv_crash) {
> > +            c->edx |= HV_X64_GUEST_CRASH_MSR_AVAILABLE;
> > +            has_msr_hv_crash = true;
> 
> You can only set this to true if the kernel also supports the MSRs.
> 
> > +        }
> > +
> >          c = &cpuid_data.entries[cpuid_i++];
> >          c->function = HYPERV_CPUID_ENLIGHTMENT_INFO;
> >          if (cpu->hyperv_relaxed_timing) {
> > @@ -761,6 +767,10 @@ void kvm_arch_reset_vcpu(X86CPU *cpu)
> >      } else {
> >          env->mp_state = KVM_MP_STATE_RUNNABLE;
> >      }
> > +    if (has_msr_hv_crash) {
> > +            env->msr_hv_crash_ctl = HV_X64_MSR_CRASH_CTL_NOTIFY;
> 
> The value is always host-defined, so I think it doesn't need a field in
> CPUX86State.  On the other hand, this:
Kernel just works with that value, kernel doesn't setup it. 
The user space is allowed to setup this msr if qemu option "hv-crash" is
on. So the code "env->msr_hv_crash_ctl = HV_X64_MSR_CRASH_CTL_NOTIFY;"
setups msr in user space at cpu reset. When cpu setup it's registers
these msr's values are uploaded into kernel.

Anyway we need a code that initially set up crash ctl msr with value
HV_X64_MSR_CRASH_CTL_NOTIFY. And I think that code should be user space.
Any objections ?
> 
> 
> +static bool hyperv_crash_enable_needed(void *opaque)
> +{
> +    X86CPU *cpu = opaque;
> +    CPUX86State *env = &cpu->env;
> +
> +    return (env->msr_hv_crash_ctl & HV_X64_MSR_CRASH_CTL_CONTENTS) ?
> +            true : false;
> +}
> +
> 
> can just check if any of the params fields is nonzero.
> 
If we setup crash ctl msr by user space, we need it to migrate.

> Thanks,
> 
> Paolo
> 
> > +            env->hv_crash_occurred = 0;
> > +    }

  reply	other threads:[~2015-07-02 13:20 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-30 11:33 [PATCH v3 0/9] HyperV equivalent of pvpanic driver Denis V. Lunev
2015-06-30 11:33 ` [Qemu-devel] " Denis V. Lunev
2015-06-30 11:33 ` [PATCH 1/9] kvm/x86: move Hyper-V MSR's/hypercall code into hyperv.c file Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:11   ` Peter Hornyack
2015-07-01  0:11     ` [Qemu-devel] " Peter Hornyack
2015-06-30 11:33 ` [PATCH 2/9] kvm: introduce vcpu_debug = kvm_debug + vcpu context Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:12   ` Peter Hornyack
2015-07-01  0:12     ` [Qemu-devel] " Peter Hornyack
2015-06-30 11:33 ` [PATCH 3/9] kvm: add hyper-v crash msrs values Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:14   ` Peter Hornyack
2015-07-01  0:14     ` [Qemu-devel] " Peter Hornyack
2015-07-01 15:00   ` Paolo Bonzini
2015-07-01 15:00     ` [Qemu-devel] " Paolo Bonzini
2015-07-01 15:53     ` Denis V. Lunev
2015-07-01 15:53       ` [Qemu-devel] " Denis V. Lunev
2015-07-01 16:06       ` Peter Hornyack
2015-07-01 16:06         ` [Qemu-devel] " Peter Hornyack
2015-07-01 16:48         ` Paolo Bonzini
2015-07-01 16:48           ` [Qemu-devel] " Paolo Bonzini
2015-06-30 11:33 ` [PATCH 4/9] kvm/x86: added hyper-v crash msrs into kvm hyperv context Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:14   ` Peter Hornyack
2015-07-01  0:14     ` [Qemu-devel] " Peter Hornyack
2015-06-30 11:33 ` [PATCH 5/9] kvm: added KVM_REQ_HV_CRASH value to notify qemu about hyper-v crash Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:14   ` Peter Hornyack
2015-07-01  0:14     ` [Qemu-devel] " Peter Hornyack
2015-06-30 11:33 ` [PATCH 6/9] kvm/x86: mark hyper-v crash msrs as partition wide Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:15   ` Peter Hornyack
2015-07-01  0:15     ` [Qemu-devel] " Peter Hornyack
2015-06-30 11:33 ` [PATCH 7/9] kvm/x86: added hyper-v crash data and ctl msr's get/set'ers Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:15   ` Peter Hornyack
2015-07-01  0:15     ` [Qemu-devel] " Peter Hornyack
2015-07-01 16:47   ` Paolo Bonzini
2015-07-01 16:47     ` [Qemu-devel] " Paolo Bonzini
2015-06-30 11:33 ` [PATCH 8/9] kvm/x86: add sending hyper-v crash notification to user space Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01  0:16   ` Peter Hornyack
2015-07-01  0:16     ` [Qemu-devel] " Peter Hornyack
2015-07-01 15:12   ` Paolo Bonzini
2015-07-01 15:12     ` [Qemu-devel] " Paolo Bonzini
2015-06-30 11:33 ` [PATCH 9/9] qemu/kvm: kvm hyper-v based guest crash event handling Denis V. Lunev
2015-06-30 11:33   ` [Qemu-devel] " Denis V. Lunev
2015-07-01 15:07   ` Paolo Bonzini
2015-07-01 15:07     ` [Qemu-devel] " Paolo Bonzini
2015-07-02 13:19     ` Andrey Smetanin [this message]
2015-07-02 13:19       ` Andrey Smetanin
2015-07-02 13:30       ` Paolo Bonzini
2015-07-02 13:30         ` [Qemu-devel] " Paolo Bonzini
2015-06-30 12:26 ` [Qemu-devel] [PATCH v3 0/9] HyperV equivalent of pvpanic driver Daniel P. Berrange
2015-06-30 12:26   ` Daniel P. Berrange
2015-06-30 12:38   ` Denis V. Lunev
2015-06-30 12:38     ` Denis V. Lunev
2015-07-01 14:09 ` Paolo Bonzini
2015-07-01 14:09   ` [Qemu-devel] " Paolo Bonzini
2015-07-01 15:55   ` Denis V. Lunev
2015-07-01 15:55     ` [Qemu-devel] " Denis V. Lunev

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=1435843180.21037.13.camel@virtuozzo.com \
    --to=asmetanin@virtuozzo.com \
    --cc=afaerber@suse.de \
    --cc=den@openvz.org \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.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.