From nobody Thu Sep 24 19:01:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1790155296; cv=pass; d=zohomail.com; s=zohoarc; b=lA2WLRP29geZA7mM1iCwCVgo5Wp/bl1sS72iaPU/5+qA+NiR+RLSBqWFe0DO+2il+eFL0Q2lEZXnoNfn4gAVHBGVjM1Imy5FPGmLSG/OoVlaleLkp3p3mSBdWgrfm5a7ZURudN0jOO2lc3YLsAc/R1/N1H+JHrZI9F8d+KvJbu0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790155296; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NJv1vhwGLQHHcsMb5ZEwN2EqsKM7E/Z918v8aaivmyo=; b=Ik22AaEj1S3jMsy0wlaVz4QGQIfuZRxyEBMxzrASncWyu3hANJGEMElqeWtOo9PDsq7LBdLHLgBVv0Rq+nv6lhWUihYIkg45eevZB2b7lzc51/G1dXVInQCemxigkZorgWXveTDNwUUqpzNB1sXw3azKK1kXnsFSDbAD+al3kVE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1790155296597583.7092882599836; Wed, 23 Sep 2026 02:21:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1429925.1652560 (Exim 4.92) (envelope-from ) id 1x9JAC-0004Fu-Qw; Wed, 23 Sep 2026 09:21:16 +0000 Received: by outflank-mailman (output) from mailman id 1429925.1652560; Wed, 23 Sep 2026 09:21:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAC-0004Fn-Ms; Wed, 23 Sep 2026 09:21:16 +0000 Received: by outflank-mailman (input) for mailman id 1429925; Wed, 23 Sep 2026 09:21:15 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAB-0004FI-Eo for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 09:21:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x9JAA-00CYaM-Rq for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 11:21:14 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab39a02-8faa-0a2a0a5109dd-0a2a4506e7d4-22 for ; Wed, 23 Sep 2026 11:21:14 +0200 Received: from [40.93.195.61] (helo=SN4PR2101CU001.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab39a09-195a-0a2a45060019-285dc33dd2fe-3 for ; Wed, 23 Sep 2026 11:21:14 +0200 Received: from LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) by BL4PR03MB8106.namprd03.prod.outlook.com (2603:10b6:208:591::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.16; Wed, 23 Sep 2026 09:21:12 +0000 Received: from LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c]) by LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c%5]) with mapi id 15.21.0451.014; Wed, 23 Sep 2026 09:21:12 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-Id:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S39SDGmxQNfwCfkqBzSUJakOgaha7dWJ+R9dFHD+aUJmI0HrMoKtVWs+yYUugIeCPrlZSJBtmIRfttVEhpOl3sFJLkNHBjohuAl3M25kJKhQU128Y08am4BDWcIofHU4XN3vOn96aqDs6QL43iS3PKLprUBs6bDdJ1R0VKbx+j7xd0FTSBq/oJ75zuesLlxWOIvBHDdWUqRXnQ+xt9ynq5ebGWD6J5uqnuxOB79N5uZn71gv3EfpNZZFzpxMXbRnV399YPWty0SA6gqmQKVQAjzy6BivLTbtJk2/vuJ2iOQaierA59W1Duve/SrPaaVeqE730JOj7XTL9gNy6Wn1cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NJv1vhwGLQHHcsMb5ZEwN2EqsKM7E/Z918v8aaivmyo=; b=jCo/KppaYkWkB41GNMMQwWJnNTKiwvT3MCxZY7AGTmlpMY0B7drI2qcDNtDSf1JdB8tz4xHE/Y4eRbA7ePClAzivnQT3qGfIheKi7JsW/YKvZ6xnInbj2nnhEq2wstcaynySxyk4JMcGNWMDto04xqt2idVlN63tWm8lGjZRFoMbmKquuCvthHnY0pi/zRcV1Xya1nSbKaGAmKsq9NCAzwlvYBnlB6tpanaUOOwT2gQQkk9JJ8hARPq+xk82yFUylSxAv8bO2E8lJJGj8FOX4M2RhsazaJbSrTKsfaYOePCZLIrG2lAUYjsGfjo52ukgVvmmMPhkkGjucE4M5wy/Pg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NJv1vhwGLQHHcsMb5ZEwN2EqsKM7E/Z918v8aaivmyo=; b=Pr9Y1JZ6B0J1jC9vcPcuYtU0SomyldOqCveqHr/epUK0IJveE9jY8ILmvFPjrf4hxuE7MXCFkoyJXPkntSNXxUMHYYf7BPbKC/ZjO6zd5Z8X687N5Ii0nsrgi+zQHEEjLXdLNr/Gc9U/nJ7AlGeT5/QcLAtWooAq1Kleya8FSgI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: chunjie.zhu@citrix.com To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, jason.andryuk@amd.com, teddy.astie@vates.tech, Chunjie Zhu Subject: =?UTF-8?q?=5BPATCH=C2=A0v1=201/5=5D=20x86/nestedsvm=3A=20update=20vmrun=20without=20pending=20or=20deferred=20flag?= Date: Wed, 23 Sep 2026 17:20:41 +0800 Message-Id: <6a89e46dcdeaed7a0cae11356eec54dcb81d8701.1790146987.git.chunjie.zhu@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KL1PR02CA0019.apcprd02.prod.outlook.com (2603:1096:820:d::6) To LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR03MB7609:EE_|BL4PR03MB8106:EE_ X-MS-Office365-Filtering-Correlation-Id: 124a2cbe-d91c-4672-ebce-08df19540257 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|22082099003|56012099006|11063799006|10067099003; X-Microsoft-Antispam-Message-Info: 9H0jnOuhh3Dd82ucZ5UnfarBVRFOMklt9oE0FHiv4GgIJqZjJlacXuIgJyIFyGaZ2thDJkTIsVhRfO+G6o7zgRFH4M4OBqPK/0BUHhZyjPAz3mec00IuP53i4O91a39rAA4guDSM+G5BVhbbgkqq1wUdaTIdBGKhnLiHVKhlHmFKX/DvtsVJlbr3UgIzhTVR4hjtuDuQXnaJz1WrjRxcy2RSxYeOtw8JcQqTZ5B34u1F7NlV2XVW5vtYHtb+SmmNu2TLaX6TUpkNVbG+0zLLvPKbja4gG/SpNQ9c2aul4jKllIhvHwMC7AsbY4lnKj6HD//GoaT0aiy2C9yja6nzJ2mUinW5CTYJFhhX8aywtSeF5aAh3Jj+0nvgMJykDwjW/xIBp1ZSmwG19yTNTfqE3R5I6KyaGckj0LKOJgGQMJIGpGR7DZp5SJN01gzllIboI6Kj73d46v+TZ6m1TwwuJ9us9Obc0jkLTVJrLBNyK/1ue6hdDuzDiCeRKQyeUrCcVHWREAunNN+vYQ5V/GGxk3T2wLSyvImy2jpW5eKCmiObCOaNFKFKCdAXQGY1+ZgaIVR4pda3E8yT8qnYLbpITbrI3WuQs9YZlmy0rEMxKT19XUR7D82XCvPSgZjAfllb7cizVgWp6ugz6En+sb2o981O5YRfIiumLXEAAQLAyao= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR03MB7609.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ckNSSElCbWUrWERNNDQ0VXd4ZXFlbmRQcjFjWmk1VFRxWWhyUlRGVkpGUHhE?= =?utf-8?B?TS9lUHBYcXJYZHR1TmRqVmRiYnFiZlp0ai91bThPTjV3Sm05RGJMTkhNMUkr?= =?utf-8?B?ckNPQVhBaXBxNzNsdnhTWEpxY0JucXNnS2pwRkZZanFFVDJMbm90bkR1THNm?= =?utf-8?B?ZE1tY3NzbDN6RGltS3dQWXpQSkNDaUNFOXNQcjBCd1A0V2NXQ3BDR2h1dDVK?= =?utf-8?B?a2htWWxxS29GUStadGZPUUo2U0cwMTFXRkl6ZFRkQ3dYNTBCTGsrMG1FY0px?= =?utf-8?B?Y096dXh3Q25QT2dLZkV4Z3NSbVFIUm94NnVKdzQ3WjJpbTJYZit5M1VZWVdF?= =?utf-8?B?VEIxRWpNejhwMzFXZFZLWWFqcXJ0T0xrdUVYZTZQV3QyVHhFUWxFQjFkbktn?= =?utf-8?B?MHJlc0FwWlFkZm1lVGdKYkxqMWxPUTFZNEExbDhKeVdaZEhqZjdsSzByeC8w?= =?utf-8?B?VlcybVZtdDMvZlBMN2NzZlVLQ2tsRHJGWVVmMHBCQzlhOWFJVkc1amtJdCtn?= =?utf-8?B?M1I0TmJ2NzlJWXA0WDNLOVUxNHlVbDZQZmFIc1o0NjdvdE9GYml1ZTdoK2FF?= =?utf-8?B?MzRoYURQZ3NqTmk5bVdlb05PSXE3NGE2dGVBYmJRYlA2aWViV2tYSGl2SEg3?= =?utf-8?B?akVRZjM2NnhVdEwxenNmVGREUjA0UndNT0JnMElLYTQzcFpwS0NnTFBZR2gr?= =?utf-8?B?Z2oxeEJkeDBuZVVGTCtpWGNLOFVwcVplS3U1RWlkbi81U3lUOXc2a2xqVldX?= =?utf-8?B?Uy83KzJEMkNMckpKOC9OSlRSZU9EQVVwV2FEalVkNHlMbnZucldRZmoxc0pO?= =?utf-8?B?S0dhZVFQaUxiV3VZUHFEdEVDM0UrNHF4OFg1MHByeXVPZlpML1dDK0dnOXhl?= =?utf-8?B?Y2s4UFM1bFFUSnBQeGlpOVFOd2N5anRXdC9ldHJaOVdFdm1rNzJURnpCRkxo?= =?utf-8?B?d1ptR0l2MWZQbkFzVkpxQzd0a2s1UmE2VU9qU0Nob3BXUktNd1ZJZ08xeFhQ?= =?utf-8?B?b1gyREhWTVJGTC9ydFBDSlBBc1huQjM1YjNFOUl3SzlveHRNSVdwd0xjNGRs?= =?utf-8?B?YjRvMG9CRFFuK1B6WFRLRGtROTNBWUJuV1FKYjRoYUZLUUdpcWNQYkpFTlFv?= =?utf-8?B?azRMcEdIN05SVVN1UzZXeVJMSkxFci9tZmpuZHdyd3lUd1lSNVRCRVZvRWt5?= =?utf-8?B?RVg2RjVlVGtyWSsxNk9ZMDluOXhmcTdnK1ZvYWZzdEprSEtiUFhIVTVjaHJW?= =?utf-8?B?QnBSZmlMMnQ0cFVEd05XSVBIUmtnLzdnVnJoNTAwRVE1dFBYczEzTkwyQnI1?= =?utf-8?B?OUNqUGYyZ1lBQ3VTMTkwMU9IcGVEejRaT25vOXNmZzNDRnRjZDZJbFh4ZU1E?= =?utf-8?B?WDk2aTJWZXBZc1pLVGltck1WeGkzN2FUR3Q4dXBVS3VkdG1jV1BVVEVnU21r?= =?utf-8?B?TzhaMXlFbmJ5Z1pJOHFxTXFIKzYxNktGaS9qMkcwU3RWa2E3enI2bnVHVndv?= =?utf-8?B?NTRMYXJmTUExb2o5bzBxZVFqSFNpUzF3T0JXbGNEZGhkNmhtMDFnM0QzMkN0?= =?utf-8?B?cXVoVmxvVjdmckRmWmZVMXhJeisySHg4eDBuRU1BcFRxVVk0d3ZHUVpWZ2tz?= =?utf-8?B?ckpqbUVoNlI4RDBwckxTMEtvVksxWkxpbW5PaDg1eUFmOFF1UGVMMnNEbVVv?= =?utf-8?B?UHp1cXBEeCs3aGQ3SzBDbDJ0ZDJLVlFkdHVFaitXaXFtSjRaMmFlcVlZTlJQ?= =?utf-8?B?OUoyemZZaGtMdVlUNVNZdHpzM0s2aGovNjUrMDg0WCtyckE2bzJncGpuWnpE?= =?utf-8?B?UEtNRS9Kd0hqTEcxWm1oVEhON1pNamdUZ3ZhMElaL25WdXFvV3NZVk9CQXNG?= =?utf-8?B?U2hIRUFnZ21TbHVkK1hQRm1jeXdoUmYzQXpkejNRbXNJZ0NDdnI0dFYwaWZy?= =?utf-8?B?TWtWSis3aytiWWlVWUtBY2h5cVFncmJjNkJwRVc2cmFVZkJUQmlwR2xQemxa?= =?utf-8?B?bWdsK0dBNDUrUmxqVWMrTWVSazRoSnh4eVhjUmFzMWVCZXRYWFdwMGZsZ0Y5?= =?utf-8?B?SmZLUGUyMzJXOEt2V3V5dW44Mm96VUE4K1VtR0VWU3ltZTlZTmNmcHd3VWlj?= =?utf-8?B?aGcrY0xaTWNONUoxamQzY1pXdU1zeFdCR0paVllJRUVpb3ZkditnQkwwbUEr?= =?utf-8?B?KzhabHNuV2l3S05KTkk1Z3p2MkEzZ2djVnc1am8rd1dtTWpXc0NyUnN1UEFZ?= =?utf-8?B?S1pOUzdxMzVJeVowU3ZSZlJ3SmlQbTF5anJFdVJaWDB5NEY3Y09jYW1SYTNw?= =?utf-8?B?UjFWa0lQYzZiaEs2ZGE4akJpcGJwZyswREI1bXdWM01jTlpmaStnUT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 124a2cbe-d91c-4672-ebce-08df19540257 X-MS-Exchange-CrossTenant-AuthSource: LV3PR03MB7609.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2026 09:21:12.0164 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1uR958YQLkLg7W0wALNkrBhijhcIDRBj5fExlUs8hBtDbhGgb1FmDl++DDkdFELsS/C15bgnLctDb1+MKSf4TA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR03MB8106 X-purgate-ID: tlsNG-16d1c6/1790155274-FE67277B-A46F138D/0/0 X-purgate-type: clean X-purgate-size: 6729 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1790155297726158500 Content-Type: text/plain; charset="utf-8" From: Chunjie Zhu Signed-off-by: Chunjie Zhu --- xen/arch/x86/hvm/svm/entry.S | 48 +++++++++++++++++++++++-------- xen/arch/x86/hvm/svm/nestedhvm.h | 1 + xen/arch/x86/hvm/svm/nestedsvm.c | 31 +++++++++++++++++++- xen/arch/x86/hvm/svm/svm.c | 11 +++++-- xen/arch/x86/x86_64/asm-offsets.c | 1 + 5 files changed, 77 insertions(+), 15 deletions(-) diff --git a/xen/arch/x86/hvm/svm/entry.S b/xen/arch/x86/hvm/svm/entry.S index d9613a2a8fed..59d865635fd5 100644 --- a/xen/arch/x86/hvm/svm/entry.S +++ b/xen/arch/x86/hvm/svm/entry.S @@ -28,31 +28,51 @@ FUNC(svm_asm_do_resume) GET_CURRENT(bx) .Lsvm_do_resume: call svm_intr_assist - call nsvm_vcpu_switch - ASSERT_NOT_IN_ATOMIC =20 - mov VCPU_processor(%rbx),%eax - lea irq_stat+IRQSTAT_softirq_pending(%rip),%rdx + /* + * The nested p2m repair below may need to take nestedp2m_lock and + * issue synchronous cross-CPU TLB flush IPIs, doing this with + * interrupts disabled can deadlock. + */ xor %ecx,%ecx - shl $IRQSTAT_shift,%eax - cli - cmp %ecx,(%rdx,%rax,1) - jne .Lsvm_process_softirqs - cmp %cl,VCPU_nsvm_hap_enabled(%rbx) UNLIKELY_START(ne, nsvm_hap) + cmpb $0,VCPU_nhvm_guestmode(%rbx) + UNLIKELY_DONE(z, nsvm_hap) + cmpb $0,VCPU_nhvm_stale_np2m(%rbx) + jne .Lsvm_update_nestedp2m cmp %rcx,VCPU_nhvm_p2m(%rbx) sete %al test VCPU_nhvm_guestmode(%rbx),%al UNLIKELY_DONE(z, nsvm_hap) +.Lsvm_update_nestedp2m: /* - * Someone shot down our nested p2m table; go round again - * and nsvm_vcpu_switch() will fix it for us. + * The nested p2m table is stale, fix it here. */ - sti + mov %rbx,%rdi + call nsvm_vcpu_update_nestedp2m jmp .Lsvm_do_resume __UNLIKELY_END(nsvm_hap) =20 + ASSERT_NOT_IN_ATOMIC + + mov VCPU_processor(%rbx),%eax + lea irq_stat+IRQSTAT_softirq_pending(%rip),%rdx + xor %ecx,%ecx + shl $IRQSTAT_shift,%eax + cli + cmp %ecx,(%rdx,%rax,1) + jne .Lsvm_process_softirqs + + cmp %cl,VCPU_nsvm_hap_enabled(%rbx) + je .Lsvm_vmenter + cmpb $0,VCPU_nhvm_guestmode(%rbx) + je .Lsvm_vmenter + cmpb $0,VCPU_nhvm_stale_np2m(%rbx) + jne .Lsvm_retry_nestedp2m + +.Lsvm_vmenter: + call svm_vmenter_helper =20 clgi @@ -148,4 +168,8 @@ __UNLIKELY_END(nsvm_hap) sti call do_softirq jmp .Lsvm_do_resume + +.Lsvm_retry_nestedp2m: + sti + jmp .Lsvm_do_resume END(svm_asm_do_resume) diff --git a/xen/arch/x86/hvm/svm/nestedhvm.h b/xen/arch/x86/hvm/svm/nested= hvm.h index 9bb04a043430..e22ef259c171 100644 --- a/xen/arch/x86/hvm/svm/nestedhvm.h +++ b/xen/arch/x86/hvm/svm/nestedhvm.h @@ -41,6 +41,7 @@ void cf_check nsvm_vcpu_destroy(struct vcpu *v); int cf_check nsvm_vcpu_initialise(struct vcpu *v); int cf_check nsvm_vcpu_reset(struct vcpu *v); int nsvm_vcpu_vmrun(struct vcpu *v, struct cpu_user_regs *regs); +void nsvm_vcpu_update_nestedp2m(struct vcpu *v); int cf_check nsvm_vcpu_vmexit_event(struct vcpu *v, const struct x86_event *event); uint64_t cf_check nsvm_vcpu_hostcr3(struct vcpu *v); diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index a8b15d6eae05..171b32be2416 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -361,6 +361,35 @@ static void nestedsvm_vmcb_set_nestedp2m(struct vcpu *= v, n2vmcb->_h_cr3 =3D pagetable_get_paddr(p2m_get_pagetable(p2m)); } =20 +void nsvm_vcpu_update_nestedp2m(struct vcpu *v) +{ + struct nestedvcpu *nv; + struct nestedsvm *svm; + struct p2m_domain *p2m; + + ASSERT(v !=3D NULL); + + nv =3D &vcpu_nestedhvm(v); + svm =3D &vcpu_nestedsvm(v); + + if ( !nestedhvm_paging_mode_hap(v) ) + return; + + p2m =3D p2m_get_nestedp2m(v); + + /* + * This may happen if we've handled VMEXIT_NPF at the same time as a + * nested flush IPI from another CPU. We've got a different P2M so the + * host CR3 needs updating. + */ + if ( svm->ns_vmcb_hostcr3 !=3D vmcb_get_h_cr3(nv->nv_vvmcx) || + vmcb_get_h_cr3(nv->nv_n2vmcx) !=3D + pagetable_get_paddr(p2m_get_pagetable(p2m)) ) + nestedsvm_vmcb_set_nestedp2m(v, nv->nv_vvmcx, nv->nv_n2vmcx); + + nv->stale_np2m =3D false; +} + static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *r= egs) { struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); @@ -516,7 +545,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, stru= ct cpu_user_regs *regs) /* host nested paging + guest nested paging. */ vmcb_set_np(n2vmcb, true); =20 - nestedsvm_vmcb_set_nestedp2m(v, ns_vmcb, n2vmcb); + nsvm_vcpu_update_nestedp2m(v); =20 /* hvm_set_cr3() below sets v->arch.hvm.guest_cr[3] for us. */ rc =3D hvm_set_cr3(ns_vmcb->_cr3, false, true); diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index e6a0edcf71ab..fc447d24d67e 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -2118,6 +2118,8 @@ static void svm_vmexit_do_vmrun(struct cpu_user_regs *regs, struct vcpu *v, uint64_t vmcbaddr) { + int rc; + if ( !nsvm_efer_svm_enabled(v) ) { hvm_inject_hw_exception(X86_EXC_UD, X86_EVENT_NO_EC); @@ -2131,8 +2133,13 @@ svm_vmexit_do_vmrun(struct cpu_user_regs *regs, return; } =20 - vcpu_nestedhvm(v).nv_vmentry_pending =3D 1; - return; + rc =3D nsvm_vcpu_vmrun(v, regs); + if ( rc ) + { + if ( nestedsvm_vcpu_vmexit(v, regs, VMEXIT_INVALID, 0, 0) =3D=3D + NESTEDHVM_VMEXIT_FATALERROR ) + domain_crash(v->domain); + } } =20 static struct page_info * diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-of= fsets.c index baf266ab8013..772d1959e5a5 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -129,6 +129,7 @@ void __dummy__(void) =20 OFFSET(VCPU_nhvm_guestmode, struct vcpu, arch.hvm.nvcpu.nv_guestmode); OFFSET(VCPU_nhvm_p2m, struct vcpu, arch.hvm.nvcpu.nv_p2m); + OFFSET(VCPU_nhvm_stale_np2m, struct vcpu, arch.hvm.nvcpu.stale_np2m); OFFSET(VCPU_nsvm_hap_enabled, struct vcpu, arch.hvm.nvcpu.u.nsvm.ns_ha= p_enabled); BLANK(); #endif --=20 2.34.1 From nobody Thu Sep 24 19:01:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1790155296; cv=pass; d=zohomail.com; s=zohoarc; b=WjBvZPSPWt7JSoPLd98lFGdVSz1b41eZFZK+0nI+mlPpPKVy9VjH9eBLB18ACEuVH78NVc2XeqkYcbHf9BB9seZiglpfG8u/recJZaAI1xso0s8iPddplQekeZyE53BGtGZd6n34dANH7ZHYQRTCwm/6iz4RVomtBImQmPkk9Sg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790155296; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GntJNyGKX+o72A97gHkQ6+ZdCb8ar/MTVXAUW4MR3h4=; b=Xdk87r809WPyZ0kABdXXISK1KtVdPMkeynpSHGwzOFy2C5ZJBkCb68+YU7Vy/j83bgWCJoWofSiuxSEJdDp4hgfvEvXQ4pVt6QBDD8iMHTmJIC8h2jW4GtaZAEBS3wPQ9EECWu5M7ZGn6Rh3z5pCt8gXvwt3Ek23PRm244RBWcw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1790155296369909.3221760920662; Wed, 23 Sep 2026 02:21:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1429927.1652568 (Exim 4.92) (envelope-from ) id 1x9JAK-0004XM-1B; Wed, 23 Sep 2026 09:21:24 +0000 Received: by outflank-mailman (output) from mailman id 1429927.1652568; Wed, 23 Sep 2026 09:21:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAJ-0004XF-Ue; Wed, 23 Sep 2026 09:21:23 +0000 Received: by outflank-mailman (input) for mailman id 1429927; Wed, 23 Sep 2026 09:21:22 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAI-0004Vv-Aj for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 09:21:22 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x9JAH-001WWY-Nt for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 11:21:21 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab39a06-e002-0a2a0a5209dd-0a2a4501e712-32 for ; Wed, 23 Sep 2026 11:21:21 +0200 Received: from [52.101.57.28] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab39a10-5984-0a2a45010019-3465391cae0b-3 for ; Wed, 23 Sep 2026 11:21:21 +0200 Received: from LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) by BL4PR03MB8106.namprd03.prod.outlook.com (2603:10b6:208:591::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.16; Wed, 23 Sep 2026 09:21:19 +0000 Received: from LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c]) by LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c%5]) with mapi id 15.21.0451.014; Wed, 23 Sep 2026 09:21:19 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-Id:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=y7hxGjT1n4EHplx1pcSXpP8ynOLsMTtTW44XPM1nXzjP+s7UfPguNaG/hTvK63cubGNTLJWziDycReNVna3b8zMpq5Uz7uyweYyh9uOjpr63Qx17dgVVEq+OUGQ8qHk7rwK853kKlCQdaoclYUMf9NqTzemq5qpFi9cWAszWrJB9tz5tM1yFW8hQRW+Gfp0MlCyhBewbu9yI7D/l8zdZHxCUt4IKtZQGQPHSR5wL7n4ltMFnrs9AljCo9HcjsujrsukO5SemicEAd7CZvHW+SeTHovBPDfHc9x3uWEHUFcEV381W1OHGdiBvFcfusfFjhfkAokBh1IR1jTB5cIZWDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GntJNyGKX+o72A97gHkQ6+ZdCb8ar/MTVXAUW4MR3h4=; b=MXvwLgbKAsQEiCq6AyTGQHXkLc9jGjIsi06DD0+yVRBJho37cuGASW0JwJzPnMF2SS5FLfeKrKEDZ3noCbIB+VxjDwr+pi+iuEu1do4Ae9yZmOM5o/zO/dLeT35jOjHGMzwOvTZMqdQfw1Sp1Vurjju89C4Kl69kYRirKdeZKa9dcFiNNE06oWZ+O/VJuKC/z3KZKsIONOm5+T2Bk2EUv6v9E0EwTApji4CLxQ9fCUGDgbJG9C/PJoTAAT8VS43Yd/6M81Drf3UlHJ68ofNMbXbqmG6G5VI774rjlLPam2XQ00t1sfYNFgb0jo+5/CmY/cmuGR/claVYFEvkWsVphA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GntJNyGKX+o72A97gHkQ6+ZdCb8ar/MTVXAUW4MR3h4=; b=lvqGp0Mp0QuLYlkPQwcuvLgDpHosqRmW6yiR6zpqtrfN+pj7wa+vYpmyxbnzlf6EzloXMx0Amikovpdt7qQUm1cBfVYnvZyzajPqqHXWhu0wTF+vwQOpJJMCQgRaCL1G4lQIkbM9VjqcovEESP3zRzd1kbvBacjYqh7gnElKn1M= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: chunjie.zhu@citrix.com To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, jason.andryuk@amd.com, teddy.astie@vates.tech, Chunjie Zhu Subject: =?UTF-8?q?=5BPATCH=C2=A0v1=202/5=5D=20x86/nestedsvm=3A=20remove=20nv=5Fvmentry=5Fpending?= Date: Wed, 23 Sep 2026 17:20:42 +0800 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KUZPR04CA0021.apcprd04.prod.outlook.com (2603:1096:d10:25::9) To LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR03MB7609:EE_|BL4PR03MB8106:EE_ X-MS-Office365-Filtering-Correlation-Id: 610ea4d2-b8c8-4c63-c623-08df195406a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|22082099003|56012099006|11063799006|10067099003; X-Microsoft-Antispam-Message-Info: EP9FLdFdg26AJAAxGxhO1iJ7//umdIuL1g73pYOIUk5f56ArOvuhJTHdFZ7PC+XJ8Txclx5Tjfgwnw616zql2WNuAdKBFHblhobnSG6REKW6T68Vb2gPRs8PCtGxx6VJADpxetpuagMi+JvTTyraoF0DT5HfyyhTPv+RXYCuh7uA11U9p/d+hRxsvbYFqucaGWZX+SI3P8GZlmhh5ftogr0S6RN2rHnqo0DMTljB82cgJCoqV1G30F3DVqOT2dqeQmd223IWPtcm/RLMeSkG960TRg3fn+a1m4EyMHPwpe+N5ezvekxiSq1y1wu3JcVqEw/yF0nsxV4CGV11ngMazXRfJYj4LAu0k7oJD/mJ0utHhqV5T47EObdxdHMSoPG+ww7vc+bzB0VzYEMZCcpifdlDvp/461w/bDX+hmdonXyrATNbpwF6/SFeVRtAuGlDmt/FzWepoRdz+AQe/9VrazB+24qImLR1JvHZirl5+wPo7hwtMVPgqCjY3kYRGtQBC6ryvW9O3NmvFwtpKd2mtdAjwpivwtr7w0iiwJE1ODtZYSTvXFmASQDMZotwwDd9f3ByEee7yfGQPbfI5lCZySZEnYNNOB/hsGq1EC3ZPE1RzhSyuEcv0fqBSy9hvlERNzrqxNwytSMREBVEbrZt7/6tjDCGeD9OytHMElYosVg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR03MB7609.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RVNlUFF4UEQ4U2E1T1dGSDhHT0pRYmxISE02UU1Od1FnYU5Ga0lJY1g0ZGVl?= =?utf-8?B?TUZ0Zk91OHU1alQ1bUpuUURPYUdrTk11MnRTSE8wVGQ2QmpVZVlDaEdZT1Vw?= =?utf-8?B?Mmdzd01VeHBudklNQlZXcldmWUZsN1h1cjU2dldHNTF1endLdnhLTDIxcTBm?= =?utf-8?B?em1Ga3Z3R2QxQ1BLdjFsWHlBanhmc21MVXJZTC9VVFJZWFRiVFZSd05xVEQz?= =?utf-8?B?dXNzMC9ndis0SHMxY2EyYlRma2ViRVNudTJtTWFWRUhXM1N6V3dUdUhXejFP?= =?utf-8?B?L2VNZG1HeFhzVGp0NGJBV0h4U3ZFNkFJblNLYkhqVFRwWDRJTmNYd1duaGo0?= =?utf-8?B?b3NkVlZqUGo0RWc4V3FTTU94RWFVMXQ3eEZXQ1Zod25wdTNrYzNhck85NDM2?= =?utf-8?B?RkpvcUUxbE16L0I3cEVMYzBTcEFlMjZjK2ZMM3lLcnVyQVZUMlNGcU91cVVn?= =?utf-8?B?U21rUVdCNnpYSWZMeEJ4L0JtQ25zeDB6L1puWXgrc1dzS2twVWljREVjbGcy?= =?utf-8?B?NjNJWExWTDF5MXo5dHRZeWhFbWJpc1RSaHRnS1VhR3grTzd4dVlZbm8vYktG?= =?utf-8?B?bWhTSC8zKzVIUFBPU2lyZC9Nb1k2TW1kd2Z5KzRTaExOcGR2eGJsamFiZjRO?= =?utf-8?B?dlU3UHBOU05Ya2YzOFFRSWpDNU43YkZIUHNjTUp4VkJHWE1EbWF0VkVnL29X?= =?utf-8?B?WWFNTUUxc0lFOEVSdHhNNjZEa3V1V3h4L28vQ2Q2eDNjMm1XNE5pMml5VFRM?= =?utf-8?B?WGZSZmYvYlAvU2JhNzlmQzRzbEpoMUVWa0MrT2hLOGVScE5GYVJ0U3FiL1V1?= =?utf-8?B?SFhBZnRScGpGRXBMdDBEK0VIZHl2Z0ZYRGtOZ2JuK3NQOGg5NE1xMTFoWWJ0?= =?utf-8?B?ZDZKakZVcWdrV0o4bHdvTmZGZGlQRUpaY0lGNlNQZWJUaGxyeVRqaG1Mb0Fw?= =?utf-8?B?a2dBbkVMU1p5dTRYQjVKbnRlR21BVllDa2hNNyttblIzQy9hbnoxcWx4Yndz?= =?utf-8?B?cWxLY1RKTi94UURSb204K0FNUEIvMkpXSGo1ZkJVb1hFcEZMTnNmSFcwMXZR?= =?utf-8?B?K0d4VVBBdVdvcmkwOEQ3dFkvblVQSFMvZytYdFAyZ1BSeitlRXF3RGc1Y2l0?= =?utf-8?B?dmlWcDBucFpYWEZMVWlqWnUrM1BKd3hNZGRkTWRYMmhDbjE1T2hxUU52aTY2?= =?utf-8?B?a211TW0raEJzKzZhOWt6OWpDRkVKYWI0U3NLU2ZPTllWdVJUQTl1Um5FZkIx?= =?utf-8?B?YXVINFlvNDZlWnE3eHJqdGpSSlcvdVB5M1VMMHpub01JbmgxVVV0SUVDNW5V?= =?utf-8?B?Z1VBV0ZnK2FMRGhDc3NrcEc0RVZzcE5nWHl6K0ptWDlKZUdFT0JXdmRQUG1X?= =?utf-8?B?aStPQXpKUnc3TVhSRGxCK2M5akx2NzZ3YkZhMlBwOXBvSnBRMWF2VFp4N09Y?= =?utf-8?B?eWZPL09ScGhydlRSZVZqTnBNL3JpQmlFOEx4NU5nZGNWUmwxMlE0d2ZKeDVi?= =?utf-8?B?emdBdTJ4bkVVblpDL3hRcGd4eEpDK3dhM1pBMjBFcVptYklLaythQ01EZWpa?= =?utf-8?B?UW5lRzFZcHlLZzdGS2FwMGtrRVZiRXZSWTl1TVdNeEFZMUpvd0llRWtHaldj?= =?utf-8?B?eVNBZ2JkWWhzY1B3eWlOb1BIbVh2NjMvakdKUWJ1ckpFSzFYVUV3UGpBY2tQ?= =?utf-8?B?bkVjbU5SV0xwL2ZBU09jWFVSOG9mN0JwNVZ5NXJlclZKVXJTajU4Z1RmZjF6?= =?utf-8?B?K01Jc3JWTm9DZ0ZBWVNUL3NLdlBTTUpaSjVkOVY2d1hHckpkb0lxVTZ6dC9I?= =?utf-8?B?SnVmZktaaHdJTmZHbWJkQnF3allkOVduMERwSms0WEx5MFlYU0U1NUFZZzQ1?= =?utf-8?B?b3ZXWXRJa1Vad0craURtMUl0UTNJMUpiVnRDalpvUnM3ZU5rcDZyZ2ZsVGdU?= =?utf-8?B?VUdZUVZpZGlLQi9ZVWlFL2g3aHZiS1ZTNjFpSWIyOWg3ZHdkclhBUmV5L3Zk?= =?utf-8?B?SDliaXhIaGIrTjgwM291WkxlOVk0ZjFsTTk4RldVeGFwbHIyZEtiZCtMOUx5?= =?utf-8?B?UVVYbFYwL0ZEWlorMVI1RnFGbVlqOU42ekVUdmhTRk1DUTlZTWV4bUJnVm05?= =?utf-8?B?TUxtU1NoQU5KQ0hidktQYVpzOEhLMlRsQjlDcWRNZDNJaE5qTEFWRUw3VU1K?= =?utf-8?B?Yjh3N1dHNkZ1SlY5Q01GckF6dFNqbGJtSXV0dW56L1JkTEgvRUZtZXFuRyt4?= =?utf-8?B?cEF1QmZjdjhvNVlsRFV3ZG45RlpCazlGaVMzN3Z0N1E1Z2lmUVd6WENDaURp?= =?utf-8?B?SzVQajQ3Q3lOK2VGZVJNTlI1ODM2N3RLbkNhclBtK1JobmJSMk5uQT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 610ea4d2-b8c8-4c63-c623-08df195406a1 X-MS-Exchange-CrossTenant-AuthSource: LV3PR03MB7609.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2026 09:21:19.1961 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yr5d/4M3ntgE6QKDeIlnaW4Y3tav0f2FbTVUWHeCt4qP5VQJ659Cf4KSahcgQN3T91gva/5YAjPJWbKAkkiEjA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR03MB8106 X-purgate-ID: tlsNG-d62444/1790155281-1EA66757-57A7FBCC/0/0 X-purgate-type: clean X-purgate-size: 2512 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1790155297756158500 Content-Type: text/plain; charset="utf-8" From: Chunjie Zhu Signed-off-by: Chunjie Zhu --- xen/arch/x86/hvm/svm/intr.c | 18 ------------------ xen/arch/x86/hvm/svm/nestedsvm.c | 23 ----------------------- 2 files changed, 41 deletions(-) diff --git a/xen/arch/x86/hvm/svm/intr.c b/xen/arch/x86/hvm/svm/intr.c index 4b0debfa9a2e..7f6cafb6db78 100644 --- a/xen/arch/x86/hvm/svm/intr.c +++ b/xen/arch/x86/hvm/svm/intr.c @@ -77,24 +77,6 @@ static void svm_enable_intr_window(struct vcpu *v, struc= t hvm_intack intack) =20 ASSERT(intack.source !=3D hvm_intsrc_none); =20 - if ( nestedhvm_enabled(v->domain) ) - { - struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); - - if ( nv->nv_vmentry_pending ) - { - struct vmcb_struct *gvmcb =3D nv->nv_vvmcx; - - /* check if l1 guest injects interrupt into l2 guest via vintr. - * return here or l2 guest looses interrupts, otherwise. - */ - ASSERT(gvmcb !=3D NULL); - intr =3D vmcb_get_vintr(gvmcb); - if ( intr.fields.irq ) - return; - } - } - TRACE(TRC_HVM_INTR_WINDOW, intack.vector, intack.source, vmcb->event_inj.v ? vmcb->event_inj.vector : -1); =20 diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index 171b32be2416..edb3f444756d 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -1433,31 +1433,8 @@ void asmlinkage nsvm_vcpu_switch(void) vmexit: nestedsvm_vcpu_vmexit(v, regs, svm->ns_vmexit.exitcode); nv->nv_vmexit_pending =3D 0; - nv->nv_vmentry_pending =3D 0; return; } - - if ( nv->nv_vmentry_pending ) - { - int ret; - ASSERT(!nv->nv_vmexit_pending); - ret =3D nsvm_vcpu_vmrun(v, regs); - if ( ret ) - goto vmexit; - - ASSERT(nestedhvm_vcpu_in_guestmode(v)); - nv->nv_vmentry_pending =3D 0; - } - - if ( nestedhvm_vcpu_in_guestmode(v) && nestedhvm_paging_mode_hap(v) ) - { - /* In case left the l2 guest due to a physical interrupt (e.g. IPI) - * that is not for the l1 guest then we continue running the l2 gu= est - * but check if the nestedp2m is still valid. - */ - if ( nv->nv_p2m =3D=3D NULL ) - nestedsvm_vmcb_set_nestedp2m(v, nv->nv_vvmcx, nv->nv_n2vmcx); - } } =20 /* Interrupts, Virtual GIF */ --=20 2.34.1 From nobody Thu Sep 24 19:01:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1790155314; cv=pass; d=zohomail.com; s=zohoarc; b=GWRgWMQcbC4TGfRz8jc+kagg8SKe13MpZNBS3XhmmQ/NcZzL8C3NO+iwtd+knH4i4M9m2E9O3srexotAw7fj0YPfh240JQTxADaV+pM0MelGf673wJsUWk5hhFpMO6QMqQf2tdDKwHZlKmEJTcG4rdP9PtdK0a3wm6NtSZ/26n0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790155314; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8IU4BHlwvEUQATEKce1EuKskCgG/uibOwmDxKxzfdCE=; b=HmTU3eDqopJkAIFDrknH70Jr3QZlF95YitHeTO4WImduM+GjW6hrqS7xrxAlGKR8YA1XO6LzITJqFW3Llj1FolEUnr0e3xaOLxaZnljKeLU7b/UuwPLS2XMLLq/Cf40sBfypB4bk+iF6uNvy0Db2fLCWioQARj04TyVA2Ny+1T4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1790155314557759.4261585257087; Wed, 23 Sep 2026 02:21:54 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1429930.1652576 (Exim 4.92) (envelope-from ) id 1x9JAT-0004wN-91; Wed, 23 Sep 2026 09:21:33 +0000 Received: by outflank-mailman (output) from mailman id 1429930.1652576; Wed, 23 Sep 2026 09:21:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAT-0004wF-66; Wed, 23 Sep 2026 09:21:33 +0000 Received: by outflank-mailman (input) for mailman id 1429930; Wed, 23 Sep 2026 09:21:31 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAR-0004sq-MG for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 09:21:31 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x9JAR-0079J3-36 for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 11:21:31 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab39a15-2eae-0a2a0a5409dd-0a2a450c828e-32 for ; Wed, 23 Sep 2026 11:21:31 +0200 Received: from [40.93.195.57] (helo=SN4PR2101CU001.outbound.protection.outlook.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab39a19-f479-0a2a450c0019-285dc3399e16-3 for ; Wed, 23 Sep 2026 11:21:30 +0200 Received: from LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) by BL4PR03MB8106.namprd03.prod.outlook.com (2603:10b6:208:591::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.16; Wed, 23 Sep 2026 09:21:28 +0000 Received: from LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c]) by LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c%5]) with mapi id 15.21.0451.014; Wed, 23 Sep 2026 09:21:28 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-Id:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Uv/kP8+5dKvRiUe0mtYsU6E5nv3BHkRBS14/SEmSl+O4KN9aR9oJg4moTlDa8SMUSUbTRLsH55u8mHm6gznYnXUhF5+A2+wZLKegFzH2/1BTvr5RQ8pVFERd+3lLV06HltrLBVQVPoSRSL6qndVlQ5ADCSuVXy/X+1zB57L1TDXNqmhjCfSDTiWvMpu53/KPFk1nTXORtFC1L8SeRCwq9So0ISDXMOPhntA95QcIanYWlEugWhIe9NBhaSH1cF3ojswq1Ab4+/9VkBdOsIgRaiUiCqdMZj9kzJQOQhNBeCJA5POfBhKrwScZXZRPMepoTWUNCp42ZXw5l/PeBprpsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8IU4BHlwvEUQATEKce1EuKskCgG/uibOwmDxKxzfdCE=; b=c1VydIVejzKK4rMGX9qxg0YJ5goLqJs5hZwDXwJn6Oo2O/NaOclQDsnSCJdnkeDXvd+2iFsO9zCPmNicLHJblUT0mCs1Z3WjATsskYCgVVXor/+Dnqlou5COJTEMLRMc9VjtTWmpVgJhsFSd03ESP55Ec72wkD7pPGMYT6DNoaAMU8j3bXpJOh7M+Jb3Q4yac2Eq7bMURHxr6LT1meiJhaoL3FUUo+3VqByBeKxwRiC+Y/0sh97uicTs3ClZJh5fPHops8xLvFaKvCnIFGUZO8W1EYPShJ+l+SltcHtVA0qO7zjmewAfg3B7wz1V4TBQht1JHjFlwLCH5Jc29pSndg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8IU4BHlwvEUQATEKce1EuKskCgG/uibOwmDxKxzfdCE=; b=xRsUJZHawXpRYw62TPZWHniM4nf5IVhoR4VU2ZjVHStXSJ6okWUL817mi4miyv3Oz7myQG52w/7oJu/+jXX4ThXFZCAn3XnemB7FCRPQGOcgY48ByPIjyPiV0Nwgwh6x4PaA3pWHidpkv912X9aej3jvkyiw53qTjdNm2WRGzYA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: chunjie.zhu@citrix.com To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, jason.andryuk@amd.com, teddy.astie@vates.tech, Chunjie Zhu Subject: =?UTF-8?q?=5BPATCH=C2=A0v1=203/5=5D=20x86/nestedsvm=3A=20update=20vmexit=20without=20pending=20or=20deferred=20flag?= Date: Wed, 23 Sep 2026 17:20:43 +0800 Message-Id: <3fd01cae3399dd425731c0c2f62b5fdb68071e36.1790146987.git.chunjie.zhu@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KU0P306CA0027.MYSP306.PROD.OUTLOOK.COM (2603:1096:d10:16::7) To LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR03MB7609:EE_|BL4PR03MB8106:EE_ X-MS-Office365-Filtering-Correlation-Id: 29dd6e7d-73b1-49e4-2ad0-08df19540bfe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|22082099003|56012099006|11063799006|10067099003; X-Microsoft-Antispam-Message-Info: GHkDco+qx9cw4b5kl+ueiE/BgAoDI3RfvCkVyrQOmBO4dK9cQ6ASgKZNSdCH6UxN5Ah24z+voBlTprprpu+5riQ8Y9TFsYQBfB+BVAvfXQo5wfIPYAUb2Ly0ZBNWGyVuHsfbeNJ3oYhRVJhqhZ8eGuJQrs+ylJr+bdXeJLsi2GYCF0kQYLtxBQ8Y4nuwo/7M4fPBpRtHCimnohAlTOsNatYlxrZazihC9G338e86OrDKxOSZK+pVXNYmq5obYp04b7Q5NyhERUsGDXSwQqLzNbmbRZS9qKWhhNRLSBHSXUAylYTIB7gEQXzij5BCIj4SnPxC7DmLLJpm0abrHqm9P2SJe8lr9DcBb0mC91/kmLQMAkmHeGwI669oLoSeKIfrWOxCuGF/QdWPLjW/fzwC2m78KlohvuiIds56IudoS9lbIeesGdA5bS6vOlPdwvCe5jo0t66fYmAWBCxowew5NLV7mS4lDnb4iKCwtaqLyqUoChxq8j8KGRcoGWwHrYKE/+qY46mbI4mT5wT0/PHebY/Hye2cjzIYP0palkHJbjpeT8R2q++mVBBnm+99RbnjVC1ZO1qpmaAUtItpx4U/QLr25yuUorUkGHl+2duRNMsYzursb35omr7UPj94SHm+rPNZFLO+Q8ht8kByy3URpps1gIgqMqFnxltrlw4p83s= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR03MB7609.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cldFUk0vQkEwYUdER0FsYlZSdHhvVE1JbXdScjkwUlQvWDliS0crVHlsVjlr?= =?utf-8?B?QldiT0VyRnQ0RHpkQUxGWW9oemswem9MT2xObGFRZUJsSEIzZzVERGQyZlli?= =?utf-8?B?NlZrYXV2QzVwV0RJQ3NUMWJnd1V0MW10K1NDMmg2SGh6QjFrQXdkSGpZTlNh?= =?utf-8?B?S2dYWi96ODZQTHdJWUJRSEE1YjdEdG9FWmx3emlOb0tjQmRYOHVNQitzc2ky?= =?utf-8?B?ZWpjM05zUDI4K0U1cHdUVHdHS3d4c2x4UVdTYXQvcVVBT05jWFAxdmtGUVNI?= =?utf-8?B?YzJrWDB4b203ZnFRNFdody8rTExONmNvL3MzNDRLaXpYclg5dFhtYzJpRC9H?= =?utf-8?B?WldDZ2hIQ3E3d3lhdFp1cW9SMkVnN1c5RUJIa1c1VktVbDE1QVhwSm8vQU9S?= =?utf-8?B?c1hvdzNucmtmYS82cWdlYTdOd2xNTGZIVmRDNHQ0MTBQYVUyK213SDVteGRZ?= =?utf-8?B?c3VEOTYxdVV1TnFnYk4rWXcvWjdLSzliVzcwZU1oUC82bExVVG03K1ZFNGhI?= =?utf-8?B?TzNvdDRtUldpNTBvS1N1VWZFMy92eHp1RDVFbXorMVgyUUNuK2YzWjZDdy9i?= =?utf-8?B?eWZyTDRWU3JVUldydENQWk1aTkJRVmYrdUNFVkd4Zm1SSHZVZzVPSktyWDJI?= =?utf-8?B?UkI3SFNhQ3duVG81WDhwSWlVUWdYaVpEZ0M4OEQ2eVczb2Vpd3lpMjRPZlNJ?= =?utf-8?B?TVFtUUtUdnlxNSt4cVc3NVBGNXAwd21mZXkrazVMQnVwbk5vSGhvZHZINnpK?= =?utf-8?B?eG1ZREFvVkR0aXN0VWtyc0pHUnJwSXhkSmhZRDBucHV4RmhHWnlKMVZFTk1J?= =?utf-8?B?TTdrazB6Lyt1VmlnMjAybzdPSkpaMnB5VTJzcDU4L095Z00zL3lKWExuNEsy?= =?utf-8?B?R0FENTlDOEhZei9hV2h1TVIxeEZFQTNJenFEZWw4ekUyUzlRSTBVK04zc2xV?= =?utf-8?B?M0NOblNPSmZWVFF0eUhCSG4rbC9CV2FPNDlWV1BPdUEyck9TdDZkUUtvRnJY?= =?utf-8?B?ZVpJYUVneHV3NEN2Z0J4alVYeVptc0NMM3doeHhGL2RkNEtMcGJJTHdZSTBy?= =?utf-8?B?cjFidTdFbjgvR3F5K0xETE1lTjRBSzlhVXdXYWd4VHBia3RKc3pBcVZoQU8w?= =?utf-8?B?ZFluSGM2UE9mVDNHaE5Va3VDSnd6VmRvTHdkY1dodXNpWE9jRDJ2ZjkvYjQr?= =?utf-8?B?M2RNdlJkR0VGLytyek8zVVpvUzRySTV3Qys2S1kvNEpHeGRoVXMyMEh3UTVQ?= =?utf-8?B?WC9mcC8zcy8wUW1Nbmt2NEo0ZWYrVDNPaDZNMy9DR1huSWxVVk95cEhMallt?= =?utf-8?B?UUFzUWFPdlBKK3lrVTZ3Q00rZlM4d1hvZG9NTW15dzhPdTRHRkF3Nk9VTUFz?= =?utf-8?B?TXFwaEIzVjd2N0gwd1cwb1NPNFowT3YzVGM1WkZaa1BDMDhzdkhoeThVTlNo?= =?utf-8?B?b2grQXovdi94NGV3NXRwcEU5NlpzZlVaaFRoU1oyZSsyWUp6bVc2R0dpZ0Vq?= =?utf-8?B?MjdnQ2gyVG1ETmFWKzFyYTlvQnI3V3JiUWQyTkUzcDBRd2VpUGNrUHdkeFRt?= =?utf-8?B?eWtJM1FLUHFUZmRtVmFsWVpXWXJPanR2NzRaTE9YVElLNGJnNlc2WlpIT0w5?= =?utf-8?B?eWsyTmNzWWxBT21SNGl4RjhYczdVZTY2Y0ducC9jOUk1R2lMdmd5T04yNzBH?= =?utf-8?B?TU9qVWUyaTF2MXlIMEZYQ2JQTXhFT3BFWkxnSU9SZXcrVGsvZzhFa3hQV1F1?= =?utf-8?B?N0tGS21IU3VWbVZTeFhjNGtpNjhlQWZSTC80M1djcHE0dVJ6NTl4a3NwZWN1?= =?utf-8?B?bjJYd2svRnIvOUZ2ekhCbitSMTIzRXp1RGQ3cmJ1RVZ1cG9ZeHB4bGRNNFZM?= =?utf-8?B?bjZFY3lLZGdXcGhZaU80ak1DK1FvVEZJWGZ0VFlyV1QyVTFEaFVaWm5QRzV1?= =?utf-8?B?dHVzcjViUTJDcXlpbUtTNzNVTmxVRXRoZ0FTU2tZWXRnQldIUkMzNUxLZDdU?= =?utf-8?B?aWdxMGtpTTFkejc1Si9IYzIrR3ZNdzk4NHNiMzB3a0hnS1hSY1BYQlE4Qi96?= =?utf-8?B?eGJLeWJ4RDB2MzhIVTdzNFhGNEZDZGxsWGpiKzhIb2hBSTRORUNxN1kxMVcw?= =?utf-8?B?eHRydG5memx6ZlhvdG1jUGtWdFoxOWRDSFd2TVcyY2prOVBYMmlXY0lORXhJ?= =?utf-8?B?U1IxLzNvVTRtZ1VKL0xONnJuaXF3VFE4TFQ1VXUxcDdkQVN5VWNZaWY5dGkv?= =?utf-8?B?YnliQS90VVlEcmhrdTRnNk8xSzNuSmNaSlpFT01PekxmRGxRekhtbFNEaFBE?= =?utf-8?B?a0Z5b2JScTIzRk9ueUtwRUh3cUJ2REJFZWdZUU5EYmhDbHNic2g2UT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29dd6e7d-73b1-49e4-2ad0-08df19540bfe X-MS-Exchange-CrossTenant-AuthSource: LV3PR03MB7609.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2026 09:21:28.0660 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IuaFT9smi/msam5Eq3kj+bg540+XlIPPD1THl+sOkvnoFCjRPzEbKPALmUbPzDnxG+eqN0lveabevuBDxOMuBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR03MB8106 X-purgate-ID: tlsNG-d25034/1790155291-50D3CA5B-FAA83AA1/0/0 X-purgate-type: clean X-purgate-size: 14296 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1790155315659158500 Content-Type: text/plain; charset="utf-8" From: Chunjie Zhu Signed-off-by: Chunjie Zhu --- xen/arch/x86/hvm/svm/intr.c | 4 +- xen/arch/x86/hvm/svm/nestedhvm.h | 5 +- xen/arch/x86/hvm/svm/nestedsvm.c | 168 ++++++++--------------- xen/arch/x86/hvm/svm/svm.c | 10 +- xen/arch/x86/include/asm/hvm/svm-types.h | 7 - 5 files changed, 72 insertions(+), 122 deletions(-) diff --git a/xen/arch/x86/hvm/svm/intr.c b/xen/arch/x86/hvm/svm/intr.c index 7f6cafb6db78..f9b59a0d6a46 100644 --- a/xen/arch/x86/hvm/svm/intr.c +++ b/xen/arch/x86/hvm/svm/intr.c @@ -55,7 +55,7 @@ static void svm_inject_nmi(struct vcpu *v) vmcb, general1_intercepts | GENERAL1_INTERCEPT_IRET); } =20 -static void svm_inject_intr(struct vcpu *v, int vector) +void svm_inject_intr(struct vcpu *v, int vector) { struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; intinfo_t event; @@ -69,7 +69,7 @@ static void svm_inject_intr(struct vcpu *v, int vector) vmcb->event_inj =3D event; } =20 -static void svm_enable_intr_window(struct vcpu *v, struct hvm_intack intac= k) +void svm_enable_intr_window(struct vcpu *v, struct hvm_intack intack) { struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; uint32_t general1_intercepts =3D vmcb_get_general1_intercepts(vmcb); diff --git a/xen/arch/x86/hvm/svm/nestedhvm.h b/xen/arch/x86/hvm/svm/nested= hvm.h index e22ef259c171..5876a948f39a 100644 --- a/xen/arch/x86/hvm/svm/nestedhvm.h +++ b/xen/arch/x86/hvm/svm/nestedhvm.h @@ -27,7 +27,8 @@ (!!((v)->arch.hvm.guest_efer & EFER_SVME)) =20 int nestedsvm_vmcb_map(struct vcpu *v, uint64_t vmcbaddr); -void nestedsvm_vmexit_defer(struct vcpu *v, +enum nestedhvm_vmexits +nestedsvm_vcpu_vmexit(struct vcpu *v, struct cpu_user_regs *regs, uint64_t exitcode, uint64_t exitinfo1, uint64_t exitinfo2); enum nestedhvm_vmexits nestedsvm_vmexit_n2n1(struct vcpu *v, struct cpu_user_regs *regs); @@ -65,6 +66,8 @@ int cf_check nsvm_hap_walk_L1_p2m( #define NSVM_INTR_MASKED 0 =20 int nestedsvm_vcpu_interrupt(struct vcpu *v, const struct hvm_intack intac= k); +void svm_enable_intr_window(struct vcpu *v, struct hvm_intack intack); +void svm_inject_intr(struct vcpu *v, int vector); =20 #endif /* __X86_HVM_SVM_NESTEDHVM_PRIV_H__ */ =20 diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index edb3f444756d..9e5e804a5b00 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -152,8 +152,6 @@ int cf_check nsvm_vcpu_reset(struct vcpu *v) svm->ns_vmcb_hostcr3 =3D 0; svm->ns_asid =3D 0; svm->ns_hostflags.bytes =3D 0; - svm->ns_vmexit.exitinfo1 =3D 0; - svm->ns_vmexit.exitinfo2 =3D 0; =20 svm->ns_iomap =3D NULL; =20 @@ -712,14 +710,10 @@ nsvm_vcpu_vmrun(struct vcpu *v, struct cpu_user_regs = *regs) int ret; unsigned int inst_len; struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); - struct nestedsvm *svm =3D &vcpu_nestedsvm(v); =20 inst_len =3D svm_get_insn_len(v, INSTR_VMRUN); if ( inst_len =3D=3D 0 ) - { - svm->ns_vmexit.exitcode =3D VMEXIT_SHUTDOWN; return -1; - } =20 nv->nv_vmswitch_in_progress =3D 1; ASSERT(nv->nv_vvmcx !=3D NULL); @@ -738,15 +732,10 @@ nsvm_vcpu_vmrun(struct vcpu *v, struct cpu_user_regs = *regs) break; case NSVM_ERROR_VVMCB: gdprintk(XENLOG_ERR, "inject VMEXIT(INVALID)\n"); - svm->ns_vmexit.exitcode =3D VMEXIT_INVALID; return -1; case NSVM_ERROR_VMENTRY: default: - gdprintk(XENLOG_ERR, - "nsvm_vcpu_vmentry failed, injecting #UD\n"); - hvm_inject_hw_exception(X86_EXC_UD, X86_EVENT_NO_EC); - /* Must happen after hvm_inject_hw_exception or it doesn't work ri= ght. */ - nv->nv_vmswitch_in_progress =3D 0; + gdprintk(XENLOG_ERR, "nsvm_vcpu_vmentry failed\n"); return 1; } =20 @@ -760,47 +749,55 @@ nsvm_vcpu_vmrun(struct vcpu *v, struct cpu_user_regs = *regs) =20 static int nsvm_vcpu_vmexit_inject(struct vcpu *v, struct cpu_user_regs *regs, - uint64_t exitcode) + uint64_t exitcode, uint64_t exitinfo1, uint64_t exitinfo2) { struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); - struct nestedsvm *svm =3D &vcpu_nestedsvm(v); struct vmcb_struct *ns_vmcb; struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; =20 - if ( vmcb->_vintr.fields.vgif_enable ) + ASSERT(vmcb->_vintr.fields.vgif_enable); vmcb->_vintr.fields.vgif =3D 0; - else - svm->ns_gif =3D 0; =20 ns_vmcb =3D nv->nv_vvmcx; =20 - if ( nv->nv_vmexit_pending ) + switch ( exitcode ) + { + case VMEXIT_INTR: { - switch ( exitcode ) + struct hvm_intack intack =3D { + .source =3D exitinfo1, + .vector =3D exitinfo2 + }; + + /* See the comment in svm_intr_assist() for why this is necessary = */ + if ( unlikely(vmcb->event_inj.v) || + hvm_interrupt_blocked(v, intack) ) { - case VMEXIT_INTR: - if ( unlikely(ns_vmcb->event_inj.v) && nv->nv_vmentry_pending = && - hvm_event_needs_reinjection(ns_vmcb->event_inj.type, - ns_vmcb->event_inj.vector) ) - ns_vmcb->exit_int_info =3D ns_vmcb->event_inj; - break; - case VMEXIT_EXCEPTION_PF: - ns_vmcb->_cr2 =3D ns_vmcb->ei.exc.cr2; - fallthrough; - case VMEXIT_NPF: - ns_vmcb->exitinfo2 =3D svm->ns_vmexit.exitinfo2; - fallthrough; - case VMEXIT_EXCEPTION_NP: - case VMEXIT_EXCEPTION_SS: - case VMEXIT_EXCEPTION_GP: - case VMEXIT_EXCEPTION_15: - case VMEXIT_EXCEPTION_MF: - case VMEXIT_EXCEPTION_AC: - ns_vmcb->exitinfo1 =3D svm->ns_vmexit.exitinfo1; - break; - default: + svm_enable_intr_window(v, intack); break; } + + svm_inject_intr(v, intack.vector); + pt_intr_post(v, intack); + break; + } + + case VMEXIT_EXCEPTION_PF: + ns_vmcb->_cr2 =3D exitinfo2; + fallthrough; + case VMEXIT_NPF: + ns_vmcb->exitinfo2 =3D exitinfo2; + fallthrough; + case VMEXIT_EXCEPTION_NP: + case VMEXIT_EXCEPTION_SS: + case VMEXIT_EXCEPTION_GP: + case VMEXIT_EXCEPTION_15: + case VMEXIT_EXCEPTION_MF: + case VMEXIT_EXCEPTION_AC: + ns_vmcb->exitinfo1 =3D exitinfo1; + break; + default: + break; } =20 ns_vmcb->exitcode =3D exitcode; @@ -811,10 +808,16 @@ nsvm_vcpu_vmexit_inject(struct vcpu *v, struct cpu_us= er_regs *regs, int cf_check nsvm_vcpu_vmexit_event( struct vcpu *v, const struct x86_event *event) { + enum nestedhvm_vmexits ret; + ASSERT(vcpu_nestedhvm(v).nv_vvmcx !=3D NULL); =20 - nestedsvm_vmexit_defer(v, VMEXIT_EXCEPTION_DE + event->vector, - event->error_code, event->data); + ret =3D nestedsvm_vcpu_vmexit(v, guest_cpu_user_regs(), + VMEXIT_EXCEPTION_DE + event->vector, + event->error_code, event->data); + if ( ret =3D=3D NESTEDHVM_VMEXIT_FATALERROR ) + domain_crash(v->domain); + return NESTEDHVM_VMEXIT_DONE; } =20 @@ -1219,7 +1222,7 @@ enum hvm_intblk cf_check nsvm_intr_blocked(struct vcp= u *v) if ( v->io.req.state !=3D STATE_IOREQ_NONE ) return hvm_intblk_shadow; =20 - if ( !nv->nv_vmexit_pending && n2vmcb->exit_int_info.v ) + if ( n2vmcb->exit_int_info.v ) { /* Give the l2 guest a chance to finish the delivery of * the last injected interrupt or exception before we @@ -1228,42 +1231,15 @@ enum hvm_intblk cf_check nsvm_intr_blocked(struct v= cpu *v) return hvm_intblk_shadow; } } - - if ( nv->nv_vmexit_pending ) - /* hvm_inject_hw_exception() must have run before. - * exceptions have higher priority than interrupts. - */ - return hvm_intblk_rflags_ie; - return hvm_intblk_none; } =20 -/* VMEXIT emulation */ -void -nestedsvm_vmexit_defer(struct vcpu *v, - uint64_t exitcode, uint64_t exitinfo1, uint64_t exitinfo2) -{ - struct nestedsvm *svm =3D &vcpu_nestedsvm(v); - struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; - - if ( vmcb->_vintr.fields.vgif_enable ) - vmcb->_vintr.fields.vgif =3D 0; - else - svm->ns_gif =3D 0; - - svm->ns_vmexit.exitcode =3D exitcode; - svm->ns_vmexit.exitinfo1 =3D exitinfo1; - svm->ns_vmexit.exitinfo2 =3D exitinfo2; - vcpu_nestedhvm(v).nv_vmexit_pending =3D 1; -} - enum nestedhvm_vmexits nestedsvm_check_intercepts(struct vcpu *v, struct cpu_user_regs *regs, uint64_t exitcode) { bool is_intercepted; =20 - ASSERT(vcpu_nestedhvm(v).nv_vmexit_pending =3D=3D 0); is_intercepted =3D nsvm_vmcb_guest_intercepts_exitcode(v, regs, exitco= de); =20 /*=20 @@ -1352,11 +1328,12 @@ nestedsvm_vmexit_n2n1(struct vcpu *v, struct cpu_us= er_regs *regs) /* The exitcode is in native SVM/VMX format. The forced exitcode * is in generic format. */ -static enum nestedhvm_vmexits +enum nestedhvm_vmexits nestedsvm_vcpu_vmexit(struct vcpu *v, struct cpu_user_regs *regs, - uint64_t exitcode) + uint64_t exitcode, uint64_t exitinfo1, uint64_t exitinfo2) { int rc; + enum nestedhvm_vmexits ret =3D NESTEDHVM_VMEXIT_DONE; struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); =20 nv->nv_vmswitch_in_progress =3D 1; @@ -1368,14 +1345,12 @@ nestedsvm_vcpu_vmexit(struct vcpu *v, struct cpu_us= er_regs *regs, */ if ( nestedhvm_vcpu_in_guestmode(v) ) { - enum nestedhvm_vmexits ret; - ret =3D nestedsvm_vmexit_n2n1(v, regs); switch ( ret ) { case NESTEDHVM_VMEXIT_FATALERROR: gdprintk(XENLOG_ERR, "VMEXIT: fatal error\n"); - return ret; + goto out; case NESTEDHVM_VMEXIT_HOST: BUG(); =20 @@ -1395,46 +1370,18 @@ nestedsvm_vcpu_vmexit(struct vcpu *v, struct cpu_us= er_regs *regs, /* Prepare for running the l1 guest. Make the actual * modifications to the virtual VMCB/VMCS. */ - rc =3D nsvm_vcpu_vmexit_inject(v, regs, exitcode); + rc =3D nsvm_vcpu_vmexit_inject(v, regs, exitcode, exitinfo1, exitinfo2= ); =20 /* If l1 guest uses shadow paging, update the paging mode. */ if ( !nestedhvm_paging_mode_hap(v) ) paging_update_paging_modes(v); =20 - nv->nv_vmswitch_in_progress =3D 0; - if ( rc ) - return NESTEDHVM_VMEXIT_FATALERROR; - - return NESTEDHVM_VMEXIT_DONE; -} - -/* VCPU switch */ -void asmlinkage nsvm_vcpu_switch(void) -{ - struct cpu_user_regs *regs =3D guest_cpu_user_regs(); - struct vcpu *v =3D current; - struct nestedvcpu *nv; - struct nestedsvm *svm; - - if ( !nestedhvm_enabled(v->domain) ) - return; - - nv =3D &vcpu_nestedhvm(v); - svm =3D &vcpu_nestedsvm(v); - ASSERT(v->arch.hvm.svm.vmcb !=3D NULL); - ASSERT(nv->nv_n1vmcx !=3D NULL); - ASSERT(nv->nv_n2vmcx !=3D NULL); - ASSERT(nv->nv_n1vmcx_pa !=3D INVALID_PADDR); - ASSERT(nv->nv_n2vmcx_pa !=3D INVALID_PADDR); + ret =3D NESTEDHVM_VMEXIT_FATALERROR; =20 - if ( nv->nv_vmexit_pending ) - { - vmexit: - nestedsvm_vcpu_vmexit(v, regs, svm->ns_vmexit.exitcode); - nv->nv_vmexit_pending =3D 0; - return; - } +out: + nv->nv_vmswitch_in_progress =3D 0; + return ret; } =20 /* Interrupts, Virtual GIF */ @@ -1477,7 +1424,10 @@ nestedsvm_vcpu_interrupt(struct vcpu *v, const struc= t hvm_intack intack) guest_cpu_user_regs(), exitcode); if ( ret ) { - nestedsvm_vmexit_defer(v, exitcode, intack.source, exitinfo2); + ret =3D nestedsvm_vcpu_vmexit(v, guest_cpu_user_regs(), exitcode, + intack.source, exitinfo2); + if ( ret =3D=3D NESTEDHVM_VMEXIT_FATALERROR ) + domain_crash(v->domain); return NSVM_INTR_FORCEVMEXIT; } =20 diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index fc447d24d67e..a8d258aa3980 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -1619,7 +1619,9 @@ static void svm_do_nested_pgfault(struct vcpu *v, case -1: ASSERT(nestedhvm_enabled(v->domain) && nestedhvm_vcpu_in_guestmode= (v)); /* inject #VMEXIT(NPF) into guest. */ - nestedsvm_vmexit_defer(v, VMEXIT_NPF, pfec, gpa); + if ( nestedsvm_vcpu_vmexit(v, regs, VMEXIT_NPF, pfec, gpa) =3D=3D + NESTEDHVM_VMEXIT_FATALERROR ) + domain_crash(v->domain); return; } =20 @@ -2595,8 +2597,10 @@ void asmlinkage svm_vmexit_handler(void) switch ( nsret ) { case NESTEDHVM_VMEXIT_DONE: - /* defer VMEXIT injection */ - nestedsvm_vmexit_defer(v, exit_reason, exitinfo1, exitinfo= 2); + nsret =3D nestedsvm_vcpu_vmexit(v, regs, exit_reason, + exitinfo1, exitinfo2); + if ( nsret =3D=3D NESTEDHVM_VMEXIT_FATALERROR ) + domain_crash(v->domain); goto out; case NESTEDHVM_VMEXIT_FATALERROR: gdprintk(XENLOG_ERR, "unexpected nestedsvm_vmexit() error\= n"); diff --git a/xen/arch/x86/include/asm/hvm/svm-types.h b/xen/arch/x86/includ= e/asm/hvm/svm-types.h index beab9a3af203..256bf5b91402 100644 --- a/xen/arch/x86/include/asm/hvm/svm-types.h +++ b/xen/arch/x86/include/asm/hvm/svm-types.h @@ -69,13 +69,6 @@ struct nestedsvm { bool ns_gif; bool ns_hap_enabled; =20 - /* Only meaningful when vmexit_pending flag is set */ - struct { - uint64_t exitcode; /* native exitcode to inject into l1 guest */ - uint64_t exitinfo1; /* additional information to the exitcode */ - uint64_t exitinfo2; /* additional information to the exitcode */ - } ns_vmexit; - union { uint32_t bytes; struct { --=20 2.34.1 From nobody Thu Sep 24 19:01:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1790155312; cv=pass; d=zohomail.com; s=zohoarc; b=LIR9WBQAcvbLpF/ialkm0CRbgFPd3QQ8PcSKNOMNygmmROjB7WPQ5nV2GpM9nHdrxRG4AVsb9ovytJB4u5NFmcj2VakVbXnD2rGiHs12Ki7CJ0BFjJLzY9I/wt8HdjYQ4Q+MsW4T6ol+DGf6z5rGfGcaJJ4gOc/GcAAIltcyXkk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790155312; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=c0G5DFHvfT3OxxH3EakjBBKP8uv26iIDoAqt94XNIBo=; b=k9Y3fiLm6rs39bqXvmdz0WaeXSAhc8uvACUAZmeVigPtzKSJdKjRIazyvINq2PbpqLTxBWrTbIgOuq9yjluhob4B22glj0Q4F40kea79b3KHrvCggWgpRdU5RdBLiwOGkwzuzs4Hcv8xISuPPBqCJjbJGpNolx6z3wLu8WR9V2o= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1790155312645779.943482158927; Wed, 23 Sep 2026 02:21:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1429936.1652586 (Exim 4.92) (envelope-from ) id 1x9JAZ-0005NW-Ma; Wed, 23 Sep 2026 09:21:39 +0000 Received: by outflank-mailman (output) from mailman id 1429936.1652586; Wed, 23 Sep 2026 09:21:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAZ-0005NA-Is; Wed, 23 Sep 2026 09:21:39 +0000 Received: by outflank-mailman (input) for mailman id 1429936; Wed, 23 Sep 2026 09:21:38 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAY-0005IS-Fr for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 09:21:38 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x9JAX-0017u4-SU for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 11:21:37 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab39a1d-bab6-0a2a0a5309dd-0a2a450c829e-12 for ; Wed, 23 Sep 2026 11:21:37 +0200 Received: from [52.101.57.2] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab39a20-f479-0a2a450c0019-346539026ed6-3 for ; Wed, 23 Sep 2026 11:21:37 +0200 Received: from LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) by BL4PR03MB8106.namprd03.prod.outlook.com (2603:10b6:208:591::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.16; Wed, 23 Sep 2026 09:21:35 +0000 Received: from LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c]) by LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c%5]) with mapi id 15.21.0451.014; Wed, 23 Sep 2026 09:21:35 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-Id:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oB8xzTn5m48EtYiUi9N+tYqbbTv8e7uzFakRrSIWtmiLG/K6IoDp7Z31zCGYdYSPN7rnWY7TWSdl1pjngaHyyzuGzvedVa3mgOrjZaDDCgIdnqCNL/iyRbaSh8gNlNZ0e66SRH2gxJyxUuQBLbwqeWcMLncMQsBdZlCr8Czns/FAHhfQpUbxf6H5CreY18aYw9/2rUVoQfUASUkDFuZyjCf7TFnMLCARnYWn3Y27dHy8ZSrXY5IFj2EWQzbKMI9j38bR2wItElJSqjG4tF81NWK9gOYeFL+MPa3Gc5k+49CI/C4P6xEwB7P7boagiPQg3LFLckMCcjOaGmjnVnDh6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=c0G5DFHvfT3OxxH3EakjBBKP8uv26iIDoAqt94XNIBo=; b=roy0obYufjH+LX15/CI78RIdU4iOriNQmSe8Cf/lPDUoQO7rXgOizUFojNi1qJunxfuqfTz7VCeuVyuwW3iYVykGNghJAJazXH/X6VklwF7fO3E2wWoPgrCtTAta1eOe7Khqwry0ADvccBXMuxS3Mk6p1yJcQKNOs8lWVIT9E0YrnwzOzWoyayZXYGtohdxR3TCuEEN/X7md+LVQSoX09f2hAjjpBN33ZXRw1hme4mgSoWQV7Pk4953Wpcv6QivzjogufiG003e+CBn7TeXVEWm9l2PEnNFLMfZ5WaBA+am8VLLdi2LF1cAGgWyaPGfyxoNF7MhI5D73+rndmyURmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=c0G5DFHvfT3OxxH3EakjBBKP8uv26iIDoAqt94XNIBo=; b=kA79D9UYM8qw+QE55lT6QwT9bRuap7ih9YM7H6nTwxUQo1eFrNJ3ajngMksWgIO4QjQJzx7lv9BMqMfOJnKFI7JFuYb35b+MeyhCAa0WvCtQ6JtPFOZr+VoYJoH/G4Q4k3dgVXe2jKYfVAk5/eeselutcpT1eDqc2dXfpqjmHnM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: chunjie.zhu@citrix.com To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, jason.andryuk@amd.com, teddy.astie@vates.tech, Chunjie Zhu Subject: =?UTF-8?q?=5BPATCH=C2=A0v1=204/5=5D=20x86/nestedsvm=3A=20update=20vmcb=20correctly?= Date: Wed, 23 Sep 2026 17:20:44 +0800 Message-Id: <293d4fce5adc8b4a7f8e9e2700ecaee988ac803c.1790146987.git.chunjie.zhu@citrix.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KL1PR0401CA0034.apcprd04.prod.outlook.com (2603:1096:820:e::21) To LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR03MB7609:EE_|BL4PR03MB8106:EE_ X-MS-Office365-Filtering-Correlation-Id: 9be20fbe-389d-40f2-f23f-08df19541065 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|22082099003|56012099006|11063799006|5023799004|10067099003; X-Microsoft-Antispam-Message-Info: 4lOAWRITY+UDSE69gr0ZFuK+spQTbEsoGnUanMt0Qb+qXG/NIFs3ftPr8CXEvKZVVro7notdN2wbQGwo+IR9MHkDkiY6sNRNUaytqMipDaP2dftEx9fDyEz5wylTKXFKRVQVrZwMbzE4NrhR0vGucaxIBRu9yHZGWxcaCTpeFg/fv1oijIu+VTah79BbGpVfaIrVijv86JrR1NV6kiViK9+GLl3ZNtN7ZVe5afIL/8yS6xKk68aqRoJMN3gvyPqRI2llGJiJ0L67Z20R+XsjbXFMDhgryiZUKH3TxKG9KA4zZqBCEWqtoJpisPh1Q8U9mLJam3gLQ2YtVWnc1TEN6faaZ12trJgW87xSvR0gLpLHTPrMGKl0k6MW4fxE7y3tXh8I/kqYYOHXzneTZ3IG8PEAcVBNTH1JJbX1zG1GL8daY60JMPa0jRYFXLtr/tR3ErknUyg/vFmMsL4tT2uRzEplD23Y1UIEy3tLocJeu24zvULv3TufwbUf+eFZGvxhvQFzfIe2pyykxdG7HGg8a8rW85tsNWYoqtwLbKNn++GjWX/40w0RZ8/bMCU3T9cAV8zydzHNcJfbu2jM2bVStSD2obi1kdEIlQr27OEmwpD7za09bxNFLm54EuPxd/8RFhMEw5EaXMBMEyQcuGyttMo32MHl6I7P1pS18JbuAtU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR03MB7609.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(5023799004)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aGhUTEFZZk11NVJuZWcyejMrdHQvWklHVXZaRmE4NjQza1BrSUxXaGVNdlVr?= =?utf-8?B?NmRwZkxraFpaWk1JZ0NpclhlbEFjaFYyWnBLVmFTWGhjd2lJdUdJTVBPaDlh?= =?utf-8?B?NlRLcWtrTCtPUkpUVkVhWnNnUjJvcHhWYVZvbkdmQkNodXBKVFdwcHh1azQ3?= =?utf-8?B?djhrNjBnN1dBWHhodGNEdk11Nmowd2dkdnh0UWJQNFBLMkpmOXdydDBBUUJ2?= =?utf-8?B?ZTVJVlVjVUgxOHB0M2h3UnNtVktpcEduNk1tOGNMNzc2TFFqbC9lMlVkQnR5?= =?utf-8?B?NFlHeCtkL1h0VE1XQTd4azExK1l5dEprblg4cEprWGExTzV1Z1A1OTF1UlZ1?= =?utf-8?B?V1JPWmpTczJTajZCQnREcWRKcXVNTlBaa3BYN2dta3UzeHZMQ1lvaWs2Z0ZF?= =?utf-8?B?Nkpydlhla2Z2MkdZbzB2RjdUZWh1S2JFa0QyUC9kaVcySjRWYUxPM1g0VlZl?= =?utf-8?B?VytoZG5pNW16Zm5EQW1kcndQVEU5US9pQkhGaWM0OGN2UHNNL1llMzNxYWZP?= =?utf-8?B?RFpoOWNtSWNETDBXNlQ1Mk5EOGRNbmJHVWptbzAyczFLU2NZZnVRQXRyMnlv?= =?utf-8?B?UVBQZWk0TDVuVHdONzV1V0JCWnc2SExieUQrSTRlTWlLM25iSmtPdDRpMkNH?= =?utf-8?B?QlA5YXBLODhudEN0eHVDRm1yK3Y1a1AxMkFLMFVNVmFBUHJLWjVGSHJZRDQ2?= =?utf-8?B?aUdqMTh3dHVwVlo3aG9ndkFYQmVSbFdwb2Yzbkt4N3VDeDZIUkpjQ2ZtRGJn?= =?utf-8?B?cVpqRUtpVVd1eWwxWFI0dEoweklRTTlVZ3drU2tqTUJrSWFua09tU3NGejA3?= =?utf-8?B?SWxWM0h4VDh6dlBMQlVqTlhNMGlNai9WSnpGWlluSWkwTFc2ZFV4azQ0bUp5?= =?utf-8?B?TlNCWFZlWGVQTzVubVhnMUpkOVE4VXFiNXRrZUVJZi9wSTB5OGxpSXByamtC?= =?utf-8?B?SHY0UFIyeWQxRzI0bERTK1dIaXlhREJSNHF0amlXdldhL2FSWkNxTjhkNFRj?= =?utf-8?B?RTdjcUlleWdqZUhRSHVVVlE0STRiMjdISkFtL251T2k2ZjN0SEhBS3V6YXVr?= =?utf-8?B?NWxFVjVKWU5aT3NCYVh6L1hpNG5STzArTWl1azVNRXZCV3Y5OERweTBjamdJ?= =?utf-8?B?NzZkNUl4TXFKRGlnM2xsMVZtUHl6YkJ2bXJqSVVOU1JsN2cxaDVTUkRCc0ZH?= =?utf-8?B?Ymg3b0tTNDRKdFRqREc3bTNsSjZGRzM5akEwZVF2ZndtT1BINW5mR1J6aFVW?= =?utf-8?B?UGhralZiRGMweUUzS0U1QUl2c1g0blBaU2FIZmdVUEI1R1ZQRXNrR0hORUVm?= =?utf-8?B?WFpUdzI4MWsvTUVQTk50czhpbjVMeFVoUG9ZSUxaSnp1QWVzR3Z3anQyK1V4?= =?utf-8?B?WjRJQ2xIREJWTGVnQ3p2Tlhkb05WK00vUE5ydFFYd0ZsVnRWTGd2NHNvcURD?= =?utf-8?B?aTFKSXJ2Zyt1Vi9QL1N1Y0FINENmQ0c0Y084VU9qRlVESjk5d3F4aDFYZ3E3?= =?utf-8?B?UUxjNjd5OWg0K3hSNUVQUFFVRkw2ajZJSWxLbjN5ZUZGWGNUMUZWWlQxSGs1?= =?utf-8?B?R2pzQ00yL1ZZa0ZSY0Fyd2Q1VldMZER1M1BKQ1VxKy83VUtLelh4YWEyNEpt?= =?utf-8?B?OE5DekkyYnI2cVpQdnpoMmtkbS9YZUZtL2lRczBnYUhUSkpTeGVPQWNuYlZV?= =?utf-8?B?eDZPNWp6ZlFZQm95L3lKcXVjZVhuWmppM053bkJZZkVwaFIwNSt0azgxV1lC?= =?utf-8?B?STNid3liTHFvVXFIZjFBZjJoS3VjL0dPQ1N0QU5rNGEyRENaVUlTZnFDZXpp?= =?utf-8?B?RVVpYmZzTkdvbkVQR2Jpb3NxL3ZPSlpnY25VUTJEMjJ5OEpKRkpVbmJCQTgw?= =?utf-8?B?TDdzQ3JTUUNMRlY2dnhMdCtNYWloWHhJVUszNlF3L09jSFVlNWdiT1JtSEEr?= =?utf-8?B?YWxwcjhNRWtyRWhNVmxEMHF3WS9YMGZNUEJlWk5HWjJxWXRReDMrTHYyN0RV?= =?utf-8?B?cHpmV2c5cm4vVkN1UG9RQmwvZWx2QVdacEtIOEc4MnAySm9CQXBxcVFaRWNS?= =?utf-8?B?WWloZHBEMElZZUtLM3h2TXplb1pUWFpmYXhvbXJqSWVOcG5EOHNuSWhvQkxk?= =?utf-8?B?RjZlMWJncy96S01aZzF4SkY1K3JQc2tFcEZvWFJveDIzRkVBNzFGRFNsd09l?= =?utf-8?B?YS83dHBBbTdKNVduZFZ1Z1dYdnZqTkppZUhlNzFETnhubmg4OWpNWDIvSHdn?= =?utf-8?B?VThEcXByNXZUdjlCT0k0aXh0MXdVcVhPdVpJT2RLcnc5ZXYra3dxbkt1ckpt?= =?utf-8?B?aitZZ1M5NVk5MjFuMUZyWG5GYWduWVZlSEtGcGZ3VmpxeEFZRVRMdz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9be20fbe-389d-40f2-f23f-08df19541065 X-MS-Exchange-CrossTenant-AuthSource: LV3PR03MB7609.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2026 09:21:35.4537 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: v4r7GZj/MvflqtvuAfnDYplFsLbaXf6DjFZ1yNB0Z+qq1AsjFXKa+nPCUSc7igWfa5jnWbqAixqChq2VadhBKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR03MB8106 X-purgate-ID: tlsNG-d25034/1790155297-034D7A5B-861885D8/0/0 X-purgate-type: clean X-purgate-size: 13662 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1790155313730158500 Content-Type: text/plain; charset="utf-8" From: Chunjie Zhu Signed-off-by: Chunjie Zhu --- xen/arch/x86/hvm/svm/nestedsvm.c | 100 ++++++++++++++++------- xen/arch/x86/hvm/svm/svm.c | 4 + xen/arch/x86/hvm/svm/vmcb.c | 3 + xen/arch/x86/hvm/svm/vmcb.h | 6 ++ xen/arch/x86/include/asm/hvm/svm-types.h | 2 +- xen/arch/x86/include/asm/msr-index.h | 1 + 6 files changed, 87 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index 9e5e804a5b00..82e01e513e69 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -146,16 +146,15 @@ int cf_check nsvm_vcpu_reset(struct vcpu *v) svm->ns_exception_intercepts =3D 0; svm->ns_general1_intercepts =3D 0; svm->ns_general2_intercepts =3D 0; + svm->ns_general3_intercepts =3D 0; =20 svm->ns_hap_enabled =3D 0; svm->ns_vmcb_guestcr3 =3D 0; svm->ns_vmcb_hostcr3 =3D 0; svm->ns_asid =3D 0; svm->ns_hostflags.bytes =3D 0; - svm->ns_iomap =3D NULL; =20 - svm->ns_gif =3D 1; return 0; } =20 @@ -416,6 +415,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, stru= ct cpu_user_regs *regs) svm->ns_exception_intercepts =3D ns_vmcb->_exception_intercepts; svm->ns_general1_intercepts =3D ns_vmcb->_general1_intercepts; svm->ns_general2_intercepts =3D ns_vmcb->_general2_intercepts; + svm->ns_general3_intercepts =3D ns_vmcb->_general3_intercepts; } =20 /* We could track the cleanbits of the n1vmcb from @@ -444,6 +444,8 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, stru= ct cpu_user_regs *regs) n1vmcb->_general1_intercepts | ns_vmcb->_general1_intercepts; n2vmcb->_general2_intercepts =3D n1vmcb->_general2_intercepts | ns_vmcb->_general2_intercepts; + n2vmcb->_general3_intercepts =3D + n1vmcb->_general3_intercepts | ns_vmcb->_general3_intercepts; =20 /* Nested Pause Filter */ if ( ns_vmcb->_general1_intercepts & GENERAL1_INTERCEPT_PAUSE ) @@ -472,6 +474,17 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, str= uct cpu_user_regs *regs) n2vmcb->_vintr.fields.intr_masking =3D 1; } =20 + /* + * If L1 granted its L2 vGIF, the copy above already carried the enable + * and the GIF through. Otherwise seed it set, as a VMRUN of a guest + * without vGIF starts with GIF set (APM vol.2 15.5). + */ + if ( !ns_vmcb->_vintr.fields.vgif_enable ) + { + n2vmcb->_vintr.fields.vgif_enable =3D 1; + n2vmcb->_vintr.fields.vgif =3D 1; + } + /* Interrupt state */ n2vmcb->int_stat =3D ns_vmcb->int_stat; =20 @@ -487,7 +500,8 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, stru= ct cpu_user_regs *regs) n2vmcb->virt_ext.bytes =3D n1vmcb->virt_ext.bytes | ns_vmcb->virt_ext.bytes; =20 - /* NextRIP - only evaluated on #VMEXIT. */ + /* NextRIP is consumed by VMRUN as the return address for injected sof= t events. */ + n2vmcb->nextrip =3D ns_vmcb->nextrip; =20 /* * VMCB Save State Area @@ -652,10 +666,12 @@ nsvm_vcpu_vmentry(struct vcpu *v, struct cpu_user_reg= s *regs, int ret; struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); struct nestedsvm *svm =3D &vcpu_nestedsvm(v); - struct vmcb_struct *ns_vmcb; + struct vmcb_struct *ns_vmcb, *n1vmcb; =20 ns_vmcb =3D nv->nv_vvmcx; + n1vmcb =3D nv->nv_n1vmcx; ASSERT(ns_vmcb !=3D NULL); + ASSERT(n1vmcb !=3D NULL); ASSERT(nv->nv_n2vmcx !=3D NULL); ASSERT(nv->nv_n2vmcx_pa !=3D INVALID_PADDR); =20 @@ -700,7 +716,8 @@ nsvm_vcpu_vmentry(struct vcpu *v, struct cpu_user_regs = *regs, return ret; } =20 - svm->ns_gif =3D 1; + ASSERT(n1vmcb->_vintr.fields.vgif_enable); + n1vmcb->_vintr.fields.vgif =3D 1; return 0; } =20 @@ -756,7 +773,7 @@ nsvm_vcpu_vmexit_inject(struct vcpu *v, struct cpu_user= _regs *regs, struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; =20 ASSERT(vmcb->_vintr.fields.vgif_enable); - vmcb->_vintr.fields.vgif =3D 0; + vmcb->_vintr.fields.vgif =3D 0; =20 ns_vmcb =3D nv->nv_vvmcx; =20 @@ -939,12 +956,18 @@ nsvm_vmcb_guest_intercepts_exitcode(struct vcpu *v, break; return 0; =20 - case VMEXIT_VMRUN ... VMEXIT_XSETBV: + case VMEXIT_VMRUN ... VMEXIT_RDPRU: exit_bits =3D 1ULL << (exitcode - VMEXIT_VMRUN); if ( svm->ns_general2_intercepts & exit_bits ) break; return 0; =20 + case VMEXIT_INVLPGB ... VMEXIT_IDLE_HLT: + exit_bits =3D 1ULL << (exitcode - VMEXIT_INVLPGB); + if ( svm->ns_general3_intercepts & exit_bits ) + break; + return 0; + case VMEXIT_NPF: if ( nestedhvm_paging_mode_hap(v) ) break; @@ -1026,10 +1049,15 @@ nsvm_vmcb_prepare4vmexit(struct vcpu *v, struct cpu= _user_regs *regs) /* TLB control */ ns_vmcb->tlb_control =3D 0; =20 - /* Virtual Interrupts */ - ns_vmcb->_vintr =3D n2vmcb->_vintr; - if ( !svm->ns_hostflags.fields.vintrmask ) - ns_vmcb->_vintr.fields.intr_masking =3D 0; + /* + * Virtual Interrupts. #VMEXIT writes back V_TPR and V_IRQ (APM vol.2 + * 15.6); the remaining fields do not change. Copy vGIF back only if + * enabled in L1. + */ + ns_vmcb->_vintr.fields.tpr =3D n2vmcb->_vintr.fields.tpr; + ns_vmcb->_vintr.fields.irq =3D n2vmcb->_vintr.fields.irq; + if ( ns_vmcb->_vintr.fields.vgif_enable ) + ns_vmcb->_vintr.fields.vgif =3D n2vmcb->_vintr.fields.vgif; =20 /* Interrupt state */ ns_vmcb->int_stat =3D n2vmcb->int_stat; @@ -1437,19 +1465,30 @@ nestedsvm_vcpu_interrupt(struct vcpu *v, const stru= ct hvm_intack intack) bool nestedsvm_gif_isset(struct vcpu *v) { - struct nestedsvm *svm =3D &vcpu_nestedsvm(v); - struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; + struct nestedvcpu *nv =3D &vcpu_nestedhvm(v); + struct vmcb_struct *n1vmcb =3D nv->nv_n1vmcx; + struct vmcb_struct *n2vmcb =3D nv->nv_n2vmcx; + struct vmcb_struct *ns_vmcb =3D nv->nv_vvmcx; =20 - /* get the vmcb gif value if using vgif */ - if ( vmcb->_vintr.fields.vgif_enable ) - return vmcb->_vintr.fields.vgif; - else - return svm->ns_gif; + /* + * An L2 with no vGIF of its own shares L1's GIF. L0 keeps that shared + * GIF in the L2 shadow, to keep an L2 CLGI off the host's. + */ + if ( nestedhvm_vcpu_in_guestmode(v) && + !ns_vmcb->_vintr.fields.vgif_enable ) + return n2vmcb->_vintr.fields.vgif; + + /* + * The VMCB virtual GIF is authoritative. + */ + return n1vmcb->_vintr.fields.vgif; } =20 void svm_vmexit_do_stgi(struct cpu_user_regs *regs, struct vcpu *v) { + struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; unsigned int inst_len; + vintr_t intr; =20 /* * STGI doesn't require SVME to be set to be used. See AMD APM vol @@ -1464,7 +1503,9 @@ void svm_vmexit_do_stgi(struct cpu_user_regs *regs, s= truct vcpu *v) if ( (inst_len =3D svm_get_insn_len(v, INSTR_STGI)) =3D=3D 0 ) return; =20 - vcpu_nestedsvm(v).ns_gif =3D 1; + intr =3D vmcb_get_vintr(vmcb); + intr.fields.vgif =3D 1; + vmcb_set_vintr(vmcb, intr); =20 __update_guest_eip(regs, inst_len); } @@ -1485,10 +1526,9 @@ void svm_vmexit_do_clgi(struct cpu_user_regs *regs, = struct vcpu *v) if ( (inst_len =3D svm_get_insn_len(v, INSTR_CLGI)) =3D=3D 0 ) return; =20 - vcpu_nestedsvm(v).ns_gif =3D 0; - /* After a CLGI no interrupts should come */ intr =3D vmcb_get_vintr(vmcb); + intr.fields.vgif =3D 0; intr.fields.irq =3D 0; general1_intercepts &=3D ~GENERAL1_INTERCEPT_VINTR; vmcb_set_vintr(vmcb, intr); @@ -1504,10 +1544,17 @@ void svm_vmexit_do_clgi(struct cpu_user_regs *regs,= struct vcpu *v) void svm_nested_features_on_efer_update(struct vcpu *v) { struct vmcb_struct *vmcb =3D v->arch.hvm.svm.vmcb; - struct nestedsvm *svm =3D &vcpu_nestedsvm(v); u32 general2_intercepts; vintr_t vintr; =20 + /* + * These accelerate the L1 VMCB. A world switch loads an EFER rather + * than writing one, and an L2 EFER write says nothing about L1; the L2 + * shadow is configured in nsvm_vmcb_prepare4vmrun(). + */ + if ( nestedhvm_vmswitch_in_progress(v) || nestedhvm_vcpu_in_guestmode(= v) ) + return; + /* * Need state for transfering the nested gif status so only write on * the hvm_vcpu EFER.SVME changing. @@ -1515,7 +1562,6 @@ void svm_nested_features_on_efer_update(struct vcpu *= v) if ( nsvm_efer_svm_enabled(v) ) { if ( !vmcb->virt_ext.fields.vloadsave_enable && - paging_mode_hap(v->domain) && cpu_has_svm_vloadsave ) { vmcb->virt_ext.fields.vloadsave_enable =3D 1; @@ -1525,11 +1571,9 @@ void svm_nested_features_on_efer_update(struct vcpu = *v) vmcb_set_general2_intercepts(vmcb, general2_intercepts); } =20 - if ( !vmcb->_vintr.fields.vgif_enable && - cpu_has_svm_vgif ) + if ( !vmcb->_vintr.fields.vgif_enable ) { vintr =3D vmcb_get_vintr(vmcb); - vintr.fields.vgif =3D svm->ns_gif; vintr.fields.vgif_enable =3D 1; vmcb_set_vintr(vmcb, vintr); general2_intercepts =3D vmcb_get_general2_intercepts(vmcb); @@ -1552,7 +1596,6 @@ void svm_nested_features_on_efer_update(struct vcpu *= v) if ( vmcb->_vintr.fields.vgif_enable ) { vintr =3D vmcb_get_vintr(vmcb); - svm->ns_gif =3D vintr.fields.vgif; vintr.fields.vgif_enable =3D 0; vmcb_set_vintr(vmcb, vintr); general2_intercepts =3D vmcb_get_general2_intercepts(vmcb); @@ -1574,5 +1617,6 @@ void __init start_nested_svm(struct hvm_function_tabl= e *hvm_function_table) cpu_has_svm_lbrv && cpu_has_svm_nrips && cpu_has_svm_flushbyasid && - cpu_has_svm_decode; + cpu_has_svm_decode && + cpu_has_svm_vgif; } diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index a8d258aa3980..074f09a0e0e9 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -1660,6 +1660,8 @@ static void svm_dr_access(struct vcpu *v, struct cpu_= user_regs *regs) =20 TRACE(TRC_HVM_DR_WRITE); __restore_debug_registers(vmcb, v); + if ( nestedhvm_enabled(v->domain) && nestedhvm_vcpu_in_guestmode(v) ) + vmcb_set_dr_intercepts(v->arch.hvm.svm.vmcb, 0); } =20 static int cf_check svm_msr_read_intercept( @@ -1990,6 +1992,8 @@ static int cf_check svm_msr_write_intercept( case MSR_K8_SYSCFG: case MSR_K8_VM_CR: case MSR_AMD64_EX_CFG: + case MSR_K8_HWCR: + case MSR_K8_VM_IGNNE: /* ignore write. handle all bits as read-only. */ break; =20 diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c index d069280a4da8..5354c4f1b85f 100644 --- a/xen/arch/x86/hvm/svm/vmcb.c +++ b/xen/arch/x86/hvm/svm/vmcb.c @@ -194,6 +194,9 @@ static int construct_vmcb(struct vcpu *v) =20 vmcb->_vintr.fields.vnmi_enable =3D cpu_has_svm_vnmi; =20 + /* GIF is set out of reset; with vGIF its value lives in the VMCB. */ + vmcb->_vintr.fields.vgif =3D 1; + return 0; } =20 diff --git a/xen/arch/x86/hvm/svm/vmcb.h b/xen/arch/x86/hvm/svm/vmcb.h index 3760f71a8625..d098bf1d1355 100644 --- a/xen/arch/x86/hvm/svm/vmcb.h +++ b/xen/arch/x86/hvm/svm/vmcb.h @@ -288,7 +288,13 @@ enum VMEXIT_EXITCODE VMEXIT_MWAIT_CONDITIONAL=3D 140, /* 0x8c */ VMEXIT_XSETBV =3D 141, /* 0x8d */ VMEXIT_RDPRU =3D 142, /* 0x8e */ + VMEXIT_INVLPGB =3D 160, /* 0xa0 */ + VMEXIT_INVLPGB_ILLEGAL =3D 161, /* 0xa1 */ + VMEXIT_INVPCID =3D 162, /* 0xa2 */ + VMEXIT_MCOMMIT =3D 163, /* 0xa3 */ + VMEXIT_TLBSYNC =3D 164, /* 0xa4 */ VMEXIT_BUS_LOCK =3D 165, /* 0xa5 */ + VMEXIT_IDLE_HLT =3D 166, /* 0xa6 */ /* Remember to also update VMEXIT_NPF_PERFC! */ VMEXIT_NPF =3D 1024, /* 0x400, nested paging fault */ /* Remember to also update SVM_PERF_EXIT_REASON_SIZE! */ diff --git a/xen/arch/x86/include/asm/hvm/svm-types.h b/xen/arch/x86/includ= e/asm/hvm/svm-types.h index 256bf5b91402..24363a58ffcb 100644 --- a/xen/arch/x86/include/asm/hvm/svm-types.h +++ b/xen/arch/x86/include/asm/hvm/svm-types.h @@ -44,6 +44,7 @@ struct nestedsvm { uint32_t ns_exception_intercepts; uint32_t ns_general1_intercepts; uint32_t ns_general2_intercepts; + uint32_t ns_general3_intercepts; =20 /* Cached real MSR permission bitmaps of the l2 guest */ unsigned long *ns_cached_msrpm; @@ -66,7 +67,6 @@ struct nestedsvm { uint64_t ns_vmcb_guestcr3, ns_vmcb_hostcr3; uint32_t ns_asid; =20 - bool ns_gif; bool ns_hap_enabled; =20 union { diff --git a/xen/arch/x86/include/asm/msr-index.h b/xen/arch/x86/include/as= m/msr-index.h index ad1c6c97f8f7..beb858bf99bb 100644 --- a/xen/arch/x86/include/asm/msr-index.h +++ b/xen/arch/x86/include/asm/msr-index.h @@ -250,6 +250,7 @@ #define MSR_K8_VM_CR _AC(0xc0010114, U) #define VM_CR_INIT_REDIRECTION (_AC(1, ULL) << 1) #define VM_CR_SVM_DISABLE (_AC(1, ULL) << 4) +#define MSR_K8_VM_IGNNE _AC(0xc0010115, U) =20 #define MSR_VIRT_SPEC_CTRL _AC(0xc001011f, U) /* Layout m= atches MSR_SPEC_CTRL */ =20 --=20 2.34.1 From nobody Thu Sep 24 19:01:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1790155322; cv=pass; d=zohomail.com; s=zohoarc; b=Kk4l2OpMPR9BqRa7gIwmpLLOHDfH6btzgRH7kSz4QXSrHlM+74ei95GX+JbE16AZxgV6APMUcd41rjMHjt17uA3fnflip83W+NM07Mi+UJinyi0R397bkMg8BvS8Wvnx/31mxV5hS3fE6NOocwBjmjtP41dfxvYuu0ZS/rXJmqI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790155322; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qQtCMr71u/dFmTTBykUGImfeS0Mu9gUyzujoZ62TAUA=; b=a5iu1X3DwZ+wvbJQQhGFSyscTn6wCCrswHcG2AWRN8mbgEtzcOjmwF8RbwJ4XPumtAQ7+g/ueYsFgkYZ+XmZTrsf3l0OQ/zVgEuRWsm0jHdcaGyXSh84TsIhmszIrvio2aE4cfeD80TKt9I8soxPZeDc7UV9TTAgnBEDIEkvluo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1790155322535264.4677117557194; Wed, 23 Sep 2026 02:22:02 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1429943.1652595 (Exim 4.92) (envelope-from ) id 1x9JAi-0005qB-Sk; Wed, 23 Sep 2026 09:21:48 +0000 Received: by outflank-mailman (output) from mailman id 1429943.1652595; Wed, 23 Sep 2026 09:21:48 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAi-0005q4-Pu; Wed, 23 Sep 2026 09:21:48 +0000 Received: by outflank-mailman (input) for mailman id 1429943; Wed, 23 Sep 2026 09:21:47 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x9JAh-0005nb-DL for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 09:21:47 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x9JAg-0079P3-QP for xen-devel@lists.xenproject.org; Wed, 23 Sep 2026 11:21:46 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab39a28-2eae-0a2a0a5409dd-0a2a450acb6e-10 for ; Wed, 23 Sep 2026 11:21:46 +0200 Received: from [52.101.57.31] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab39a28-f2d2-0a2a450a0019-3465391fa556-3 for ; Wed, 23 Sep 2026 11:21:45 +0200 Received: from LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) by BL4PR03MB8106.namprd03.prod.outlook.com (2603:10b6:208:591::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.16; Wed, 23 Sep 2026 09:21:43 +0000 Received: from LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c]) by LV3PR03MB7609.namprd03.prod.outlook.com ([fe80::146d:1d33:b619:386c%5]) with mapi id 15.21.0451.014; Wed, 23 Sep 2026 09:21:43 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-Id:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HI5bySuzJHbhGWoESuQoIz6iLJP9PmdB0Y31zwgAtfInKoOY54Rs3kimHRW1Wb77kWHv4rabJGWZ7ZquhgK42Pnl9ouiJ8s/EqXhIXyyiNLt2zd3tPkpfP9JE1IsGAkdwGkzoKlGv7G+AfnjzTK+qFZymrOxsMUDU+Y0JlRfx/WwXS8UJsdyR0948/DPId0M1OcilS7huIQjmSMQthdRttUtTSWLvqIYx+kdHPswdWcnQlTj3HF8gIE/v/HOTmdhydOs1iBalQcpxmKcJgw23CAdh2sW1xdeEp16aM7rfZBxk/rl5BlEbXbKy57ftQ6MY1WyZevdN+yfG7DgxVFC7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qQtCMr71u/dFmTTBykUGImfeS0Mu9gUyzujoZ62TAUA=; b=G7th76gRGCPrDB8N7wul0NfMb9oB+7EHcZg/hOcqN5dTJ70IF7EG1uNGs4pVmW3aO8QQiET/pWTfeSj3QGYEZhDGJeTYi8JKDd1SqqsYAIJ52a3Q8uVXkRzI4bNXxXnjqtIRJhJI/B/K/w2Az7M8M5JNsaPGeVLdVl9OmAAjwjD1H8neOYL4cqcPMqcSQu+C9zFfgOoFI52RkHnIBK7LiALTKX5DL5VJ/aNQp7vc3ZN0JQ49oFA+8JYMOmCS/LL3g2DxpwEPVsc8IeouHLXNN8o6mjmcSTi7b2x24VQ1A38q3anv/9FhdvFkt97xEaPnQwkwAhO8XCt+/PJPu+s7OA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qQtCMr71u/dFmTTBykUGImfeS0Mu9gUyzujoZ62TAUA=; b=ZGO4lUn7sYe1EGIktAujkPhANWNfkFvfnpcXk7VFL6TX68+yheOJo4QsQ4m/kL4LgXCaXhBxlGHvFGQ6XEyFQAfV3+/ua5CUuR1fvbQaTLLYvEH7vJpKKmrxX2T0VVXPC4wdwI2d68KHXibUHxfL4pKtJ6qZuvJnoSIfEHVHdw8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: chunjie.zhu@citrix.com To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, jason.andryuk@amd.com, teddy.astie@vates.tech, Chunjie Zhu Subject: =?UTF-8?q?=5BPATCH=C2=A0v1=205/5=5D=20x86/nestedsvm=3A=20fix=20up?= Date: Wed, 23 Sep 2026 17:20:45 +0800 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: KUZPR01CA0014.apcprd01.prod.exchangelabs.com (2603:1096:d10:34::15) To LV3PR03MB7609.namprd03.prod.outlook.com (2603:10b6:408:283::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR03MB7609:EE_|BL4PR03MB8106:EE_ X-MS-Office365-Filtering-Correlation-Id: 95495295-45ea-47f4-9eab-08df19541548 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|18002099003|22082099003|56012099006|11063799006|10067099003; X-Microsoft-Antispam-Message-Info: qjkZxIh0Uz7t5kUhHLiDUNqAS8Q5r054YK8KzKEG5rR0RYgj5ZStVjxg/NBEfKZA/6Wx1/4WtZHDRVklkkRpnaccz8Rdg48E13PZOgyQXPsvgFlM9b9RAbQkW5adTOxVpNY/8PdxvvkNNRnyhsD63Vt91tVgSNIqQ46yv8PemQdaJpmlXMpvVrjLHFXm89DqVWhanbfQqFc4xxoUjuZL0C82veRXA7F4LlD3RwHfXkhTGW0/DtQ9dvR7c8Bb65KNp0sQtX/TDfUU20DxaSEsHC8UzNK8nZpDoYF5Kkwy0E5scKCd+cdo7izkcoTjBIGgRWVpxTK0WNErja7Um8uiatNiELnxss7YRUN+ET9rvy+Si6HIccfmOG0WmRqvHcMoAExoxMI/7QEgcStwq7aasWRA8xkwYswTTLdnVV/OmmXmkMiosHRpq0QcqtMMMQ33Wm1iRhMNxhEXiScZ/Y+iC5Xap0NxKq0qw9PGmeQ/7dxwTzTGgOBJ9iIO/FcPa2ur90wJfCRL6HTHOTLMkkROMr4UGUkzf5HcSeYy+ml4K4u10bH8gllnEbVmGkIBbVo9QGLwN8j75VkhwO/Zeb//lcDaTf0jsCBlF/QWVaUKWXIhD6o42Ki00e9caW2smTsdaeP+a/yVA2NfGDG2QAru745RtVI9zQTPUxklKdhH07o= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR03MB7609.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VkVxUHBNOURxYjVaUkRwRXFEN0lOcm16cUtJcEpaMDhNT2pYMEtIR1REbXBW?= =?utf-8?B?M0lxZlV5dVQ1eDJQTVROTklpMTRvdS9obWE4ejFEZjBaOTU5dlZ1VElTTS9Z?= =?utf-8?B?cWVqN2c0KzlxSkVqdGp6WUNJdWNPTGFCYjA3L0ZKWXVINjk1Q0RIYmFnOUFw?= =?utf-8?B?SzcySDIrWTVRSjg0TW1Ha1hOQUVibHhXNEozbTEySUNlZzlmZXplQW5rWkVD?= =?utf-8?B?OWp5ZnJmN1FrRThzNTdGaTkyTktxUWtUYkV1QUhpMWpIeEc0TTcvcENWQm1r?= =?utf-8?B?L0RxeEZaMVNXUE0yS1N6QWJhOU9vQzM5eEJoTnZNK2czZjV2WmF2M1BCM3Iy?= =?utf-8?B?MkVOYkhseFM1Z0xWVWNIMkUyQzlBeTRSODF1Z2dVQzVZTDVZVUpxZkE3dWdM?= =?utf-8?B?aVZXYTdhZlJoc09wRE4xWmlNSmpJLzBHUDFEaHNYZW01ZTZIM0NqWXFmdjJx?= =?utf-8?B?RDFMTXJiNU9DRXJWSU5RcEM0S1FLRFNYUFVxbThHVFdiejE1b2ozMDIwbWhH?= =?utf-8?B?aGltcXZFQllGUVA1WlNSL01La2JhNDN6VTF1VkZIbW1zWGR0TU9NY1YwYlFh?= =?utf-8?B?dXlKdzdpa0lsaGJoNmZPYWNtVlpRWCs0cTRNem5nbzVBdWhWZzRkRHhWNW83?= =?utf-8?B?Yk5WaGdDakhOVGJoQzlUTEtPSi92VEg5dkpsNzVJVmw5YVhSVDhPL09xNlM3?= =?utf-8?B?alpmOGtPQ1VReVpEbGlkSEVuelZoZm9ESTk2N1hIVHFLTUszcm83U213V0w5?= =?utf-8?B?ZDA5aHpSUFN2ZThpY1JsZ2FCQk43ZktyVC9tV2xrbkt0MnMwSW5BYlh1MTZj?= =?utf-8?B?cEd2NDdFWUdURHhMMElUZTl6Q1pCam5uMzNaVUw3bllrMTQxQjk1YXJlZDNK?= =?utf-8?B?TlczRG9sZ0R0K1BIRVR3T2RKMDJoMFBlWDhTWjVRN2gyWTV6VjR5Q0ZqNTVR?= =?utf-8?B?cGg4VHQxMWNwMU82WU8vQ3ZnTjlEL3VINzZYYU1lcVFJOXVwNEd6V3lzZWh0?= =?utf-8?B?UFo5ZnltWlIvZERNTEJHM3FTMHI1Zm5QbXhDYTVtKy9TdUtyMHJCQ0hsRjhX?= =?utf-8?B?WVh3UmNnV3R2QkVpZ28vMVNyK1JSbmlOL1dsSkRpNkxkczhDbng0TmZNQWdR?= =?utf-8?B?KzM2bUI3eU4vYTYvdE0wQWs0MUVQYmc1S3REVVFxUHJnMGhmRmhQQUJaZmxJ?= =?utf-8?B?SUhlLzMzT1h4MGhNZ2hmOUdKWWV2SXdvVjRoK0c1VUw5dS9uZWp5emlYQ1gr?= =?utf-8?B?cWd3N21td2RocXVqRmwzQU5pUEZWOWlySjZmQ0lDbmpvS25ZWVRXbElZcWhB?= =?utf-8?B?MzExUXJZK3BCZTgvU29FVnphSTBmMmVLTDNiYW9YYWsxc1ZycGVKekp0bVR1?= =?utf-8?B?ZEhNMVRiamNKQUhtOUZSN3F5Q01ySlB4UStHeWR6aTBvL0ZNZ0s3UDNJMHB6?= =?utf-8?B?cmFOaVBpcmlEUG9JNUI4aUJpRDVuNHdENU9tdmpMbHhXK0RKZDh1cFNWaFRM?= =?utf-8?B?Uko0M0ttUjdCcUtoSVRXR1pWTGFpeEcvWWk0NWxtNlBqUmRHSGU2UjhNTEVZ?= =?utf-8?B?RGFyMW5SWFNrc1ZWbHkvRU1LOHRjMyt0WWZxUC84cUFPK1M3RmlwR1JPMm5B?= =?utf-8?B?TGw0YkxLV1BHZlQrRHdmWVhhRVk5enlMNTJZeFlQdlNQcllna1B4NFIwaERv?= =?utf-8?B?SWFqSEpKQXlyQjN3ZXRCSEhvR0pNS0IwSWpVK0ZMMkNKMzhXSm5LbzBQVXpL?= =?utf-8?B?dXcyRi9jeCs4NVNERHFQVFZyTFh4cTYvcDlVNnBlVEtLRVVHWDF3NEJ2TkxM?= =?utf-8?B?bWhISG9lb3Q2UHlnTTVYSGhmdmRCdlJWQTVIeURpU2ZMcndUN2lKQTc3ckpI?= =?utf-8?B?WmpKVUY5aE1rMVVtb3Jka09JcWdVT0hoQ1hHY1pkVHZjZEozYnp2VDdHREVh?= =?utf-8?B?eFZxYnp4MXo5WWpBZzdOdGtJYTdWT0xuWDcyTjFYRjIrMHBPTElhUVdpOU5M?= =?utf-8?B?YnA2aTMvSE81T2pRQTVzTXpaK3RsRHI0VTM3T01USTlSWjNBM2NtUC83eWox?= =?utf-8?B?ZkJ0NDN3a3h1KzRCOGpXZTg4L1lrb1VIaXRwekQ4MUN5ck9pb29GWkV3MExQ?= =?utf-8?B?eXhhVHJnaG5IU2RrSFpYL2N1SERrRXd3S0h6azhGaUxKWWU0d0dvN004VUp5?= =?utf-8?B?d3lHdlgxTE10dEx1VlVzV3JQalZQcHR3dDRBaDNjRUUxZ2gyLzNKWWdBTFJ6?= =?utf-8?B?MVQxbVh5SG9BTE5adlBaR1BvZHB5U25aUGNaVExFUGowaGpYNjAzUmVvUEUx?= =?utf-8?B?OVdTa3hmTVFhbk1zcXFmWElmck8vRmpodGF1ZXRCMllIMXRHMHlDdz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95495295-45ea-47f4-9eab-08df19541548 X-MS-Exchange-CrossTenant-AuthSource: LV3PR03MB7609.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2026 09:21:43.8150 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: k14H2l2yzMa+ibbypHdADQu8RrAMSADTQGfyRhiaTqkEd0w+Ef232JbXxUDpYfRtVCwfIdbXyH0K4fvHnc+vjw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL4PR03MB8106 X-purgate-ID: tlsNG-4011c0/1790155305-59DDFCFC-5C11B661/0/0 X-purgate-type: clean X-purgate-size: 3673 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1790155323784158500 Content-Type: text/plain; charset="utf-8" From: Chunjie Zhu Signed-off-by: Chunjie Zhu --- xen/arch/x86/hvm/svm/nestedsvm.c | 19 ++++++++++++++++--- xen/arch/x86/hvm/svm/vmcb.c | 9 +++++---- xen/arch/x86/mm/p2m.c | 5 +++++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nested= svm.c index 82e01e513e69..91872af8aa7b 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -355,7 +355,7 @@ static void nestedsvm_vmcb_set_nestedp2m(struct vcpu *v, vcpu_nestedsvm(v).ns_vmcb_hostcr3 =3D vvmcb->_h_cr3; =20 p2m =3D p2m_get_nestedp2m(v); - n2vmcb->_h_cr3 =3D pagetable_get_paddr(p2m_get_pagetable(p2m)); + vmcb_set_h_cr3(n2vmcb, pagetable_get_paddr(p2m_get_pagetable(p2m))); } =20 void nsvm_vcpu_update_nestedp2m(struct vcpu *v) @@ -373,6 +373,7 @@ void nsvm_vcpu_update_nestedp2m(struct vcpu *v) return; =20 p2m =3D p2m_get_nestedp2m(v); + nv->stale_np2m =3D false; =20 /* * This may happen if we've handled VMEXIT_NPF at the same time as a @@ -383,8 +384,6 @@ void nsvm_vcpu_update_nestedp2m(struct vcpu *v) vmcb_get_h_cr3(nv->nv_n2vmcx) !=3D pagetable_get_paddr(p2m_get_pagetable(p2m)) ) nestedsvm_vmcb_set_nestedp2m(v, nv->nv_vvmcx, nv->nv_n2vmcx); - - nv->stale_np2m =3D false; } =20 static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *r= egs) @@ -1024,6 +1023,20 @@ nsvm_vmcb_prepare4vmexit(struct vcpu *v, struct cpu_= user_regs *regs) struct vmcb_struct *ns_vmcb =3D nv->nv_vvmcx; struct vmcb_struct *n2vmcb =3D nv->nv_n2vmcx; =20 + ASSERT(v =3D=3D current); + + /* + * The physical VMCB fields covered by VMSAVE/VMLOAD may not be in sync + * with v's vmcb if a context switch happened since the last VMLOAD. + * VMSAVE below would otherwise capture stale/foreign register state + * into the L1 shadow VMCB. + */ + if ( v->arch.hvm.svm.vmcb_sync_state =3D=3D vmcb_needs_vmload ) + { + svm_vmload_pa(v->arch.hvm.svm.vmcb_pa); + v->arch.hvm.svm.vmcb_sync_state =3D vmcb_in_sync; + } + svm_vmsave_pa(nv->nv_n1vmcx_pa); =20 /* Cache guest physical address of virtual vmcb diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c index 5354c4f1b85f..2f7053ed7eec 100644 --- a/xen/arch/x86/hvm/svm/vmcb.c +++ b/xen/arch/x86/hvm/svm/vmcb.c @@ -357,10 +357,11 @@ bool svm_vmcb_isvalid( PRINTF("CR0: bits [63:32] are not zero (%#"PRIx64")\n", cr0); =20 if ( (cr0 & X86_CR0_PG) && - ((cr3 & 7) || - ((!(cr4 & X86_CR4_PAE) || (efer & EFER_LMA)) && (cr3 & 0xfe0)) || - ((efer & EFER_LMA) && - (cr3 >> v->domain->arch.cpuid->extd.maxphysaddr))) ) + ((!(cr4 & X86_CR4_PCIDE) && + ((cr3 & 7) || + ((!(cr4 & X86_CR4_PAE) || (efer & EFER_LMA)) && + (cr3 & 0xfe0)))) || + (cr3 >> v->domain->arch.cpuid->extd.maxphysaddr)) ) PRINTF("CR3: MBZ bits are set (%#"PRIx64")\n", cr3); =20 valid =3D hvm_cr4_guest_valid_bits(v->domain); diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 027b9ae69be3..d1fafc479c78 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -1517,7 +1517,12 @@ p2m_get_nestedp2m_locked(struct vcpu *v) np2m_base &=3D ~(0xfffULL); =20 if ( nv->nv_flushp2m && nv->nv_p2m ) + { + p2m =3D nv->nv_p2m; + if ( p2m ) + p2m_flush_table(p2m); nv->nv_p2m =3D NULL; + } =20 nestedp2m_lock(d); p2m =3D nv->nv_p2m; --=20 2.34.1