From nobody Mon Feb 9 13:39:22 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@eviden.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=eviden.com); dmarc=pass(p=reject dis=none) header.from=eviden.com ARC-Seal: i=2; a=rsa-sha256; t=1713801221; cv=pass; d=zohomail.com; s=zohoarc; b=ecDNHZCy2IIwEdh/ycOcY/ICI3miEhUOtNrpfu8jtK+2sSpCdsJKWBtgFgiB+etuNJSe4AZWF+SCPwJ/7Swwh8rzWFrJ60lLi+BeEKR0xmhW5M42OovsMGwfy2+5cv2IZ+vM4/RsBljPkzBkzYt4D0/W3A0MBrzpFRHtqf8k4Zs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713801221; h=Content-ID:Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=liB5/3/LBFtQuwFWwuBS9Ju+8ITpXVCiihZJfH7mZeY=; b=kv4v2DSbZoX43hA9ZtUskVXV08VzOqAmLh3slXdayBuu3+Bp5T68hPyJZ0dLDImUpN+eBQKSy+sfKUbqY721bdX8O7NhLkmS7TNSGGMkVcwkVRit1k6sZqkAlJcSjdMXpZpIEIjN4QWUVSDpvFgHo96DTZf3+kwWO4Y7gDQaAbc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass header.i=@eviden.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=eviden.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713801221296693.8693702649829; Mon, 22 Apr 2024 08:53:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ryvyi-0007Gm-Oc; Mon, 22 Apr 2024 11:53:12 -0400 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 1ryvyc-0007Em-KQ for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:07 -0400 Received: from smarthost4.eviden.com ([80.78.11.85]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ryvyZ-0007bS-Fx for qemu-devel@nongnu.org; Mon, 22 Apr 2024 11:53:05 -0400 Received: from mail-am0eur02lp2233.outbound.protection.outlook.com (HELO EUR02-AM0-obe.outbound.protection.outlook.com) ([104.47.11.233]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Apr 2024 17:52:57 +0200 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by DU0PR07MB9626.eurprd07.prod.outlook.com (2603:10a6:10:31e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Mon, 22 Apr 2024 15:52:55 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%5]) with mapi id 15.20.7472.044; Mon, 22 Apr 2024 15:52:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1713801183; x=1745337183; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=liB5/3/LBFtQuwFWwuBS9Ju+8ITpXVCiihZJfH7mZeY=; b=qhZUrunvONVtrffB2As2wKE9TBDGBp1IgCcTR2zPKl3NDJIeQ3mN7S8R Oev/3LVtmtJ2NDJnj35Jh62yYOecf0QcZcAHCXkzsob8S8LKBJDLDlIOG ZKwVpQQ3gi0gqqwDx088jiNVtCaVk241+TjDJduW+83JXQsrLelUdg/qD YZJIEuD/vZRLeZfX43pqJGtX3lugOB5vGAgkgTgOlZQ0YWe+V2aAnfgJS vZlRhSx5gr6l1hYWphH4JybhVcL7DA5i1KXLk7hampZsqx02n+aUzJqNo 59LMeVpnMVzQHgdt1Lr9nA9rLI0IBbY7ZR5UqQnrNpzjwXuPqUKrBUlFK w==; X-IronPort-AV: E=Sophos;i="6.07,220,1708383600"; d="scan'208";a="11027675" X-MGA-submission: =?us-ascii?q?MDEmgtisbYvx7d4zZunQvzwQeiYVh8l7g9V+2i?= =?us-ascii?q?RKt2d//kZdUMwyXtL+Gf0NFhMMGqu21VHc6IIu71I665/j78F2EF/4zH?= =?us-ascii?q?wfS8I3YGiSHq5vRnYRa63j8Ssh4VDC/mvyG68C/l2F41V+iDbXMVpcIQ?= =?us-ascii?q?iHTTAA5Ev0GthkgUVAp5awPA=3D=3D?= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=arrz6NMmFcqWSBZgRz+pSt9tv5bq6E443SDYjuAShXfR2Ns3YhiLV3ZFhZhAoZ/FQ3jjbMZmRaoj2H6JGmhjHjIaOOsIMPN5SGaVTHVcPbcQtvG4wnuBEBrQIqs/mwvRxMFLqCmmQU981dskc4EB3wEIgXUS1jU2+aqSxEViL6rdD72RKtEwtYUjM2k64HZ2+6obbTXuc1PdJ6bMIX1sR5fvU7iP1B6GLek6kXcv55GiBwFVmcvfiwi+RmbFFShKfc2Y5s6USmuTssXkhg2Y1kwI0A3UNSRrcSeJMP/EFOr8tTsqjWwInXuRwo92Y1MmgYb99CJo0d0gbtObzfB5MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=liB5/3/LBFtQuwFWwuBS9Ju+8ITpXVCiihZJfH7mZeY=; b=OueahUFXNWu24s+7nDZ+69DugkMuyVcxsua2lNPF/GbhXpSHlXzr0Z65lSiBIGLDOqWr3gKPR7SEufAwwvDNW3UeWRKxjAHJ9ZCTW3IrDdm+lxCHFh0IiN9QjTin+2iB70wUss3+j4Ljytqo0FEq/34ejyI9bkPAiqwOjQs43IXjUAeHymMtcyg4FU2x8jAVT26FWORpJYf3PReli4pcKsd2zh4sQ9+BZ7cKgYcO3Lxnf5/d03oiMUnKvqMZE28ZfFyy9qa4wnJizg2UY/q50JiI3u3cDHDNFCQUPQ4PiWAloVmRomYeBuJxOi/TlZKZapHL18nVZyoN4Rd3tPutfg== 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 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH intel_iommu 6/7] intel_iommu: add PASID-based IOTLB invalidation Thread-Topic: [PATCH intel_iommu 6/7] intel_iommu: add PASID-based IOTLB invalidation Thread-Index: AQHalM0jxDwfRa4+HUShrGVOuKfHWw== Date: Mon, 22 Apr 2024 15:52:53 +0000 Message-ID: <20240422155236.129179-7-clement.mathieu--drif@eviden.com> References: <20240422155236.129179-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240422155236.129179-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_|DU0PR07MB9626:EE_ x-ms-office365-filtering-correlation-id: 8c73af8e-8d57-4f34-a228-08dc62e446a0 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?utf-8?B?V1NCSDEyNno4cm9xYTN3OTdsYjI2SXV5N0xNYTFpL1RMZld6Nk5JMmpOUkdq?= =?utf-8?B?ZU5jd0ZVM1hVZHorT1RYT3YvVmlqV2ZjK3hBZ29xZzVNakR0SEFvYnc4M2RH?= =?utf-8?B?anhIWWtuRlo4eHVTSkZPTkp5Y1owbFIwQXN5czdqV3lYejRtc1hKRENXZ1V3?= =?utf-8?B?WVRkK0NhL2ZPVzJTRzY1VFRmcFBvYm1jRWJzTEkyQU9DZ2pUM3EzbXI2VElE?= =?utf-8?B?VUVqTUdicDNhNzlJN3lkRHhXeVFGMTVIOXJnT2Rkd21zMGxRd095NmUzd0d6?= =?utf-8?B?dzBGMmNrM1YwcVc0S1pTWHJUZnJKZVlsRDFGS2xmb1JtQ3ltUTg3WkpFNUgx?= =?utf-8?B?TGVCdGNkZHVVZ01OM3Byc2lQSlR3Y2M5bWs0akl3T2x5TzhSSVZBVFJ1QUhC?= =?utf-8?B?TGpJeDB5bFpBdC9aOS9yd1RjTFVobHVkK3ljbWQ1VVhOdFdoczdjYUx5UXdw?= =?utf-8?B?SXI5U3VjeHY2NjUvR3l3L1lXQ0xVVHFFRVFTN29YVzkrU2JOdHRwRk9LczFj?= =?utf-8?B?S0c3SUExamJhelNOeEczVElGL05FNHRPRXJGM3ZlRGNaTHJmbkEyd3NodExW?= =?utf-8?B?b2lXamJqWnRLd3UyL1NObGZpZ05rWmFjS1B2aXRGczJwdFliSUFqK2xWMEpx?= =?utf-8?B?RVRINS9IU0pRaXpyWVEwamZ6TEdqcHEzOXFkQVlRcDU3K211UU0xZlFqZWFu?= =?utf-8?B?QVJKWjBlQmFUUEdOeldwOGFDRm1ZTWV1UFhXNmRtaVVHQzczaDY5VnY1SXMz?= =?utf-8?B?UGN0bkc3dmVwSjZaU3VMQi9kSXU1ZlpTcXEvcXJsNkVRVFdsRVQyQmF6N29Z?= =?utf-8?B?cUF4UDdFb21UVklaYi84SzdoeUdoZUtMZjF5ZUV1VWVTc2tKSEtPS3hBUU5M?= =?utf-8?B?VzFNb2kwZGw1N0NVMjVxRWg4NXN3MjUwMk9sOFovUkR5UVoxY3VFVjBNZDVp?= =?utf-8?B?YjNZUWZGa05kK21heWRyVkFmdDJUWFB4QXRZUXc0dENiejcxTS9SanRwb3Za?= =?utf-8?B?ZVdIeFlvK0tRTENyUjVLK2t2UzdhYnhLUDVGSVg2bHBTMnlTTEtHVXJuVzN4?= =?utf-8?B?eG9BTjZIRDVwK1VCSjRjUmZWM3QvaExnOWhtNFVTS3BCdVRVMStBUG10NTBO?= =?utf-8?B?WkdHRGk3b1ZUV0dRbHVhRnU1Y1M4YUZUd3ViNXlLMU95NDF0TFU5V291MHRt?= =?utf-8?B?KytzYlhTbmpwVSsrSmtENFYrTUdBUnhxUnBlcDZZN2t2NzdzUllJQmd1TGIr?= =?utf-8?B?S2NBL3ZIVElrTC9wZjlFR082RDczYlJQS20rdCtuZHMvejhQUkozNnF5MEUv?= =?utf-8?B?VWx5NWJvVW04dUlBbElYY2ZURUpXQ0VVY3lLbDh6ejFUT3RaUzNQTDVhbHYw?= =?utf-8?B?QnVaeXBxelZZLy9xQSszZm4xZU8yWkRqK3NvUGViRk1FYVdHWDVlSEJkb092?= =?utf-8?B?ZTlaN0xTN0k5akJyaVM5WVBkeS8wZGZMRDZpcmxzSUFrc05CQm5jOEVDWTI3?= =?utf-8?B?MWJrU2ZkZGlZMnhuM0pmSDhEbTNUM2JrT2RqdkNPVFVZdVFoMDZIemw4M3M3?= =?utf-8?B?Nlg2bWVyd1Z1OWVBVzlBcXkwSFdKWnNZVG5GYjhidXlObERuV0JiWmQyZHlI?= =?utf-8?B?Z291SnhlaEFDMkRZVEpPRU9qb1JHZWp0Znl5SXRScmFxdGpRSXBsZElSTzNN?= =?utf-8?B?MHZHUDRnUm9yQjd4cTF2N3NVc1Q5dE1oT0pUNW96Um9Cb0pTUjFrMy84UU9D?= =?utf-8?B?VHowdFEwaWNwZkpLMCswYXRHSHAxUG83bVFLRFkwS2dzRGRvQ2NIQmlrcEY0?= =?utf-8?B?L2I0OS9IQVNpWUxtKzJKdz09?= 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:(13230031)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bmg1N0Z1R0ltRzBZT3pjOXFsTEY1Z01oS1FjTm1TRmZEUldrTHBKbzVKSmlK?= =?utf-8?B?NTF2WlNlWVZNRXFQeEdoUWVDYmVGNG9LZ0hqMzBlYklhZ0ROc3djaW9mMW5k?= =?utf-8?B?eDkwQitFeDh1OCtwV1lVS1E4dmpjbUgvbFdpaktyeTE2MG4xNmFpTkVaWVBL?= =?utf-8?B?VnBydFJ2RmttZEM1WGNKOWtYclJVSTlXcjNIR29EMVhmMmVZTmlGT2cxSE5J?= =?utf-8?B?bmtuODkxQzM4dmg5dUEvMUtFbGJYZGdFNEVZMzA5cFpydnhkTWJ0SGJ0MXJH?= =?utf-8?B?NGVSSTZONWhPaTM0TFphZlRTT1dQMGl5WjE3czE3akpvd214NW01blBiTFJD?= =?utf-8?B?aFRHNDdqY1JsUmNjUkpVRWp1dnMwbFd3ckphSUFOVkN1VHlvbjZobmQ2c085?= =?utf-8?B?cTJuL2t0aks2emt5MDR6cERUaWRaeVQzN05YM2xXaHhOQmozWXFUZ3grZVNP?= =?utf-8?B?WFExNnc5UHpuL3pyNW5EUDVSL1BGVHVOUWV1c0xUU3BNYW9mRHU0S0hkUFJB?= =?utf-8?B?L1c4WDkzNy9idzdsMXlhck1nUWt6T0paWHJQR2l4aXF5LzZ3R2ZnWE5qU0wv?= =?utf-8?B?eFBQeVNOZTllaU9XT3R1cHk0a3k4MjFaMWgyeHlUallIemc0UkxCaHQ5MzlV?= =?utf-8?B?QWZTMXlNQ2FyV2ZheG85cUhMdk1rZUNzMUZEWDJVTDk0V2U1RmVlY3ZlN0VU?= =?utf-8?B?cEhYc1NYNVk2ZkpHTUxyMS9hZVduMFNhVjdkNXJjdEl5cHNTVUJHUk4vdXBh?= =?utf-8?B?TnFVOUtwNnlMUU05emlaQ29kWnNwRGRZOTk4QlJLUU9TemFiUjRaR1c0b21s?= =?utf-8?B?YUR2aE5raUVWUktMSzdUa29STDBOdnVvWmtOMHdHdlBvaVBpLzR5WTVtZmxC?= =?utf-8?B?NWg3ZWRPMFF0aGZZTkdQZVNHbitOS0RmVWJNR3NNOFBTNk9ldERvTEoxSXJo?= =?utf-8?B?dFhxZzNpdktDR2pYMWJ3M1lqTDBmcUlRcU5yZHlmbDRqUkpvdks4SWZ1c2J3?= =?utf-8?B?Wk9yWkM3NmNlSW5EN1loOVlmSGZDMFp6QStreFZzVXpuYnZYaDd5dkVZTmlK?= =?utf-8?B?V0FtNWZtNU94M3Vxc0MwWkVvL0tzclJTL1JicEkrc1JUNzNxSG9zYzl2N3di?= =?utf-8?B?Q2lIUERIR2wxbFhKRXh1QXZZcllqamQ1YmcvZTJmYndPcGV2a0pkd1ZOTUJ0?= =?utf-8?B?dFEvZVpWMFoyeVZvSWh5dVpBbTRyclBJVXJ2NGRKNWE3ayt3Q1FHcXRCVzNz?= =?utf-8?B?Y2JIQlptUWFkK0dpNzl1OWczNXR0Qy9TQTE1UEpyQUJNci9YYXNMYzU1bGRk?= =?utf-8?B?VVVEU1lZS2VtVGVOUllSbG9LUTIxMFQ3OHQxRnNWMk1RNGJQdGt1UjJQVnlV?= =?utf-8?B?eHVPSUdOUlZUb1IxalVXRXRJT3dVNlZ3VDR6THpHRDJEdjRFWmJKWFVZTmJG?= =?utf-8?B?UEhWNUVVUkQ3bnNpWWZUMjBMbitpNVgzZDhXTXE1RXlsMGdPV3ZSOFBsVUc0?= =?utf-8?B?QVdwQUdEUHYycTFiMHRyakNyVS9ZOFltM2JZa0ZIZ2M0NTFvSnd0cmRGQnhP?= =?utf-8?B?WFUrOVhIcGNOWXlYTG9uQkFNSVlIZVkvTXpkcjYybm4xeUtzTTloNEV6UGhs?= =?utf-8?B?S2tQY09MMkI3V1hGd2FUcmJFT1JBd2lpckJObzcwM1hiVXNFbC9pVzhiY2JQ?= =?utf-8?B?Q09abFdoZ1JyenR2b1VybWZHRGlvWW83T2NCd3hVNEJibmRnaDV2TGdrZ2Vl?= =?utf-8?B?WmZSMk1wQVJVTWVXaWZ2SVVndW9nTlladEVScXZsaFdxTFNXa1RHR3dPUE9O?= =?utf-8?B?NC9DSGdLazdteEMwZzY1eWgyenlMV09SY2NlN3Z6YTNReTVNcVo1RlBDVEpS?= =?utf-8?B?UG1sbFRQSnBscFdSTnhWUkFidTRnNjJ5bzVPOXZId3F1Z0JIbmhBb0lRZEg5?= =?utf-8?B?SFdkS1RNZ04xOXUxUDMzVTRCNHdFUWRHOEdNYXdzVE9La1hiblhTVzk1OUJ0?= =?utf-8?B?K0xPZGlobXFGN3FOY0Q4RUJYbXlReGttcTJialUrMUZHR1B0M3hITWVXTXhr?= =?utf-8?B?ajVmQ0pTc0k0VGpzTDZPdElENTZoTW1sT0h4NHVMR0JZNGNCR29udXNmK1lq?= =?utf-8?B?eXltMGI1Y2x3Nk81bDBZVUMzWTZsNTdUUERjdFZDRk9INk5vdXZkU25DbnEx?= =?utf-8?Q?kkQbgyBqo7Kx6uTcxbIPQTY=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <1D0AF3F45FD2584CB9B3FF76BA129135@eurprd07.prod.outlook.com> Content-Transfer-Encoding: quoted-printable 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: 8c73af8e-8d57-4f34-a228-08dc62e446a0 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Apr 2024 15:52:53.7869 (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: GiZKjh03M7TB2IfANiuOZa+n/m6Ju+bn484FcHuX631oHfUplszFa+y3EvZRSfS45xAl/KXkAybI3QY3/9T9nm2iRqEyca/VNZDRlW/deLZJ29lg7/I/GOYd2K006EGA X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB9626 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=80.78.11.85; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost4.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, 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @eviden.com) X-ZM-MESSAGEID: 1713801222629100001 Signed-off-by: Cl=C3=A9ment Mathieu--Drif --- hw/i386/intel_iommu.c | 130 ++++++++++++++++++++++++++++++--- hw/i386/intel_iommu_internal.h | 51 +++++++------ 2 files changed, 150 insertions(+), 31 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index aaac61bf6a..4b54a45107 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -277,9 +277,22 @@ static gboolean vtd_hash_remove_by_page(gpointer key, = gpointer value, VTDIOTLBPageInvInfo *info =3D (VTDIOTLBPageInvInfo *)user_data; uint64_t gfn =3D (info->addr >> VTD_PAGE_SHIFT_4K) & info->mask; uint64_t gfn_tlb =3D (info->addr & entry->mask) >> VTD_PAGE_SHIFT_4K; - return (entry->domain_id =3D=3D info->domain_id) && - (((entry->gfn & info->mask) =3D=3D gfn) || - (entry->gfn =3D=3D gfn_tlb)); + return ( + (entry->domain_id =3D=3D info->domain_id) && + (info->pasid =3D=3D entry->pasid) + ) && ( + ((entry->gfn & info->mask) =3D=3D gfn) || + (entry->gfn =3D=3D gfn_tlb) + ); +} + +static gboolean vtd_hash_remove_by_pasid(gpointer key, gpointer value, + gpointer user_data) +{ + VTDIOTLBEntry *entry =3D (VTDIOTLBEntry *)value; + VTDIOTLBPasidEntryInvInfo *info =3D (VTDIOTLBPasidEntryInvInfo *)user_= data; + return ((entry->domain_id =3D=3D info->domain_id) && + (info->pasid =3D=3D entry->pasid)); } =20 /* Reset all the gen of VTDAddressSpace to zero and set the gen of @@ -1287,8 +1300,10 @@ static int vtd_iova_to_pte_sl(IntelIOMMUState *s, V= TDContextEntry *ce, if (ret !=3D 0) { return ret; } + *reads =3D (*reads) && (slpte & VTD_SL_R); *writes =3D (*writes) && (slpte & VTD_SL_W); + if ((slpte & access_right_check) !=3D access_right_check) { error_report_once("%s: detected slpte permission error " "(iova=3D0x%" PRIx64 ", level=3D0x%" PRIx32 = ", " @@ -2484,23 +2499,61 @@ static void vtd_iotlb_page_invalidate_notify(IntelI= OMMUState *s, } } =20 +static VTDIOTLBPageInvInfo vtd_build_tlb_page_inv_info(uint16_t domain_id, + hwaddr addr, uint8_= t am, + uint32_t pasid) +{ + assert(am <=3D VTD_MAMV); + VTDIOTLBPageInvInfo info =3D { + .domain_id =3D domain_id, + .addr =3D addr, + .mask =3D ~((1ULL << am) - 1), + .pasid =3D pasid + }; + return info; +} + static void vtd_iotlb_page_invalidate(IntelIOMMUState *s, uint16_t domain_= id, hwaddr addr, uint8_t am) { - VTDIOTLBPageInvInfo info; + VTDIOTLBPageInvInfo info =3D vtd_build_tlb_page_inv_info(domain_id, ad= dr, + am, PCI_NO_PASI= D); =20 trace_vtd_inv_desc_iotlb_pages(domain_id, addr, am); =20 - assert(am <=3D VTD_MAMV); - info.domain_id =3D domain_id; - info.addr =3D addr; - info.mask =3D ~((1 << am) - 1); vtd_iommu_lock(s); g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_page, &info); vtd_iommu_unlock(s); + vtd_iotlb_page_invalidate_notify(s, domain_id, addr, am, PCI_NO_PASID); } =20 +static void vtd_pasid_based_iotlb_page_invalidate(IntelIOMMUState *s, + uint16_t domain_id, + hwaddr addr, + uint8_t am, uint32_t pas= id) +{ + VTDIOTLBPageInvInfo info =3D vtd_build_tlb_page_inv_info(domain_id, ad= dr, + am, pasid); + vtd_iommu_lock(s); + g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_page, &info); + vtd_iommu_unlock(s); +} + +static void vtd_pasid_based_iotlb_invalidate(IntelIOMMUState *s, + uint16_t domain_id, + uint32_t pasid) +{ + assert(pasid !=3D PCI_NO_PASID); + VTDIOTLBPasidEntryInvInfo info =3D { + .domain_id =3D domain_id, + .pasid =3D pasid + }; + vtd_iommu_lock(s); + g_hash_table_foreach_remove(s->iotlb, vtd_hash_remove_by_pasid, &info); + vtd_iommu_unlock(s); +} + /* Flush IOTLB * Returns the IOTLB Actual Invalidation Granularity. * @val: the content of the IOTLB_REG @@ -2759,7 +2812,7 @@ static bool vtd_get_inv_desc(IntelIOMMUState *s, static bool vtd_process_wait_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc) { if ((inv_desc->hi & VTD_INV_DESC_WAIT_RSVD_HI) || - (inv_desc->lo & VTD_INV_DESC_WAIT_RSVD_LO)) { + (inv_desc->lo & VTD_INV_DESC_WAIT_RSVD_LO(s->ecap))) { error_report_once("%s: invalid wait desc: hi=3D%"PRIx64", lo=3D%"P= RIx64 " (reserved nonzero)", __func__, inv_desc->hi, inv_desc->lo); @@ -2785,6 +2838,11 @@ static bool vtd_process_wait_desc(IntelIOMMUState *s= , VTDInvDesc *inv_desc) } else if (inv_desc->lo & VTD_INV_DESC_WAIT_IF) { /* Interrupt flag */ vtd_generate_completion_event(s); + } else if (inv_desc->lo & VTD_INV_DESC_WAIT_FN) { + /* + * SW =3D 0, IF =3D 0, FN =3D 1 + * Nothing to do as we process the events sequentially + */ } else { error_report_once("%s: invalid wait desc: hi=3D%"PRIx64", lo=3D%"P= RIx64 " (unknown type)", __func__, inv_desc->hi, @@ -2957,6 +3015,54 @@ done: return true; } =20 +static bool vtd_process_piotlb_desc(IntelIOMMUState *s, + VTDInvDesc *inv_desc) +{ + uint32_t pasid; + uint16_t domain_id; + hwaddr addr; + uint8_t am; + + if ((inv_desc->lo & VTD_INV_DESC_IOTLB_PASID_RSVD_LO) || + (inv_desc->hi & VTD_INV_DESC_IOTLB_PASID_RSVD_HI)) { + error_report_once("%s: invalid piotlb inv desc: hi=3D0x%"PRIx64 + ", lo=3D0x%"PRIx64" (reserved bits unzero)", + __func__, inv_desc->hi, inv_desc->lo); + return false; + } + + domain_id =3D VTD_INV_DESC_IOTLB_DID(inv_desc->lo); + pasid =3D VTD_INV_DESC_IOTLB_PASID(inv_desc->lo); + addr =3D VTD_INV_DESC_IOTLB_ADDR(inv_desc->hi); + am =3D VTD_INV_DESC_IOTLB_AM(inv_desc->hi); + + switch (inv_desc->lo & VTD_INV_DESC_IOTLB_G) { + case VTD_INV_DESC_IOTLB_PASID_PASID: + vtd_pasid_based_iotlb_invalidate(s, domain_id, pasid); + break; + + case VTD_INV_DESC_IOTLB_PASID_PAGE: + if (am > VTD_MAMV) { + error_report_once("%s: invalid piotlb inv desc: hi=3D0x%"PRIx64 + ", lo=3D0x%"PRIx64" (am=3D%u > VTD_MAMV=3D%u= )", + __func__, inv_desc->hi, inv_desc->lo, + am, (unsigned)VTD_MAMV); + return false; + } + vtd_pasid_based_iotlb_page_invalidate(s, domain_id, addr, am, pasi= d); + break; + + default: + error_report_once("%s: invalid piotlb inv desc: hi=3D0x%"PRIx64 + ", lo=3D0x%"PRIx64" (type mismatch: 0x%llx)", + __func__, inv_desc->hi, inv_desc->lo, + inv_desc->lo & VTD_INV_DESC_IOTLB_G); + return false; + } + + return true; +} + static bool vtd_process_inv_desc(IntelIOMMUState *s) { VTDInvDesc inv_desc; @@ -2988,7 +3094,7 @@ static bool vtd_process_inv_desc(IntelIOMMUState *s) break; =20 /* - * TODO: the entity of below two cases will be implemented in future s= eries. + * TODO: the entity of below case will be implemented in future series. * To make guest (which integrates scalable mode support patch set in * iommu driver) work, just return true is enough so far. */ @@ -2996,6 +3102,10 @@ static bool vtd_process_inv_desc(IntelIOMMUState *s) break; =20 case VTD_INV_DESC_PIOTLB: + trace_vtd_inv_desc("piotlb", inv_desc.hi, inv_desc.lo); + if (!vtd_process_piotlb_desc(s, &inv_desc)) { + return false; + } break; =20 case VTD_INV_DESC_WAIT: diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index ed61979934..4f734ce67b 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -193,6 +193,7 @@ #define VTD_ECAP_MHMV (15ULL << 20) #define VTD_ECAP_SRS (1ULL << 31) #define VTD_ECAP_PASID (1ULL << 40) +#define VTD_ECAP_PDS (1ULL << 42) #define VTD_ECAP_SMTS (1ULL << 43) #define VTD_ECAP_SLTS (1ULL << 46) #define VTD_ECAP_FLTS (1ULL << 47) @@ -386,12 +387,13 @@ typedef union VTDInvDesc VTDInvDesc; #define VTD_INV_DESC_NONE 0 /* Not an Invalidate Descripto= r */ =20 /* Masks for Invalidation Wait Descriptor*/ -#define VTD_INV_DESC_WAIT_SW (1ULL << 5) -#define VTD_INV_DESC_WAIT_IF (1ULL << 4) -#define VTD_INV_DESC_WAIT_FN (1ULL << 6) -#define VTD_INV_DESC_WAIT_DATA_SHIFT 32 -#define VTD_INV_DESC_WAIT_RSVD_LO 0Xffffff80ULL -#define VTD_INV_DESC_WAIT_RSVD_HI 3ULL +#define VTD_INV_DESC_WAIT_SW (1ULL << 5) +#define VTD_INV_DESC_WAIT_IF (1ULL << 4) +#define VTD_INV_DESC_WAIT_FN (1ULL << 6) +#define VTD_INV_DESC_WAIT_DATA_SHIFT 32 +#define VTD_INV_DESC_WAIT_RSVD_LO(ecap) (0xffffff00ULL | \ + ((ecap & VTD_ECAP_PDS) ? 0 : (1 <= < 7))) +#define VTD_INV_DESC_WAIT_RSVD_HI 3ULL =20 /* Masks for Context-cache Invalidation Descriptor */ #define VTD_INV_DESC_CC_G (3ULL << 4) @@ -404,20 +406,20 @@ typedef union VTDInvDesc VTDInvDesc; #define VTD_INV_DESC_CC_RSVD 0xfffc00000000ffc0ULL =20 /* Masks for IOTLB Invalidate Descriptor */ -#define VTD_INV_DESC_IOTLB_G (3ULL << 4) -#define VTD_INV_DESC_IOTLB_GLOBAL (1ULL << 4) -#define VTD_INV_DESC_IOTLB_DOMAIN (2ULL << 4) -#define VTD_INV_DESC_IOTLB_PAGE (3ULL << 4) -#define VTD_INV_DESC_IOTLB_DID(val) (((val) >> 16) & VTD_DOMAIN_ID_MAS= K) -#define VTD_INV_DESC_IOTLB_ADDR(val) ((val) & ~0xfffULL) -#define VTD_INV_DESC_IOTLB_AM(val) ((val) & 0x3fULL) -#define VTD_INV_DESC_IOTLB_RSVD_LO 0xffffffff0000ff00ULL -#define VTD_INV_DESC_IOTLB_RSVD_HI 0xf80ULL -#define VTD_INV_DESC_IOTLB_PASID_PASID (2ULL << 4) -#define VTD_INV_DESC_IOTLB_PASID_PAGE (3ULL << 4) -#define VTD_INV_DESC_IOTLB_PASID(val) (((val) >> 32) & VTD_PASID_ID_MASK) -#define VTD_INV_DESC_IOTLB_PASID_RSVD_LO 0xfff00000000001c0ULL -#define VTD_INV_DESC_IOTLB_PASID_RSVD_HI 0xf80ULL +#define VTD_INV_DESC_IOTLB_G (3ULL << 4) +#define VTD_INV_DESC_IOTLB_GLOBAL (1ULL << 4) +#define VTD_INV_DESC_IOTLB_DOMAIN (2ULL << 4) +#define VTD_INV_DESC_IOTLB_PAGE (3ULL << 4) +#define VTD_INV_DESC_IOTLB_DID(val) (((val) >> 16) & VTD_DOMAIN_ID= _MASK) +#define VTD_INV_DESC_IOTLB_ADDR(val) ((val) & ~0xfffULL) +#define VTD_INV_DESC_IOTLB_AM(val) ((val) & 0x3fULL) +#define VTD_INV_DESC_IOTLB_RSVD_LO 0xffffffff0000ff00ULL +#define VTD_INV_DESC_IOTLB_RSVD_HI 0xf80ULL +#define VTD_INV_DESC_IOTLB_PASID_PASID (2ULL << 4) +#define VTD_INV_DESC_IOTLB_PASID_PAGE (3ULL << 4) +#define VTD_INV_DESC_IOTLB_PASID(val) (((val) >> 32) & VTD_PASID_ID_= MASK) +#define VTD_INV_DESC_IOTLB_PASID_RSVD_LO 0xfff000000000ffc0ULL +#define VTD_INV_DESC_IOTLB_PASID_RSVD_HI 0xf80ULL =20 /* Mask for Device IOTLB Invalidate Descriptor */ #define VTD_INV_DESC_DEVICE_IOTLB_ADDR(val) ((val) & 0xfffffffffffff000ULL) @@ -471,10 +473,17 @@ struct VTDIOTLBPageInvInfo { uint16_t domain_id; uint32_t pasid; uint64_t addr; - uint8_t mask; + uint64_t mask; }; typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo; =20 +/* Information about PASID-selective IOTLB invalidate */ +struct VTDIOTLBPasidEntryInvInfo { + uint16_t domain_id; + uint32_t pasid; +}; +typedef struct VTDIOTLBPasidEntryInvInfo VTDIOTLBPasidEntryInvInfo; + /* Pagesize of VTD paging structures, including root and context tables */ #define VTD_PAGE_SHIFT 12 #define VTD_PAGE_SIZE (1ULL << VTD_PAGE_SHIFT) --=20 2.44.0