From: "Doru Blânzeanu" <dblanzeanu@linux.microsoft.com>
To: Magnus Kulke <magnuskulke@linux.microsoft.com>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
"Zhao Liu" <zhao1.liu@intel.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Magnus Kulke" <magnuskulke@microsoft.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Wei Liu" <wei.liu@kernel.org>,
"Doru Blânzeanu" <doru.blanzeanu@microsoft.com>,
"Wei Liu" <liuwe@microsoft.com>
Subject: Re: [PATCH 09/12] accel/mshv: write synthetic MSRs after migration
Date: Thu, 23 Jul 2026 11:24:29 +0300 [thread overview]
Message-ID: <amHPvYrnCqJRrWT4@linux.microsoft.com> (raw)
In-Reply-To: <20260710101534.664604-10-magnuskulke@linux.microsoft.com>
On Fri, Jul 10, 2026 at 12:15:31PM +0200, Magnus Kulke wrote:
> Write partition-wide synthetic MSRs. This ensures the hypercall page and
> SynIC facilities are set up before vCPUs attempt to use it.
>
> Signed-off-by: Magnus Kulke <magnuskulke@linux.microsoft.com>
> ---
> accel/mshv/mshv-all.c | 15 +++++++++++++++
> include/hw/hyperv/hvgdk_mini.h | 3 +++
> include/system/mshv_int.h | 1 +
> target/i386/mshv/mshv-cpu.c | 15 +++++++++++++++
> 4 files changed, 34 insertions(+)
>
> diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c
> index 1516475f34..1ca1d4b54f 100644
> --- a/accel/mshv/mshv-all.c
> +++ b/accel/mshv/mshv-all.c
> @@ -60,6 +60,20 @@ static int init_mshv(int *mshv_fd)
> return 0;
> }
>
> +static int mshv_load_cleanup(void *opaque)
> +{
> + int ret;
> +
> + ret = mshv_arch_set_partition_msrs(first_cpu);
> + if (ret < 0) {
> + error_report("Failed to set partition MSRs: %s", strerror(-ret));
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> +
> static int get_host_partition_property(int mshv_fd, uint32_t property_code,
> uint64_t *value)
> {
> @@ -496,6 +510,7 @@ static int mshv_init_vcpu(CPUState *cpu)
> }
>
> static SaveVMHandlers savevm_mshv = {
> + .load_cleanup = mshv_load_cleanup,
> };
>
> static int mshv_init(AccelState *as, MachineState *ms)
> diff --git a/include/hw/hyperv/hvgdk_mini.h b/include/hw/hyperv/hvgdk_mini.h
> index 0602a7c6cc..a5527d49cf 100644
> --- a/include/hw/hyperv/hvgdk_mini.h
> +++ b/include/hw/hyperv/hvgdk_mini.h
> @@ -23,6 +23,9 @@
> #define HV_X64_MSR_APIC_FREQUENCY 0x40000023
>
> typedef enum hv_register_name {
> + /* VP Management Registers */
> + HV_REGISTER_INTERNAL_ACTIVITY_STATE = 0x00000004,
> +
> /* Pending Interruption Register */
> HV_REGISTER_PENDING_INTERRUPTION = 0x00010002,
> HV_REGISTER_INTERRUPT_STATE = 0x00010003,
> diff --git a/include/system/mshv_int.h b/include/system/mshv_int.h
> index 063852115e..cbfcb8611b 100644
> --- a/include/system/mshv_int.h
> +++ b/include/system/mshv_int.h
> @@ -98,6 +98,7 @@ int mshv_get_generic_regs(CPUState *cpu, hv_register_assoc *assocs,
> size_t n_regs);
> int mshv_arch_store_vcpu_state(const CPUState *cpu);
> int mshv_arch_load_vcpu_state(CPUState *cpu);
> +int mshv_arch_set_partition_msrs(const CPUState *cpu);
> void mshv_arch_init_vcpu(CPUState *cpu);
> void mshv_arch_destroy_vcpu(CPUState *cpu);
> void mshv_arch_amend_proc_features(
> diff --git a/target/i386/mshv/mshv-cpu.c b/target/i386/mshv/mshv-cpu.c
> index ce6cfccc0a..1485f6a1ef 100644
> --- a/target/i386/mshv/mshv-cpu.c
> +++ b/target/i386/mshv/mshv-cpu.c
> @@ -1505,6 +1505,21 @@ int mshv_arch_store_vcpu_state(const CPUState *cpu)
> return 0;
> }
>
> +int mshv_arch_set_partition_msrs(const CPUState *cpu)
> +{
> + CPUX86State *env = &X86_CPU(cpu)->env;
> + struct hv_register_assoc assocs[] = {
> + { .name = HV_REGISTER_GUEST_OS_ID,
> + .value.reg64 = env->msr_hv_guest_os_id },
> + { .name = HV_REGISTER_REFERENCE_TSC,
> + .value.reg64 = env->msr_hv_tsc },
> + { .name = HV_X64_REGISTER_HYPERCALL,
> + .value.reg64 = env->msr_hv_hypercall },
> + };
> +
> + return mshv_set_generic_regs(cpu, assocs, ARRAY_SIZE(assocs));
> +}
> +
> void mshv_arch_amend_proc_features(
> union hv_partition_synthetic_processor_features *features)
> {
> --
> 2.34.1
Reviewed-by: Doru Blânzeanu <dblanzeanu@linux.microsoft.com>
next prev parent reply other threads:[~2026-07-23 8:24 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 10:15 [PATCH 00/12] Add migration support to MSHV accelerator, Part 2 Magnus Kulke
2026-07-10 10:15 ` [PATCH 01/12] target/i386/mshv: disable AMX TILE features Magnus Kulke
2026-07-16 11:06 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 02/12] accel/mshv: introduce SaveVMHandler Magnus Kulke
2026-07-16 11:10 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 03/12] hw/i386/mshv: migrate REFERENCE_TIME Magnus Kulke
2026-07-16 12:01 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 04/12] accel/mshv: install dummy handler for SIG_IPI Magnus Kulke
2026-07-17 14:43 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 05/12] target/i386/mshv: migrate LAPIC state Magnus Kulke
2026-07-22 11:57 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 06/12] target/i386/mshv: migrate Synic SINT MSRs Magnus Kulke
2026-07-22 14:03 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 07/12] target/i386/mshv: migrate SIMP and SIEFP state Magnus Kulke
2026-07-22 14:12 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 08/12] target/i386/mshv: migrate STIMER state Magnus Kulke
2026-07-22 14:24 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 09/12] accel/mshv: write synthetic MSRs after migration Magnus Kulke
2026-07-23 8:24 ` Doru Blânzeanu [this message]
2026-07-10 10:15 ` [PATCH 10/12] target/i386/mshv: migrate MP_STATE Magnus Kulke
2026-07-23 9:25 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 11/12] target/i386/mshv: toggle fpu/xsave migration Magnus Kulke
2026-07-23 9:27 ` Doru Blânzeanu
2026-07-10 10:15 ` [PATCH 12/12] hw/i386/mshv: drop initial msi vector 0 Magnus Kulke
2026-07-23 9:28 ` Doru Blânzeanu
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=amHPvYrnCqJRrWT4@linux.microsoft.com \
--to=dblanzeanu@linux.microsoft.com \
--cc=doru.blanzeanu@microsoft.com \
--cc=liuwe@microsoft.com \
--cc=magnuskulke@linux.microsoft.com \
--cc=magnuskulke@microsoft.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=wei.liu@kernel.org \
--cc=zhao1.liu@intel.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 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.