From: Jan Kiszka <jan.kiszka@siemens.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>, kvm <kvm@vger.kernel.org>
Subject: Re: qemu-kvm: enable get/set vcpu events on reset and migration
Date: Wed, 27 Jan 2010 09:36:23 +0100 [thread overview]
Message-ID: <4B5FFB07.9030601@siemens.com> (raw)
In-Reply-To: <20100127002622.GB8811@amt.cnet>
Marcelo Tosatti wrote:
> qemu-kvm should reset and save/restore vcpu events.
>
> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
>
> diff --git a/kvm.h b/kvm.h
> index e2a945b..9fa4e25 100644
> --- a/kvm.h
> +++ b/kvm.h
> @@ -52,6 +52,9 @@ int kvm_set_migration_log(int enable);
> int kvm_has_sync_mmu(void);
> #endif /* KVM_UPSTREAM */
> int kvm_has_vcpu_events(void);
> +int kvm_put_vcpu_events(CPUState *env);
> +int kvm_get_vcpu_events(CPUState *env);
> +
> #ifdef KVM_UPSTREAM
>
> void kvm_setup_guest_memory(void *start, size_t size);
> @@ -96,7 +99,9 @@ int kvm_arch_init(KVMState *s, int smp_cpus);
>
> int kvm_arch_init_vcpu(CPUState *env);
>
> +#endif
> void kvm_arch_reset_vcpu(CPUState *env);
> +#ifdef KVM_UPSTREAM
>
> struct kvm_guest_debug;
> struct kvm_debug_exit_arch;
> diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
> index 82e362c..7f820a4 100644
> --- a/qemu-kvm-x86.c
> +++ b/qemu-kvm-x86.c
> @@ -1457,8 +1457,9 @@ void kvm_arch_push_nmi(void *opaque)
>
> void kvm_arch_cpu_reset(CPUState *env)
> {
> - env->interrupt_injected = -1;
> + kvm_arch_reset_vcpu(env);
> kvm_arch_load_regs(env);
> + kvm_put_vcpu_events(env);
> if (!cpu_is_bsp(env)) {
> if (kvm_irqchip_in_kernel()) {
> #ifdef KVM_CAP_MP_STATE
> diff --git a/qemu-kvm.c b/qemu-kvm.c
> index 1c34846..f891a3e 100644
> --- a/qemu-kvm.c
> +++ b/qemu-kvm.c
> @@ -2187,6 +2187,11 @@ static int kvm_create_context(void)
> return r;
> }
>
> + kvm_state->vcpu_events = 0;
> +#ifdef KVM_CAP_VCPU_EVENTS
> + kvm_state->vcpu_events = kvm_check_extension(kvm_state, KVM_CAP_VCPU_EVENTS);
> +#endif
> +
> kvm_init_ap();
> if (kvm_irqchip) {
> if (!qemu_kvm_has_gsi_routing()) {
> diff --git a/target-i386/kvm.c b/target-i386/kvm.c
> index 9af1e48..79be2d5 100644
> --- a/target-i386/kvm.c
> +++ b/target-i386/kvm.c
> @@ -285,6 +285,7 @@ int kvm_arch_init_vcpu(CPUState *env)
> return kvm_vcpu_ioctl(env, KVM_SET_CPUID2, &cpuid_data);
> }
>
> +#endif
> void kvm_arch_reset_vcpu(CPUState *env)
> {
> env->exception_injected = -1;
> @@ -292,6 +293,7 @@ void kvm_arch_reset_vcpu(CPUState *env)
> env->nmi_injected = 0;
> env->nmi_pending = 0;
> }
> +#ifdef KVM_UPSTREAM
>
> static int kvm_has_msr_star(CPUState *env)
> {
> @@ -776,8 +778,9 @@ static int kvm_get_mp_state(CPUState *env)
> env->mp_state = mp_state.mp_state;
> return 0;
> }
> +#endif
>
> -static int kvm_put_vcpu_events(CPUState *env)
> +int kvm_put_vcpu_events(CPUState *env)
> {
> #ifdef KVM_CAP_VCPU_EVENTS
> struct kvm_vcpu_events events;
> @@ -807,7 +810,7 @@ static int kvm_put_vcpu_events(CPUState *env)
> #endif
> }
>
> -static int kvm_get_vcpu_events(CPUState *env)
> +int kvm_get_vcpu_events(CPUState *env)
> {
> #ifdef KVM_CAP_VCPU_EVENTS
> struct kvm_vcpu_events events;
> @@ -844,6 +847,7 @@ static int kvm_get_vcpu_events(CPUState *env)
> return 0;
> }
>
> +#ifdef KVM_UPSTREAM
> int kvm_arch_put_registers(CPUState *env)
> {
> int ret;
> diff --git a/target-i386/machine.c b/target-i386/machine.c
> index 47ca6e8..219224d 100644
> --- a/target-i386/machine.c
> +++ b/target-i386/machine.c
> @@ -324,6 +324,7 @@ static void cpu_pre_save(void *opaque)
>
> cpu_synchronize_state(env);
> kvm_save_mpstate(env);
> + kvm_get_vcpu_events(env);
>
> /* FPU */
> env->fpus_vmstate = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
> @@ -374,6 +375,7 @@ static int cpu_post_load(void *opaque, int version_id)
>
> kvm_load_tsc(env);
> kvm_load_mpstate(env);
> + kvm_put_vcpu_events(env);
The last two hunks will cause the same !CONFIG_KVM breakages qemu-kvm's
mpstate used to as well. You may either fix it up temporarily or wait
for my refactoring that is now scheduled with highest priority (should
be ready today or tomorrow).
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2010-01-27 8:36 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-27 0:26 qemu-kvm: enable get/set vcpu events on reset and migration Marcelo Tosatti
2010-01-27 8:36 ` Jan Kiszka [this message]
2010-01-27 22:44 ` Marcelo Tosatti
2010-01-28 8:27 ` Jan Kiszka
2010-01-28 13:55 ` Gleb Natapov
2010-01-28 14:02 ` Jan Kiszka
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=4B5FFB07.9030601@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox