From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E176DC531C7 for ; Thu, 23 Jul 2026 08:24:56 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wmojX-0002sC-Rf; Thu, 23 Jul 2026 04:24:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wmojX-0002qC-0x for qemu-devel@nongnu.org; Thu, 23 Jul 2026 04:24:47 -0400 Received: from linux.microsoft.com ([13.77.154.182]) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wmojV-0005mn-C4 for qemu-devel@nongnu.org; Thu, 23 Jul 2026 04:24:46 -0400 Received: from linux.microsoft.com (unknown [167.220.196.63]) by linux.microsoft.com (Postfix) with ESMTPSA id CAEC320B7167; Thu, 23 Jul 2026 01:24:28 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com CAEC320B7167 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1784795070; bh=w5OJ8O+ipaqYemMPDkVjG6mLnXjOLJPu93kSo7xC0ts=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ibPRlC1x36toYjFcVEUtaujR5TYLORO/QUddjOQXImADH6rkv8hsSAhq+3QDal3hp i1lDxH9cM9jABL7tX72so+q02koEAkfhJYeHiTojpCT1B9avE7JunIHn5/dd16cDrL OswHJUUT/cZFDjXKywkyrKhU1WtxqtC6PsQHO9eU= Date: Thu, 23 Jul 2026 11:24:29 +0300 From: Doru =?iso-8859-1?Q?Bl=E2nzeanu?= To: Magnus Kulke Cc: qemu-devel@nongnu.org, Paolo Bonzini , Zhao Liu , Richard Henderson , Magnus Kulke , "Michael S. Tsirkin" , Wei Liu , Doru =?iso-8859-1?Q?Bl=E2nzeanu?= , Wei Liu Subject: Re: [PATCH 09/12] accel/mshv: write synthetic MSRs after migration Message-ID: References: <20260710101534.664604-1-magnuskulke@linux.microsoft.com> <20260710101534.664604-10-magnuskulke@linux.microsoft.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20260710101534.664604-10-magnuskulke@linux.microsoft.com> Received-SPF: pass client-ip=13.77.154.182; envelope-from=dblanzeanu@linux.microsoft.com; helo=linux.microsoft.com X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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 > --- > 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