From patchwork Fri Feb 21 08:07:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: CLEMENT MATHIEU--DRIF X-Patchwork-Id: 13984961 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3EE52C021B5 for ; Fri, 21 Feb 2025 08:09:19 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tlO4g-0004d4-CI; Fri, 21 Feb 2025 03:07:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tlO4e-0004bk-6N for qemu-devel@nongnu.org; Fri, 21 Feb 2025 03:07:52 -0500 Received: from smarthost1.eviden.com ([80.78.11.82]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tlO4c-0005j1-Aa for qemu-devel@nongnu.org; Fri, 21 Feb 2025 03:07:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1740125270; x=1771661270; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=m5wBA/DKT2nuLCzYeyNMgxFYfXCnhkVt7sDapOAU8cc=; b=H4F+k/zQWaATeQ4/pzEwVLZQgE+rxHG6oWxj5NEUacOjn5tAHnT8uX4T tF4AA/ZfMxq9RbfkAH5Sh6QY68he76d4aujcwryl52/fhFxmkwWp59fR2 5g0dCdg1mElEwZPntbtUEtLdmvjGVUb5nHdw0aYvih5vrkkdTl1ViDoHt U0KhxJ+I/DY1aWn04n1z0hrhjwQCHLkA7DQbiMg+1sIV91envqaTeU2z/ f3hq0ikB8WAXtj2qQDZyBFrP7EZc3iY2+guCJXMX1ym+HvPB3eyPvCrRQ z2CtvCMkYJt9YMEbDIMYkj4pxR6WgB47zDujpYWJbns6JMuE5xjk3gS96 Q==; X-CSE-ConnectionGUID: ovr82eYpRGK8hvIU7hFzQw== X-CSE-MsgGUID: Uhil7dWUS9+m6ZoUv2DTRA== X-IronPort-AV: E=Sophos;i="6.13,304,1732575600"; d="scan'208";a="31394147" X-MGA-submission: MDFlxv8oBtL0NtsO3L41EpXZwsuPoLcqNltVUV+oaw2UwLmj/uVZby+HfMEBCxNCqC2mhZJFbq4IKokBGJvmjcH8YKQd+hpDHLovhY9mlb2FIiE8LBCn48oF0PSag5TGweA5JHSbaGtaYKUOlrTp/eXvwvmfHbFxLH+LHqDbnDxw6A== Received: from mail-vi1eur05lp2170.outbound.protection.outlook.com (HELO EUR05-VI1-obe.outbound.protection.outlook.com) ([104.47.17.170]) by smarthost1.eviden.com with ESMTP/TLS/TLS_AES_256_GCM_SHA384; 21 Feb 2025 09:07:48 +0100 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M89eJZrvdsH+vowawWmolNMg0G5sAqOOHzz7pLpc5JIerD0Rt+SfCS4xKgIbpk5AXq60Nnh8EDsWWAf8FuTUQ57GBmFmhBP5ygZ2dJqOCmQnKB4Ctwc5BouzsJFOLYwWLC8Sv52wcOWqn3GdxZZrBYLsVYHHDcAhMpXihU/VU3uzRa9KpwkcD1P1UiBwEFVL+fhSwaW8StDAio2OAwz8/MqoZYnhllFzR3X3t9sUMeqiTW+vcAnI6E/XnQQ4G1wgOxtbnEYzjnu6SgEoQlCy3vc2n6tyzFRm5LBpfV79qbeWGoy5e01G7QeOrHOeGqwo1iCFRp9lVrtOhGBdWUQ4Wg== 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=ptdj9NpRDTE1Jdjyv9AgOzOvidnvjV1MSr75mHV7AxY=; b=F926SWoQjAUaScOLn87V9XvUKqvGHMoACR1FJIQiTYFxgshPW2P1fYzvE/Nkyoh39Ogb9m1jb8wbLxlCjm51Frg0/fEXbigdBbrAbhlFQRGBn3Curcg67upIleUpKyufFwmP8XAkB4+6UquTP+17Ar29PXiTIC7EFNTE3voK0uv/GG2FlZMzdPSUmFBEZbNEt6q8kHUM7497w3PJPZJ1wZODUzjCxGBW0nTMrERVQ4RXjf4Sk2wNH+dpQ3H4Ed34K6TQWr+3Eqvf++Zd0if5OGIkzzM/yHmVyXGztzziNCEC5q/b40qRlx2VApWa8MieVf8E++8P/JcVrtTvt3Skiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eviden.com; dmarc=pass action=none header.from=eviden.com; dkim=pass header.d=eviden.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Eviden.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ptdj9NpRDTE1Jdjyv9AgOzOvidnvjV1MSr75mHV7AxY=; b=XAjZ1J/ZOrLt5LgPKEiHr1+rfUkZcjcgn9ZwhiWRl4uSfVuGMFoLyrsE/PQ6NRnRiY7hKnZ4Uthf8IpWYBwAHP87l7jCCW51xXT1BiMiozdXq9L9daRdlGi99UnscTbM+XYx03RZVHpCl5w4BAumXGl5GyFN6sze0ZvQuMbDmqxwTTV06LaQM2k3fII+q5ohV2SRFsQXrpd6u03pZ99RYWvudOdINrIaokuYVsCuPIGahqXPXWvanJWU+XmjU80FeW80hJMfp1rXNeHtolqGK4AVFxlomOrVoY4CP/tgiYuEljIlYZK9jrVb0HliizTEmTpPvLE7dB8s6V0+WLjh4Q== Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by DB8PR07MB6459.eurprd07.prod.outlook.com (2603:10a6:10:142::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.16; Fri, 21 Feb 2025 08:07:43 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%7]) with mapi id 15.20.8445.017; Fri, 21 Feb 2025 08:07:43 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , "zhenzhong.duan@intel.com" , "kevin.tian@intel.com" , "yi.l.liu@intel.com" , "joao.m.martins@oracle.com" , "peterx@redhat.com" , "mst@redhat.com" , "tjeznach@rivosinc.com" , "minwoo.im@samsung.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH v3 18/19] intel_iommu: Return page walk level even when the translation fails Thread-Topic: [PATCH v3 18/19] intel_iommu: Return page walk level even when the translation fails Thread-Index: AQHbhDevAtMGTD3ASEiAbxvGiKR+qA== Date: Fri, 21 Feb 2025 08:07:43 +0000 Message-ID: <20250221080331.186285-19-clement.mathieu--drif@eviden.com> References: <20250221080331.186285-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20250221080331.186285-1-clement.mathieu--drif@eviden.com> Accept-Language: en-GB, fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=eviden.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM8PR07MB7602:EE_|DB8PR07MB6459:EE_ x-ms-office365-filtering-correlation-id: f6eff158-90ec-420a-cc39-08dd524ed1ca x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|376014|7416014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?q?ICRsrooCIwhvUCxmuP67Xxxcul?= =?iso-8859-1?q?Zyllc08NW1qvZGX2aSDJtZr81r+A+xWaChfdo2WEFq5ZatzyMfQ1RlGFVxQn?= =?iso-8859-1?q?jAW1nvUT7c6W994+jaV3VxpF8YWCMclEfTumwcuqM8Nq6oHOcoCPBsdSGkYe?= =?iso-8859-1?q?L4iHyhd7ZzHTx6w4FjvRxbHIPp09vM2HNWzzrTdTaFDC5rmADwBkEpfz9FuY?= =?iso-8859-1?q?CoGZKGKwRNpFDvIcQcfCr/E8e+CcIvuTLGdEBZVA7jkS7xB3gG48Jblu8pfw?= =?iso-8859-1?q?BsMCh44e0pjmlxUso4dB0LtHnlF8hPJLoimUBCHqB21M6wEnKRFWyLaGSqc8?= =?iso-8859-1?q?uvto+sJO3ZTDo4/shxCAsJKPy04SqTKOQS7iXFuMwtcdd5UV28pyP6YpbEpt?= =?iso-8859-1?q?zlpogqDhSQxAghNhp68xfp0TGAE96fcGGLVdRTbdvfGfxQtqHYMcXtYW2sxG?= =?iso-8859-1?q?4Tf9vMsDxgVLViD4NgUiOvMHEIqE8R5NitHX+T55jFmCmbO+8/mZodX163Ew?= =?iso-8859-1?q?sUGFlqSvd6a0Z+T1k+i/iGUPTtmNb8Hih/cmuXBtUZN8DDvAD+tuaxgeDrFD?= =?iso-8859-1?q?P+/x8bokv8jb/dIpy72GoOUyxuTneCR4w72OA1ZAmz2Ek5THy+/lsFM/S1hK?= =?iso-8859-1?q?yJoYb1/WmarE0o3031ZOFg8dxpJZEtYRtrEMckGss6HVwhjxRuqUgJbXtzi5?= =?iso-8859-1?q?lRxXHOCh/fOBsYM67oBbJiHIuPrH00fQ4bFFD8NE4c7/7eCVpt0oexzRCRn2?= =?iso-8859-1?q?UJLrAE5hPesctKf25Zd9SGTdThaswvQth+UZPjDEEKBOG7hV48KmDISPfV7k?= =?iso-8859-1?q?an0d4hk/ACZZ599UTm3wlhVGXBiEm6HUoxfbuDyrEwGvELZPqS323DAiUt79?= =?iso-8859-1?q?0Z5sJImvJmD0DFfp09kzxC8EABHHDs6IfRyE24/XM1DZxj3cXb8qMbtON/vV?= =?iso-8859-1?q?sGFGohY4oU+b64TZZN+/bphywKjP/r4bqJzE1fGVd4upxsn1ArpQ5OlzC3Nl?= =?iso-8859-1?q?HLjVoaQ7zxnr8iPIhB5WBOLi9WS0nOBHX2G6SEvv4+kwMtUn9T5KwWbc9Bu7?= =?iso-8859-1?q?ojwKyi9KS6oAqPz45TqfFE56fva6X2ycWw0p2fqsxnsm4w20E6rqDLj48QV4?= =?iso-8859-1?q?QWSs5eASkcVpQdRRAAXeeIZKzuPY3qhpFY3WVoaIEsR5VSZeyy5maP+nm/+H?= =?iso-8859-1?q?RleTocWU3rH7koDc1L8NYOFgOm6WyF9YO/kg4ZIAsMhj6ffaoTazyREMprOS?= =?iso-8859-1?q?MdKsYQxZYwA6E1Ci3KqmcII5ORUxFiUBt4wIogs4WjLj+/TmUDVcu5VFGB++?= =?iso-8859-1?q?YYAC3jb9+DdUMUQpuIAmPeubJfhGTYlVApUsBMdkesbOwXE4oUA0hBn8XNOC?= =?iso-8859-1?q?p2831r4/FnU7D6lxqqD3bpPfTa0PjPBPDyCgCGdSkorIbmgp2XtoUl3kagZO?= =?iso-8859-1?q?5nnTpr6N8rfdswfoTOg8Gqz/Ns6yOZOEylUyk++saNJiPV0XP5B7B8nUtuRE?= =?iso-8859-1?q?+PcfB4?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7602.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(7416014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?YbPiFVm65eTb9QKHUDPs2fb?= =?iso-8859-1?q?+NCCE8mHkgcoKkkhivQ0tWCEhQneqTAxXv93uzcp4cdXNfPqkEhSRzM6ECFy?= =?iso-8859-1?q?DfNw1gwtEYVPAva1VZrqt45GH3Uf7iCl3YrobUGV3tM4GwED79fqT1tB/lT1?= =?iso-8859-1?q?AhINy39tJI+8uonsyXwyIaBcm+tI+vrJ8eMKcgn/IQTjLbHG4c+tSaxV2JU6?= =?iso-8859-1?q?lwCp+S+QMBJGgE8qvTSjq2UJrJ9KxKYl1p2OoIewvhbyTvO6iF1wuXvlSdIU?= =?iso-8859-1?q?s9cqQeFepvJrQBEphczAN+eag2kO5/7Gre2VpJ/kWLV+Ow7Ux5gCZXZ/aePW?= =?iso-8859-1?q?gT+Fav0lmCxAA/ZuWF0bkFz7rtHL3X+ECnMnE/ywzfkBH0KsbbaeUDDolLOu?= =?iso-8859-1?q?8VVawWgh7yrMIrEzu0XptpdDxWqzWiBk2omFYc7ZWAl+5F2A1f4/JIGlM14t?= =?iso-8859-1?q?qJv4ykyQsgQLHcnzM7/4idRAvm1p7FMlRSf/rhiAm8QN1Qz9dZiSOpZEQDWo?= =?iso-8859-1?q?/W8XXPaVcnkqZ3jl9VZWyNlGjRkh82jmi6DVS3ojWnJySWVq1TiQGR7oBagh?= =?iso-8859-1?q?de/VCo5b94haDg6vEfrRJ5n3ZmMalVtYlf6Fkdflp2d5SV9eOpVqYfT8onrO?= =?iso-8859-1?q?8ZvmLTBfKYAdMHw/fLZ17gVjpkVmyJuEVGNHVD5/GAlwVsMMY6fbTernXI2u?= =?iso-8859-1?q?ALtjcqyj8gTDWFhLd0hG9OZlVzLtD1CQ0XTm02JKqoBA4xQy2vN3zX6DEh8d?= =?iso-8859-1?q?Ahe2CCtRVWhhSlczdMJuQHeWgBf/cR9hd21hS6m66/lzEMqOvgPAeBfXL0FL?= =?iso-8859-1?q?A1dvjYAIVbSJuiA3iEKhJGU+0H42qeQWYYed3ul/o0jYo0BeFBplE++fxfEU?= =?iso-8859-1?q?Xa9f32gdJdN28a+n3cwhD0TeXKRhMNQ08jFCWu2ZaPTXUI/PQ5G+ikPe9ckN?= =?iso-8859-1?q?l71XPBT0IcY1CWpfPlyaOaqWyDAFjg2SAFpiDDC2TLKEaza8ZTjlRXItrqBw?= =?iso-8859-1?q?+3a/Vz5txOF7MVyiWQ4VixnEvhJcV/qXPZWHNC8QxnflUGYvidhOxAIhQjxD?= =?iso-8859-1?q?QoD14gb/AQ4Fy/JhnlSS3aw92bQtTr+8VRzIgHzJXEkSlcVdre2x+d0LBljw?= =?iso-8859-1?q?OHQesaiUV0OQ/qZATQByv0YOGZ1njLj1GxnDcC+gezXSYvYi6htmIA/6T4eN?= =?iso-8859-1?q?aK4cjmtLouEDkVQEgfwOPCzt/1B8WdUc86BKko5+W2CIrmF1sIRNi8klGdbx?= =?iso-8859-1?q?A4qbeORR+IN+xRFvEiCaB5hdMlqJmpOof5GXO+Pze+BGslut3su+lyNp2mQA?= =?iso-8859-1?q?/8Ry9h4d8d4nTf8a9c5J+t09D9m1m+OU6k9hB4AsweKf1Q2TBOf95sevi4mb?= =?iso-8859-1?q?f5Q4w0kEOtNOtXCwmZrFX9+4vDlJpjBj+sTUQAbR48ntBZ1eEXL3PplflWPt?= =?iso-8859-1?q?m/N1yvWHkfp2uquWhySj/39bWtQpRa4ws5a/5/MbFYNVi8taFqm+W4FeqE1t?= =?iso-8859-1?q?t/k2HjJwvPEFm3aL9qEBS6PgwNmx2PUTs3wSYJRYaLYA0tYUwA4zlMxVFQHw?= =?iso-8859-1?q?AaZbjIUVpHAkTXhnFCULc8nTmvYmFNkT8tkBKNxlKTl8QBvlcRW5grk2xoEK?= =?iso-8859-1?q?9bPXKImpR9aKaIrVIDSatvymg4RIMNgSojHSjP+XytNWeSZtC9F9OPlzdsTs?= =?iso-8859-1?q?=3D?= MIME-Version: 1.0 X-OriginatorOrg: eviden.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7602.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6eff158-90ec-420a-cc39-08dd524ed1ca X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Feb 2025 08:07:43.7011 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 7d1c7785-2d8a-437d-b842-1ed5d8fbe00a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: WdraUOMs4pD1GxNBB6uqfL9ZkUCKpXEXBAfzN0S6nhJmKS/XP3vKfyOeOTcpv3LHePjud5rYmHyXEKfc3jI+9lqxZvEyziUTwC0PvpQbkRpoxY3vvZXy8UP2S5nzawmM X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR07MB6459 Received-SPF: pass client-ip=80.78.11.82; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost1.eviden.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org From: Clement Mathieu--Drif We use this information in vtd_do_iommu_translate to populate the IOMMUTLBEntry and indicate the correct page mask. This prevents ATS devices from sending many useless translation requests when a megapage or gigapage iova is not mapped to a physical address. Signed-off-by: Clement Mathieu--Drif --- hw/i386/intel_iommu.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index b9b5d492f5..9daf8025cc 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -1995,9 +1995,9 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, uint32_t pasid) { dma_addr_t addr = vtd_get_iova_pgtbl_base(s, ce, pasid); - uint32_t level = vtd_get_iova_level(s, ce, pasid); uint32_t offset; uint64_t flpte, flag_ad = VTD_FL_A; + *flpte_level = vtd_get_iova_level(s, ce, pasid); if (!vtd_iova_fl_check_canonical(s, iova, ce, pasid)) { error_report_once("%s: detected non canonical IOVA (iova=0x%" PRIx64 "," @@ -2006,11 +2006,11 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, } while (true) { - offset = vtd_iova_level_offset(iova, level); + offset = vtd_iova_level_offset(iova, *flpte_level); flpte = vtd_get_pte(addr, offset); if (flpte == (uint64_t)-1) { - if (level == vtd_get_iova_level(s, ce, pasid)) { + if (*flpte_level == vtd_get_iova_level(s, ce, pasid)) { /* Invalid programming of pasid-entry */ return -VTD_FR_PASID_ENTRY_FSPTPTR_INV; } else { @@ -2036,15 +2036,15 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, if (is_write && !(flpte & VTD_FL_RW)) { return -VTD_FR_SM_WRITE; } - if (vtd_flpte_nonzero_rsvd(flpte, level)) { + if (vtd_flpte_nonzero_rsvd(flpte, *flpte_level)) { error_report_once("%s: detected flpte reserved non-zero " "iova=0x%" PRIx64 ", level=0x%" PRIx32 "flpte=0x%" PRIx64 ", pasid=0x%" PRIX32 ")", - __func__, iova, level, flpte, pasid); + __func__, iova, *flpte_level, flpte, pasid); return -VTD_FR_FS_PAGING_ENTRY_RSVD; } - if (vtd_is_last_pte(flpte, level) && is_write) { + if (vtd_is_last_pte(flpte, *flpte_level) && is_write) { flag_ad |= VTD_FL_D; } @@ -2052,14 +2052,13 @@ static int vtd_iova_to_flpte(IntelIOMMUState *s, VTDContextEntry *ce, return -VTD_FR_FS_BIT_UPDATE_FAILED; } - if (vtd_is_last_pte(flpte, level)) { + if (vtd_is_last_pte(flpte, *flpte_level)) { *flptep = flpte; - *flpte_level = level; return 0; } addr = vtd_get_pte_addr(flpte, aw_bits); - level--; + (*flpte_level)--; } }