[{"id":3683624,"web_url":"http://patchwork.ozlabs.org/comment/3683624/","msgid":"<55BD951E-19E4-44B8-89AC-9D16EFE0E768@unpredictable.fr>","list_archive_url":null,"date":"2026-04-28T18:05:22","subject":"Re: [PATCH 6/6] target/i386/mshv: use the register page to set\n registers","submitter":{"id":91318,"url":"http://patchwork.ozlabs.org/api/people/91318/","name":"Mohamed Mediouni","email":"mohamed@unpredictable.fr"},"content":"> On 28. Apr 2026, at 15:50, Doru Blânzeanu <dblanzeanu@linux.microsoft.com> wrote:\n> \n> Update mshv_store_regs to use the register page when it is mmapped and\n> valid to set registers.\n> Otherwise use the ioctls to set the registers.\n> \n> Signed-off-by: Doru Blânzeanu <dblanzeanu@linux.microsoft.com>\nReviewed-by: Mohamed Mediouni <mohamed@unpredictable.fr>\n\n> ---\n> target/i386/mshv/mshv-cpu.c | 45 +++++++++++++++++++++++++++++++++----\n> 1 file changed, 41 insertions(+), 4 deletions(-)\n> \n> diff --git a/target/i386/mshv/mshv-cpu.c b/target/i386/mshv/mshv-cpu.c\n> index 7949493e97..6bb3e6d4a9 100644\n> --- a/target/i386/mshv/mshv-cpu.c\n> +++ b/target/i386/mshv/mshv-cpu.c\n> @@ -294,14 +294,51 @@ static int set_standard_regs(const CPUState *cpu)\n>     return 0;\n> }\n> \n> +static void mshv_set_standard_regs_vp_page(CPUState *cpu)\n> +{\n> +    X86CPU *x86cpu = X86_CPU(cpu);\n> +    CPUX86State *env = &x86cpu->env;\n> +\n> +    env->regs_page->rax = env->regs[R_EAX];\n> +    env->regs_page->rbx = env->regs[R_EBX];\n> +    env->regs_page->rcx = env->regs[R_ECX];\n> +    env->regs_page->rdx = env->regs[R_EDX];\n> +    env->regs_page->rsi = env->regs[R_ESI];\n> +    env->regs_page->rdi = env->regs[R_EDI];\n> +    env->regs_page->rsp = env->regs[R_ESP];\n> +    env->regs_page->rbp = env->regs[R_EBP];\n> +    env->regs_page->r8  = env->regs[R_R8];\n> +    env->regs_page->r9  = env->regs[R_R9];\n> +    env->regs_page->r10 = env->regs[R_R10];\n> +    env->regs_page->r11 = env->regs[R_R11];\n> +    env->regs_page->r12 = env->regs[R_R12];\n> +    env->regs_page->r13 = env->regs[R_R13];\n> +    env->regs_page->r14 = env->regs[R_R14];\n> +    env->regs_page->r15 = env->regs[R_R15];\n> +    env->regs_page->rip = env->eip;\n> +    lflags_to_rflags(env);\n> +    env->regs_page->rflags = env->eflags;\n> +\n> +    env->regs_page->dirty |= (1u << HV_X64_REGISTER_CLASS_GENERAL)\n> +                                | (1u << HV_X64_REGISTER_CLASS_IP)\n> +                                | (1u << HV_X64_REGISTER_CLASS_FLAGS);\n> +}\n> +\n> int mshv_store_regs(CPUState *cpu)\n> {\n> +    X86CPU *x86cpu = X86_CPU(cpu);\n> +    CPUX86State *env = &x86cpu->env;\n>     int ret;\n> \n> -    ret = set_standard_regs(cpu);\n> -    if (ret < 0) {\n> -        error_report(\"Failed to store standard registers\");\n> -        return -1;\n> +    /* Use register vp page to optimize registers access */\n> +    if (env->regs_page && env->regs_page->isvalid != 0) {\n> +        mshv_set_standard_regs_vp_page(cpu);\n> +    } else {\n> +        ret = set_standard_regs(cpu);\n> +        if (ret < 0) {\n> +            error_report(\"Failed to store standard registers\");\n> +            return -1;\n> +        }\n>     }\n> \n>     return 0;\n> -- \n> 2.53.0\n> \n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=unpredictable.fr header.i=@unpredictable.fr\n header.a=rsa-sha256 header.s=sig1 header.b=XbUG05CE;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g4pK20Glpz1xrS\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 04:06:14 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wHmom-0003lC-RV; Tue, 28 Apr 2026 14:05:56 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mohamed@unpredictable.fr>)\n id 1wHmob-0003fh-6Y\n for qemu-devel@nongnu.org; Tue, 28 Apr 2026 14:05:47 -0400","from p-west3-cluster3-host5-snip4-3.eps.apple.com ([57.103.72.134]\n helo=outbound.ms.icloud.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mohamed@unpredictable.fr>)\n id 1wHmoX-0007ig-Fx\n for qemu-devel@nongnu.org; Tue, 28 Apr 2026 14:05:43 -0400","from outbound.ms.icloud.com (unknown [127.0.0.2])\n by p00-icloudmta-asmtp-us-west-3a-60-percent-11 (Postfix) with ESMTPS id\n E63F518003B5; Tue, 28 Apr 2026 18:05:36 +0000 (UTC)","from smtpclient.apple (unknown [17.57.154.37])\n by p00-icloudmta-asmtp-us-west-3a-60-percent-11 (Postfix) with ESMTPSA id\n C12381800A53; Tue, 28 Apr 2026 18:05:34 +0000 (UTC)"],"X-ICL-Out-Info":"\n HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwROEwVSB11NVg1HD1geXBQXFUBDXgheH0wcHQ5YBhIATQoONgZZBV4JVgNDBTYSFF1FRgNHGVcUUBtHDFUHV15fChMAXg8PTAxNcSkOXgM1FEkKKANGBkR7QB5VDipxXQA8AltyLXdAfE8FVXceXABLHVcEVB9TElUdHQtFVRIEQAhWUFQeQQRWFWwJWAZTGVc=","Dkim-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr;\n s=sig1; t=1777399538; x=1779991538;\n bh=y4RfdPIpWhCXiG3sbJK91ucXV5+qMlZfUWRk6IdgwwA=;\n h=Content-Type:Mime-Version:Subject:From:Date:Message-Id:To:x-icloud-hme;\n b=XbUG05CEI5I1xjyVcAAAo2ifq+QwVR0djXUD80NFeoJQG2X8GVwSdAGqeAuEj39ypZcWKYMnKQrtjXt/piSY0IpCdeWWKHyZyvz16mxc+/UsP8B75pHJzzK+AMvaaxvl3fDOeZ37iGh9KN3MBLsZ9Zs9ZHQ2ZfmLQjWGYvEx4nhtSMET5CWlimhearnfUEm+P95TtFUfUTb+JzXVl0YBjEK+KHV4vvdVWW2HY1Wrb1+U5dXC4POYr4neS2ODjjBYUzUKxtbLpZSxNRTN5OwBrTGiJga4UP1uwdYGJKnUnTfubkUv6GvLd1sPAV+kdE1p/ZWPKM7T5ko9U/caxjfQ9A==","mail-alias-created-date":"1752046281608","Content-Type":"text/plain;\n\tcharset=utf-8","Mime-Version":"1.0 (Mac OS X Mail 16.0 \\(3864.500.181\\))","Subject":"Re: [PATCH 6/6] target/i386/mshv: use the register page to set\n registers","From":"Mohamed Mediouni <mohamed@unpredictable.fr>","In-Reply-To":"<20260428135053.251200-7-dblanzeanu@linux.microsoft.com>","Date":"Tue, 28 Apr 2026 20:05:22 +0200","Cc":"qemu-devel@nongnu.org, Magnus Kulke <magnuskulke@linux.microsoft.com>,\n Wei Liu <wei.liu@kernel.org>, Paolo Bonzini <pbonzini@redhat.com>,\n Zhao Liu <zhao1.liu@intel.com>","Content-Transfer-Encoding":"quoted-printable","Message-Id":"<55BD951E-19E4-44B8-89AC-9D16EFE0E768@unpredictable.fr>","References":"<20260428135053.251200-1-dblanzeanu@linux.microsoft.com>\n <20260428135053.251200-7-dblanzeanu@linux.microsoft.com>","To":"=?utf-8?q?Doru_Bl=C3=A2nzeanu?= <dblanzeanu@linux.microsoft.com>","X-Mailer":"Apple Mail (2.3864.500.181)","X-Authority-Info-Out":"v=2.4 cv=YZywJgRf c=1 sm=1 tr=0 ts=69f0f6f1\n cx=c_apl:c_pps:t_out a=qkKslKyYc0ctBTeLUVfTFg==:117 a=IkcTkHD0fZMA:10\n a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yMhMjlubAAAA:8\n a=ADczPIEOeSqyNKhzclwA:9 a=QEXdDO2ut3YA:10","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDI4MDE3NSBTYWx0ZWRfX+CxczoUwyuPJ\n BS3YHqQ+nzxhcqOnfFWq/SNV3PkhBl7IfbOcDaDkKl4yDirLV9pKz1+NL6kvfaoDjM19/Mv/tBb\n CSzxoXg+n4wdpul/CpIp9zMAo9EDwOpd9eYO3Lb7v3JJw4j4jkKTxNQ+GeB2gxDiJJvW/S06nlw\n +QRmYI9qXCP6u7VwaHyQ3US5sV3AhH2soFlZw315NoAomIXG6u0M2i8SNL3qkBcCmYUEEsQNxAD\n aHOM11JI2fv5001P3XEbO5beDpSNP72SVkvyDXx+L84b4XPRnsid3CYNcZl1hqpZ+Vy2KpbyCAs\n xe4WqqoRY3IRg3B3IZC6rxKthvbxiPxpoiaryE39ZVBktF/Cd+m04qR7S4W5u0=","X-Proofpoint-ORIG-GUID":"DdzlshC7AvrNnCkGL5jjfSQsMdhm3tf4","X-Proofpoint-GUID":"DdzlshC7AvrNnCkGL5jjfSQsMdhm3tf4","Received-SPF":"pass client-ip=57.103.72.134;\n envelope-from=mohamed@unpredictable.fr; helo=outbound.ms.icloud.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n SPF_HELO_PASS=-0.001,\n 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 <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3684011,"web_url":"http://patchwork.ozlabs.org/comment/3684011/","msgid":"<afHtrYCfOwAKoL+B@example.com>","list_archive_url":null,"date":"2026-04-29T11:38:21","subject":"Re: [PATCH 6/6] target/i386/mshv: use the register page to set\n registers","submitter":{"id":90753,"url":"http://patchwork.ozlabs.org/api/people/90753/","name":"Magnus Kulke","email":"magnuskulke@linux.microsoft.com"},"content":"On Tue, Apr 28, 2026 at 04:50:53PM +0300, Doru Blânzeanu wrote:\n> Update mshv_store_regs to use the register page when it is mmapped and\n> valid to set registers.\n> Otherwise use the ioctls to set the registers.\n> \n> Signed-off-by: Doru Blânzeanu <dblanzeanu@linux.microsoft.com>\n> ---\n>  target/i386/mshv/mshv-cpu.c | 45 +++++++++++++++++++++++++++++++++----\n>  1 file changed, 41 insertions(+), 4 deletions(-)\n> \n> diff --git a/target/i386/mshv/mshv-cpu.c b/target/i386/mshv/mshv-cpu.c\n> index 7949493e97..6bb3e6d4a9 100644\n> --- a/target/i386/mshv/mshv-cpu.c\n> +++ b/target/i386/mshv/mshv-cpu.c\n> @@ -294,14 +294,51 @@ static int set_standard_regs(const CPUState *cpu)\n>      return 0;\n>  }\n>  \n> +static void mshv_set_standard_regs_vp_page(CPUState *cpu)\n> +{\n> +    X86CPU *x86cpu = X86_CPU(cpu);\n> +    CPUX86State *env = &x86cpu->env;\n> +\n> +    env->regs_page->rax = env->regs[R_EAX];\n> +    env->regs_page->rbx = env->regs[R_EBX];\n> +    env->regs_page->rcx = env->regs[R_ECX];\n> +    env->regs_page->rdx = env->regs[R_EDX];\n> +    env->regs_page->rsi = env->regs[R_ESI];\n> +    env->regs_page->rdi = env->regs[R_EDI];\n> +    env->regs_page->rsp = env->regs[R_ESP];\n> +    env->regs_page->rbp = env->regs[R_EBP];\n> +    env->regs_page->r8  = env->regs[R_R8];\n> +    env->regs_page->r9  = env->regs[R_R9];\n> +    env->regs_page->r10 = env->regs[R_R10];\n> +    env->regs_page->r11 = env->regs[R_R11];\n> +    env->regs_page->r12 = env->regs[R_R12];\n> +    env->regs_page->r13 = env->regs[R_R13];\n> +    env->regs_page->r14 = env->regs[R_R14];\n> +    env->regs_page->r15 = env->regs[R_R15];\n> +    env->regs_page->rip = env->eip;\n> +    lflags_to_rflags(env);\n> +    env->regs_page->rflags = env->eflags;\n> +\n> +    env->regs_page->dirty |= (1u << HV_X64_REGISTER_CLASS_GENERAL)\n> +                                | (1u << HV_X64_REGISTER_CLASS_IP)\n> +                                | (1u << HV_X64_REGISTER_CLASS_FLAGS);\n> +}\n> +\n>  int mshv_store_regs(CPUState *cpu)\n>  {\n> +    X86CPU *x86cpu = X86_CPU(cpu);\n> +    CPUX86State *env = &x86cpu->env;\n>      int ret;\n>  \n> -    ret = set_standard_regs(cpu);\n> -    if (ret < 0) {\n> -        error_report(\"Failed to store standard registers\");\n> -        return -1;\n> +    /* Use register vp page to optimize registers access */\n> +    if (env->regs_page && env->regs_page->isvalid != 0) {\n> +        mshv_set_standard_regs_vp_page(cpu);\n> +    } else {\n> +        ret = set_standard_regs(cpu);\n> +        if (ret < 0) {\n> +            error_report(\"Failed to store standard registers\");\n> +            return -1;\n> +        }\n>      }\n\nI think for consistency sake it would be better to also write back\nsregs, but this is reworked in the migration patch series anyway, so we\ncan leave it as is here.\n\n>  \n>      return 0;\n> -- \n> 2.53.0\n\nReviewed-By: Magnus Kulke <magnuskulke@linux.microsoft.com>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=linux.microsoft.com header.i=@linux.microsoft.com\n header.a=rsa-sha256 header.s=default header.b=Z7OAF+PS;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5FhH4hwJz1xqf\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 21:39:25 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wI3Fe-0006Ep-WC; Wed, 29 Apr 2026 07:38:47 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <magnuskulke@linux.microsoft.com>)\n id 1wI3FO-0006Du-Vj\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 07:38:33 -0400","from linux.microsoft.com ([13.77.154.182])\n by eggs.gnu.org with esmtp (Exim 4.90_1)\n (envelope-from <magnuskulke@linux.microsoft.com>) id 1wI3FM-0003LE-4D\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 07:38:29 -0400","from example.com (unknown [167.220.208.81])\n by linux.microsoft.com (Postfix) with ESMTPSA id 9FC6320B716C;\n Wed, 29 Apr 2026 04:38:24 -0700 (PDT)"],"DKIM-Filter":"OpenDKIM Filter v2.11.0 linux.microsoft.com 9FC6320B716C","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1777462705;\n bh=NS7XOFJ1CtQnB/JU8/hzjogMH1giz3e0WYCtN5uCU4Q=;\n h=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n b=Z7OAF+PSjF9gyXiOtmogIhXaFHGW+n5TNYEdWCiQj/aNc4+98A9J8X9K71Uf58dDu\n D/S/Yw/u1CzmZoXhZEuLxRKebFOm8d1LSZCuGkENIEIzbZISgH8UVP+E7EsvUtkjes\n EQ5R7Bmvq23K0z6dr7TxlMlfUtqcnaXPKG/j3H58=","Date":"Wed, 29 Apr 2026 13:38:21 +0200","From":"Magnus Kulke <magnuskulke@linux.microsoft.com>","To":"Doru =?iso-8859-1?q?Bl=E2nzeanu?= <dblanzeanu@linux.microsoft.com>","Cc":"qemu-devel@nongnu.org, Wei Liu <wei.liu@kernel.org>,\n Paolo Bonzini <pbonzini@redhat.com>, Zhao Liu <zhao1.liu@intel.com>","Subject":"Re: [PATCH 6/6] target/i386/mshv: use the register page to set\n registers","Message-ID":"<afHtrYCfOwAKoL+B@example.com>","References":"<20260428135053.251200-1-dblanzeanu@linux.microsoft.com>\n <20260428135053.251200-7-dblanzeanu@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":"<20260428135053.251200-7-dblanzeanu@linux.microsoft.com>","Received-SPF":"pass client-ip=13.77.154.182;\n envelope-from=magnuskulke@linux.microsoft.com; helo=linux.microsoft.com","X-Spam_score_int":"-26","X-Spam_score":"-2.7","X-Spam_bar":"--","X-Spam_report":"(-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_LOW=-0.7,\n 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 <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]