From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048897; cv=pass; d=zohomail.com; s=zohoarc; b=bpSgK1cPR0e5994OIFwKDmBvLxruhUnVejGZFc2DYpN7KY5WiKK/OoRCeHpyDKClhwlCLUIVNZM/aZBoIGWeQgBDfbKxILqTxrEQhzgV0k7H+f7vJaWV6XJIB4i7JXGwprQETSTkFiUeLipZhTLSamhcT6B5+8Ig+KmzODd68LM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048897; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=o0wKswGnoqukjZ6Pa85VgI1m2PSff7ggRLxjCuUhdmA=; b=Ws2jFACjXispgWqtlMFu8bxdiidGBU2tO4x/eBsEzsXNzEbUD9e/e7x3qA52Q/64wPMnyNR5s0O/DSdkEwukyrOOjyh9zLgtshEKBOJKGn8ZUbLAwM03fh5SN93IpouUKUPPkb/RGncbQtDMpehEQV8lcdTkFFwSgwDiNb1uaBM= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048897581164.43060794659903; Mon, 2 Feb 2026 08:14:57 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218791.1527656 (Exim 4.92) (envelope-from ) id 1vmwZX-0000ti-4p; Mon, 02 Feb 2026 16:14:43 +0000 Received: by outflank-mailman (output) from mailman id 1218791.1527656; Mon, 02 Feb 2026 16:14:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZX-0000tb-1m; Mon, 02 Feb 2026 16:14:43 +0000 Received: by outflank-mailman (input) for mailman id 1218791; Mon, 02 Feb 2026 16:14:41 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZV-0000fY-0W for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:41 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 46b41446-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:39 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:37 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:37 +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" X-Inumbo-ID: 46b41446-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uqJ+2fVAfmgl/Yee3BRylpSLhYoDZmb7++aMxscyIL1fPvF3XYWW4dFtdKXjufGjbsU+derlhfHHQ+MUN+wGAhEU2vqKWeL6ESVNUOpXVbyUbRbbz8j1i4FOvQihBmHe6OSEoBoJQMRFdnsgeF3q8TmphH6XoWZQWkq8zVMgl4Je9hNNoKw/yQ1Yb/NW+B8ym5mo7HwO29/QNFDZVH1Ao902f3Hgj04DVlZAH0+tj0oA81tZr/DlqCAbMRJWbV9E5bx6WIDmrXsGEyt/bp0hvop6k7aQGiBGFHTsahxKW/jFU6E7URw8qgn3nlNXHMOPU7YN2kQ2nqexfHdPPVI2nA== 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=o0wKswGnoqukjZ6Pa85VgI1m2PSff7ggRLxjCuUhdmA=; b=VGEaOUC+Eyr/6RdIkDlNuD+HKSO0Pzzco4l3haLWCDldN4qeZBxT0ysqTREAkl8IlAekrkrP01+KPps3mrna5r/k+U+PbOXIHyQCT3+Gwn+c5Jvpp+rozNjvAXyVrrWZdL3GRvT2ohBs8GpwW46PuuMeWfXmZ0mUGZ/Tij1WC08K0q2g7eWRXQKP35Wyl1X4cXZ1iHlPMRDFtEMxAuAtRY4o/1lHA5VWFTapdx1vQGM9xS3ZXqQ4zdvJk4kUEpwjB+X9mEHsjzwRoskRvPZ/xFxqLznTCbJX3EqDEl2DjPbZy+u8N1VeNHUpvw7p0VFEN8q8QtOPmh1ZPPSxB9dh2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o0wKswGnoqukjZ6Pa85VgI1m2PSff7ggRLxjCuUhdmA=; b=T+S5k4C2mrKL50I9sLcqIoHRgtwfJ0rDPCIyri5skbbrmVwKB2ZqWOBLerLZQCur1zQ1ZUcIHNoi1n1jbNiecVnotDtTwFPhAvv8NRYNGrX+9U9vaHGnrdpketl+ezONoJWtSsgkMtEaczq0ax8VGBFjhhArpY4SDFZcvqjfIoX6bgVXdJiZ3bSXNHXXzUbU01HqCnWpGasvrN+S8pcxRV2RQkQdkKzVzI81a/0bwW12vN26wqTWRQHGHNAJHKSEsRCE7umHMTiXFyc8sDoRW53iGdirM55eQryVMv2FQhtfqzVvj12sqzglt6igacc6cUHd83twNYF9qNdXkNMq7g== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 01/19] arm/gicv4 add management structure definitions Thread-Topic: [RFC PATCH 01/19] arm/gicv4 add management structure definitions Thread-Index: AQHclF8HJLYhUOMDJ0SUd+oWyr6vSg== Date: Mon, 2 Feb 2026 16:14:37 +0000 Message-ID: <21505d8f47bdabbf0f8e534eed937c5bf0a4ce02.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 249ffcf0-f16b-4229-b65e-08de6276299f x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?EsBiZTrnM0tf6t5U0/3O+gY2tkAQ6D03mZz2J46Zi05b0EXGGQysz8nTYs?= =?iso-8859-1?Q?SuhFvjdix9gpBGeqcGkBbHPNVE24wAnUZCuVkwEjWddGwv01SePHZyUpeG?= =?iso-8859-1?Q?lkkRZC8xfGU3r3Dl//4Wf2XtxB2c5ZrqNrJ1GBM9pz945oxbrPp1kasD37?= =?iso-8859-1?Q?OYhDpCQjGWEr777guwO99KJenArHcV5lvF2OcRYQFzIYOzXWLUCOWyaMvS?= =?iso-8859-1?Q?YQc5GnKxrQEXs4e7zudyI/1zmO6i3oZPqtAsVp0AXFwXIOi9Z3LrrEk5hu?= =?iso-8859-1?Q?V1lmWCo4QwCa4cxUhaFPgk97L37tPqjz09iIKHRdGSWG7Ey/n2CHWxl2TK?= =?iso-8859-1?Q?9jDGJeE9tK+cDR2+XFbxOIySk+57EaR1/pKfur4FUmlwsoHQw3lH7D7CNq?= =?iso-8859-1?Q?aLhT81VcefxHCZUQOSTgvOIcLPgpLFBBhIp3PEjco81ZtjzPy9byzauoD8?= =?iso-8859-1?Q?NYL+JJG5rNNbKkTsI+kEfwKuCn5onzVlxLjykxWFBw9Y1+o5x2dCTMGsci?= =?iso-8859-1?Q?e8rlUfAHioGC98PSPneyxiRuD4RENIM4RKNehh7Ir71/oBYncE4uamgQdU?= =?iso-8859-1?Q?j3FmLPV4YeU1qPVgY9BsQMdBwianXzOdgIbKpd1zWOBnwcvU8JX3F3OcGy?= =?iso-8859-1?Q?g0827FJmVZ0/EfOnW0JYacXpzhm/UaJtLHRXGXlT7vx9JwOAjkF3hA/P+i?= =?iso-8859-1?Q?Oj94ZAWyVlCv3xzFlgStceVHhirEBVvJAXf4Jpu4SPgMvVTQehWvYMQWIx?= =?iso-8859-1?Q?r5LKlnv3VFgzlVcuStXu8TJgkhfZSdi7SUEuyJbPRX0FlgFE6xmyAmPITL?= =?iso-8859-1?Q?PsTtGVR/8xfuKGnXXkMvbRq/XNihk6BPZR7dtpRx1033g0d8tB1wy2NEno?= =?iso-8859-1?Q?VHyDWTAItJ24XT6DOz0W4uAlXZ88u/riQhTzPZM7wbZ+qJHR/LdCeQtIq6?= =?iso-8859-1?Q?s+BQhkIySp8jXk+WsSUslprw4aDIS/EsDYBdR9SfcApwA0lQwmKM97tL1y?= =?iso-8859-1?Q?Bdhmgb8n0SyQA+E0CVjqr6VBwJshJ9WXlq116rpMEoq8k4S3n+pSyuJn5z?= =?iso-8859-1?Q?jjNwuvJyVAUb/k9uP4v7kWzSS+iIxx6xOvgkrxroYIWnTARYD8YOgrjTw4?= =?iso-8859-1?Q?2pRFiekMhIUgHyFjn6zg4iBchngb68eOC/ag9qgCkW8F+QGyKek7FPeRXC?= =?iso-8859-1?Q?+YFvs5p0B2h6aFlyVagv+EhRNF779zQl2lEjp16rO7TbReZtZ5Usv0h0Uz?= =?iso-8859-1?Q?lHTX3Ge/5bekCqLsRcY/FmZeh8x/w6hfKjiE1T4DLfaoKfu1ovDEcVSCfa?= =?iso-8859-1?Q?FHDN2lvAtyltXhkv0nCut9d8nRua9RgA2t2zbFJeELYW456lvpXwaea5I+?= =?iso-8859-1?Q?inpKB38QVtW8St7aIDDUKyVCzCMM67iUlSBrXgWdxqdVsNoTe+6xY+S1l5?= =?iso-8859-1?Q?d8A44JiXOEz3kk3vyS2SwLyDqFfjrIZaRyPfx/xzcwxFYFzIr0i7ZyBFnx?= =?iso-8859-1?Q?oLYC4FXWiZbVWTHmuSz7lC/7vFlWaYuBdoOBFhqYN6TJfYGQhhx+fhcWrP?= =?iso-8859-1?Q?g24EdPIGmUpj+gm5494tZ2YzReinFiWBwutBmHNHN1qOp7b+qrCLutoGqK?= =?iso-8859-1?Q?+wqLSzhgpVOoYoisrPMcACeuAiadEHea2ET67fJVKFw6IVVMefDf/BSNND?= =?iso-8859-1?Q?djYCXyK3BCbRg2Um+Tc=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?NCxihKok1G8mwAphd6wsO1uy+GIclQa0JTPxqgwwu/VdqBIDH3bMe7zpSN?= =?iso-8859-1?Q?Lf1NVMOWQ+DhHTrNnnrHyBMfP/NBXu+hea2070p+UVxohBvXSplUVfCanm?= =?iso-8859-1?Q?QT/2F3vo1fGQj+b55kNMJimxIDp2r6jswYI5npIvZXLA4je0ynWuCMgDME?= =?iso-8859-1?Q?tPby5wZgz7CjdbIoju0RVsa1gg65JhND5eG/+pHKfYtad28D0fz8oEwyE9?= =?iso-8859-1?Q?KmTyijkhz7kEIQshwTFmUWG+ZUiFTfwB3C3Eu5gblyoMEbQqeDV3JNxI6Z?= =?iso-8859-1?Q?/BNHQHvHRaKEcHJ1M+bKHd7uWOxc4c/xZPG1tTpTfwND0ILi8QW9nM8Y/T?= =?iso-8859-1?Q?Bfhdw5X2wFjv/9Gtfkk5CKOHxtFBB3HsOaSLVwjC3YYeax5DcTnaG9xEa0?= =?iso-8859-1?Q?Gfz7pxFfo1PZQ6HqPJrLE20GkQI6bl8TxxZcGC207v8SPdWNltO/1k6Jfh?= =?iso-8859-1?Q?KDDCoPSOQOyNpq7k2WXli5CCVuQUYOjkOqpZVXoyCQ9wRm3bbOdOrOQPFE?= =?iso-8859-1?Q?nH1hkRWpltSkzbagoR8Q2BBej2658AWhnPIsimHCjTW4UTcNIiawhVbOhi?= =?iso-8859-1?Q?g4zhsYG07D5lRdSrdMo2Oqk/v44+Z6DtihjsfKci/3H42sMJ/u6yHqwrzR?= =?iso-8859-1?Q?Z2CjEvC45e5nQXXahgp6+kdZxDf4jXEtZXzri+I8Iv9LJqM+Z07BYABS8k?= =?iso-8859-1?Q?SnZYJzJdLOXWas1E94uw/n/94Mozx0ehST8fPghckMRu2ov2RGAbvw69dq?= =?iso-8859-1?Q?ZY0OCPUMv4I2G0YF2WN4o5khHviIbj+AiJr/Dh3wM43cYNyREMhkIqU/Y4?= =?iso-8859-1?Q?B3UnHJocqG6sIHUG/2PkF6n30jCsKAyE1AOk3EkF2kQkr4ucwaoBWhKV8o?= =?iso-8859-1?Q?S4G0Ku3r1twv6+F7xxH4s+PgtG9MnNgfjchBCiiACbFcMNaUcluiQVIW7M?= =?iso-8859-1?Q?8rcmbuunct9Hcvowcc8Bqi/GtajsInLObCWbqY2prxfmgSBFtFsNa2MJTu?= =?iso-8859-1?Q?0NOgB7jTPBWeq5Uvn7RO09YZgviXmtjsvKfs9zdUK/PuXYBHyff3S1IuLm?= =?iso-8859-1?Q?6q45y1LbcKz8wADCeVkqzb+bWTC5t/BqTv//UsNMLHyFSMKLHYNk+QXb1h?= =?iso-8859-1?Q?AyxREN79cFHIWc6t9ltAxXDBkyRiDSNBdMhu4p6IKYGtD+g4LbrcMTJ0YP?= =?iso-8859-1?Q?OZngWPtuGu7A25w4YE9kvie2CmB7sOUa9UPk4U3TWPP4L9u7sCVyEgcjr/?= =?iso-8859-1?Q?Dssx99lmT2mI7zZp+QcXqoIYMjtGdSckr9vZI5bq2dY97JpYdbB0CsmEFJ?= =?iso-8859-1?Q?I0vewNeLGpytdlfRdVJptFLroWM18ZTz1aE56spq8tUfsJMWvLtGyOtWpc?= =?iso-8859-1?Q?MjTpcAuQaffMxqowpz5IlAU/rO9zR5A2ooLnGhGOgXeMyZZv3owzbgssAC?= =?iso-8859-1?Q?xvoITZfVEZCioNyOcBmT6D4rQxXx+Eg78iTWak8k5cTMmkGurrfs4c023d?= =?iso-8859-1?Q?pva5o4nHgJD8CndN/SS2601GA+/arClVczwi73SzvqRbPs97jpVPFxShGp?= =?iso-8859-1?Q?udh8peTTKfgu2xD5cdQO+MbmZfkaEhTaPaMzSUQSfF+u9FmXY5duO5Eh9e?= =?iso-8859-1?Q?+RS0dc+L/YldvE4m+9pCQhdcKJzUUewGCPOvGaRzvuaND4roocHQyVZqJx?= =?iso-8859-1?Q?SRkOLGTHU/sMXvvbjdGLEbruG46lYZ5iX1cFdpazucFV7FjomD4y360xhR?= =?iso-8859-1?Q?tWmYUf0CBC5AaU8fRjdIfr1S2lZkDwPHrnuhARhjbJJRalXSN04YhlFhUm?= =?iso-8859-1?Q?0KpO1HRax2ln99ln5cR3ukDAqC/auP0=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 249ffcf0-f16b-4229-b65e-08de6276299f X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:37.6705 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 4WJ796o4q+edkC7vFavEJZLCogcC0dUBVPGdT9xFUNkffWnXwCaxs5osQ75YI125+yZ14sdrYXVUO/BCtgg+8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048898625158501 Content-Type: text/plain; charset="utf-8" Add GICv4 specific structures to be used in later patches. Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/vgic.h | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index 6f9ab1c98c..a874a02d70 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -127,6 +127,42 @@ struct vgic_irq_rank { uint8_t vcpu[32]; }; =20 +#ifdef CONFIG_GICV4 +struct its_vm { + struct its_vpe **vpes; + /* Number of VPE. */ + unsigned int nr_vpes; + uint32_t *db_lpi_bases; + unsigned int nr_db_lpis; + /* Property table per VM. */ + void *vproptable; +}; + +struct its_vpe { + rwlock_t lock; + uint32_t vpe_id; + /* Pending table per VCPU. */ + void *vpendtable; + uint32_t vpe_db_lpi; + struct its_vm *its_vm; + unsigned int col_idx; + bool resident; + /* Pending VLPIs on schedule out? */ + bool pending_last; + struct { + /* Implementation Defined Area Invalid */ + bool idai; + /* VPE proxy mapping */ + int vpe_proxy_event; + }; + /* + * Ensure mutual exclusion between affinity setting of the vPE + * and vLPI operations using vpe->col_idx. + */ + spinlock_t vpe_lock; +}; +#endif + struct vgic_dist { /* Version of the vGIC */ enum gic_version version; @@ -193,6 +229,10 @@ struct vgic_dist { */ bool rdists_enabled; /* Is any redistributor enabled? */ bool has_its; +#ifdef CONFIG_GICV4 + struct its_vm *its_vm; +#endif + bool nassgireq; #endif }; =20 @@ -227,6 +267,9 @@ struct vgic_cpu { #define VGIC_V3_RDIST_LAST (1 << 0) /* last vCPU of the rdist = */ #define VGIC_V3_LPIS_ENABLED (1 << 1) uint8_t flags; +#ifdef CONFIG_GICV4 + struct its_vpe *its_vpe; +#endif }; =20 struct sgi_target { --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048901; cv=pass; d=zohomail.com; s=zohoarc; b=LYeTXwXSCHZv7+u/87GJ4orIAyKALJyXn0qFFI48CYQKY9TZDlrmvcw0SvllVDcwGRjJtr1iLNNxP9ze1JumzzCza8LmQJixjKTu+6T75ZZNMw4AiF+SGuLtt9avmz1VStK4mX3O3tz1qTLUA5Zx0uu2+LOeFBcpMS4XTNv0JV4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048901; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cyn14mIWWGcKZv+b3gYE9UBwudPA49aWy+Wq/fLyg6o=; b=V/93jfHqY2KDBMoODBVUo1uv6gHGbLdSQCub3uUwyTEKMtOR2WZT9NuLpELAci40LkkAk3S3/cgu1+F/Bz4Tpb/afkNFN743OUCOKgbeuhAEKsSSVMIAFr0QU80p9Euukht5I3OOw8tYS9RvEU3D/97qxw/bJ1EHzxsp/MRkGr0= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048901120359.3989553059122; Mon, 2 Feb 2026 08:15:01 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218792.1527660 (Exim 4.92) (envelope-from ) id 1vmwZX-0000xR-FT; Mon, 02 Feb 2026 16:14:43 +0000 Received: by outflank-mailman (output) from mailman id 1218792.1527660; Mon, 02 Feb 2026 16:14:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZX-0000wu-AQ; Mon, 02 Feb 2026 16:14:43 +0000 Received: by outflank-mailman (input) for mailman id 1218792; Mon, 02 Feb 2026 16:14:42 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZW-0000fY-0u for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:42 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 46ef0e11-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:40 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:38 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:38 +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" X-Inumbo-ID: 46ef0e11-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rsl9kgeKFDFD3tXSNImarwRVVbI+vszCGrZ4lDAluahBocbcPcej7xvSkVCmGijUMr7xhcERkSAx1KXlwEBjnYJtHn6NEEtxO4Il1WRKaEZ/OlZGd/Sctv6n653k90HtS6T8USJSXZBxxq3PHr5S3S8qTlKM/uG/wnXx5JnI5RkLIL/9FLYVpwsSYsrqtY+rt1Ngk2T4Ggd0rDYSMScWRlPt5cl4rPYJxsDK93t+5+pG8mojUly0sCm8nHYhYroMWML76b+2SNkm+yEyTU0b7M0i99SdQn1zRzim4+Uoa/j6RJLYFyX+2iTH4WFZXD6SPh4MshvbraXlfvR+XsgZFA== 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=cyn14mIWWGcKZv+b3gYE9UBwudPA49aWy+Wq/fLyg6o=; b=saQrYG8qoY4fb0/E7+47XZA9ELNx6ZOKlYeBVEWmOWre0tsgipXgWvgwr8mHR+yl2LHsnz3o/gI8EMCPB/cJpDSHE9wjKzXfh8EWcRAuQmYdLFX7xvwpO066fjASpiZ8u2FW6TXNAht4BZeep2O+vFYG2Zjo2ygMNRMY1cPM1XzKQe6aKcGn5LKiu2b7yO6R92VdrdbUMiMRBl3ypHRNxVscqjq7y4NMoNUYHHa6fSRp4jElK4IJrjFVmFeg9eoRKORsAuRzfwibbkUvmnTxhtLCU0cIux7cGFaFoxXHO/o/lJKS4E9BcVhqJ/5DdC7OheWitjmmjo+OMkzrWIybqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cyn14mIWWGcKZv+b3gYE9UBwudPA49aWy+Wq/fLyg6o=; b=gr9qkSPxrCUROYNj1tgw9PAObXITHw0dpZuVzJR6WfEGaR8TRvX3BJM7DWa/MkerOOaKGm+dkbih2bZFzsflg6z+lglcp2wjIKkQNZendZQ7d7NNDwinq+m5GNCgS5wy3dPRF7irYYiY1EGX9gwjCPI50Oq0U9o1RWqFkpt4/QYrzt+8mu01A7+tG5plkG3IPI2iCBvWBDjnv9QO3yT7jl769PVqyW2le8WPaKmWaE4TlGHUpl/+kMbTAfUSyn+MhTs9iaELZ3QND4oiiU7JrxjcxcuR/TC22ONiO9lYkRrDi4F0tnCEg8gU3srRUz89oiKodzYmcjeo+IFjONzpXg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 02/19] arm/gicv4-its: Add GICv4 ITS command definitions Thread-Topic: [RFC PATCH 02/19] arm/gicv4-its: Add GICv4 ITS command definitions Thread-Index: AQHclF8HDQo3o0DTckGQ45OEXd7MRg== Date: Mon, 2 Feb 2026 16:14:37 +0000 Message-ID: <3eb1cea5fb870e01b86e964caef5ceb9b2a8ed75.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 1f013205-25b5-443c-2089-08de627629d6 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?IIeaBhsaEtF3MEAaRjMlb1KubpcMM/qJmQFphiO+/yFru+/SumvY714aNg?= =?iso-8859-1?Q?eHhox9kQP5nsf7ufXeLPHTAtDNRrBTPD1WzHNiXag/W8ZqysE7UvhPAKwd?= =?iso-8859-1?Q?4dTuILXb7vp+UHApyaqJO7RennuhwCao65EKvJSE7eEBggsLYCKrnUbxe4?= =?iso-8859-1?Q?1Xo6/lt1rNDy/7fU+CMCTl1o8uuSneXg+qF/VN9JeDu8Rb8Qn59jf8fLPv?= =?iso-8859-1?Q?y40Ail6PEg+dIYuiUPlY/QAp/olCHU36fSLif4Cx9I8xbZN4UyXkD3QjGY?= =?iso-8859-1?Q?9AyZM8aPnDiACB+3I+FpdBsxwvo6MxoLrpbjhC/pXTJe/eNNbnOyN9+VAm?= =?iso-8859-1?Q?NGBlJ31opcWD8Fs1YYEmTI6xzJvp9IOUgdmlL6AW7t8rs9PNRgwYGCIvUB?= =?iso-8859-1?Q?PEYccPsPaNotQHjgfHnFJRjCUamGN7EfbI3YKobNq0MUvX58A5pC08zGAW?= =?iso-8859-1?Q?EbP25q+WS/hq+8Prr/zfUU6fwVkVfvcMnjXCY1E458I0RdWQx8USBZUFbE?= =?iso-8859-1?Q?dGmoq3L7h6/T5eW6rezGC2/4LU/AHMjvhlxl6t+8aX5kjgnBzSEHErh/XF?= =?iso-8859-1?Q?i7dnvypBdkJjmj2ax7sTexTLwkgkwNYdbeIWXhvuVgEtnuBM7Nrf9/yzzP?= =?iso-8859-1?Q?W1GUNw7lFLFhhY5wuQiceSIlX59nRJrG+Tjf3WiSmso7w+Itl+AL34sWE8?= =?iso-8859-1?Q?O57Dpx66TmQxmYjvctatCxJjvW6KMZMIUm+alo2z2Bq+Gsubyn3hIBQeT1?= =?iso-8859-1?Q?v1X/2242d7L48GtzHWfy1pHHX82h098u/6dJ4bt5qh3LnhfGkfau56kh/t?= =?iso-8859-1?Q?/V+SEwm+cMJB4x6H45I2UvdTo9tbAdpiO1/64toQJ8/LOFVf6hVSbZ0WL5?= =?iso-8859-1?Q?nQMHil651WHzTtVuD2cUVSsnHk3uVszFnu4nZ93tIs4C4lZjE/RafWuQRQ?= =?iso-8859-1?Q?MNr2Knztb+M3WdYSNIgFKhdgPWuwi8a8Bf57mi+tqjRrR+5q5zZITK1tFy?= =?iso-8859-1?Q?eF7SkLZpP4Ts6d0Jk6QZnJSmW5uc/ue7+VFiRUcRswoqNAHtpvwm/I2434?= =?iso-8859-1?Q?6Vdy1oC47m3YT73iVR94UjGhOJOz2yMmQD+vb3UwAl7dQy5BWjGrgjp7RT?= =?iso-8859-1?Q?d+kgIS7mW1LPYYPVNGBwqCJFi++oKsc002cC4HxdQ3f6mXJ/u5d/GjIkTQ?= =?iso-8859-1?Q?G+tgIlNruppzUHTZWyPZjccIgTECbeia65MTHiyRKVvhgHURk1TejnmBW2?= =?iso-8859-1?Q?RKl7vDNyulZsCDRhX6t4I+ybtGZOrRU1tPumN1rgMPvtBZiGshIuHlXp3D?= =?iso-8859-1?Q?+8r/oFPrJQfE07wb8AIGFawQpmfAdnu/OiGGEpTimm59xa06oUsjwlwUun?= =?iso-8859-1?Q?iR+HsxJl7lLudg/nGRUOUDmNw6Mkcl27X5MDUe33cEg8Bq0Ah6uTuZAXeB?= =?iso-8859-1?Q?Oyoqc102eC7RdcTLM1OLN5nQh4JNsxSru/ToWwfH77RB6ubOZ/Wwi0Iz97?= =?iso-8859-1?Q?C3frIgq/OwaTYVUnvvxe/AKKSo7xDvFFD+UcIb6EpLWBVbu1ZWvCounBXq?= =?iso-8859-1?Q?46RtM7/9oZRwTvcbVjpXhTBHX98N31Gd7kp/FY2t34nvu1JPCub37MOiOc?= =?iso-8859-1?Q?X3vzine0MUcUj3I2aTuXvSBhUiJpuCd4Y6IhdZG/+ZDDL0F17EDOCMtcMT?= =?iso-8859-1?Q?gKFQYnYFt1QFgdmW/FU=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?gHpde/Ii6kF52824t8gDEylF7dgA8rSA3gvoEGZMBB9Hv81wCBvWv0hspj?= =?iso-8859-1?Q?oQsCxWCRVEA6MqP2/UpLxspjT8H+e+DEA4MtpLV33AN95fMIRhhwBHZUL9?= =?iso-8859-1?Q?k5SpQ3tSz+PtAg4mw63/USbsMztQ1VGHhwWx6iUmUfkD4G4SSTKofHS00c?= =?iso-8859-1?Q?WsCanFSO4E7IeI0G5l7RlBk+aSEOtES/jIE8VRxnK4KrdK1fB9AlNoXaue?= =?iso-8859-1?Q?Cm4NtbpLp6zLSggzRy82X6093ky3lxG3tBiObNnofW0RCvs3HQIqTgj4Fe?= =?iso-8859-1?Q?8vVr8HnWYQLzB92eJuAP7+c3Vq9rM2O7WT/1TVg4C1xe1Zaab+J9WZXYSg?= =?iso-8859-1?Q?+AHH0RKXFyz7a4j649bs3Feke8ip5KsuSn8f3nofZ3jLFyAwIXT0KU3hTj?= =?iso-8859-1?Q?UPirDMuxidjvSgiarDXyMf1Ed1JIsiQt3/QJqRHTQqcEEaX/hkXuu7s2nC?= =?iso-8859-1?Q?GxH+VMQD4gy07OUuUpf28PZ/sxcdgslkQoanVYW2CjG2c6LYWEkGQQlNJY?= =?iso-8859-1?Q?IiwAf4PWCC59NFXHGsBiwey2GtLLVEUO0QeZdg9SLVi3OwDLWjbdNWwS7b?= =?iso-8859-1?Q?TcEv2YEnmIXPz9tpLSPOY+41fayOZUkVYEJNPzJV/rInI2yl6X9klLOLBi?= =?iso-8859-1?Q?w23kI2wbKOJCGkv9Va3oid3mo3N9Kp7vg/+ccFPWy4pzF5FiIOlsPnAl8V?= =?iso-8859-1?Q?O935yo5uXr9RsS9WTH6URMhHoIKN94aYJtz/nkRS4l65BV1dxJQasHkTy9?= =?iso-8859-1?Q?2w0PFCSRemCPerDaeYbtBBxkQkQjuXHGA3Mw7AiQ351vKWgwJLTt3EkVAn?= =?iso-8859-1?Q?VVrokAYEDvaEKEuUMixKijMuFdsLIeqBGza1903Ah8Rg8rEbDNikiWKpI+?= =?iso-8859-1?Q?c0mmrMoE4865erLyN0lQZUv4JUlDWje2Rz5ljXGf8+hHXg2Mpl4ISECxds?= =?iso-8859-1?Q?dbu3B0zy9Xl+VCJsh28CzpuI0CtGs0I8UHKnLnRn/hpEuEcCU6Ov7Fxwf1?= =?iso-8859-1?Q?Kxrs+AFlQzqaVUkoV/8C9iSIBrVY0/lSW4Puvg3tsTQzSneYYbLpYJzJU0?= =?iso-8859-1?Q?pFkCEXIl3zgNSc0cxbzxOqhsjzrsKjfjnXlZgF+M3zvQmCrfge6lcRRrSf?= =?iso-8859-1?Q?DLvbrK19uqD3KPwA/HNCsmZEaZS07OoXN0L/nG/Np+LuWDYo/Wj1XWRoOw?= =?iso-8859-1?Q?iroMVGHzKw28Y7xNDOAbR5YrUcWBefo+wbDltP8GIQJTMDEXk8pYnJGMdU?= =?iso-8859-1?Q?Jn9ZvYUkyY8SCgsyXLUDIDCEWofNDZXQgdrADuxiCse7BtidnIIPN/NPOQ?= =?iso-8859-1?Q?Jk8QjkrvLiS+DTdZ659oGcvLBVd5+zPjPxnDltES8PXW154uc0JKWlhn01?= =?iso-8859-1?Q?Vh2LpbIB/xP8f3q9Jozgts+tVGbIylzKg8JmVwLYaLw593yUBRziPNvk1q?= =?iso-8859-1?Q?MoijovIKfd0+xiInEKYmlk4uC/paSfUsTstkVeFcDxQvV0fIQ2DrfVueXD?= =?iso-8859-1?Q?dGeKriRyf0LhUaSKRJJ+qwvOfpy9EHYyoeEn00nHPKKUCo8JvBMIWxu6Lk?= =?iso-8859-1?Q?xPnNMCLksFNalC9HmACmoPYACmYR+qBrXACPPAe6rLymb4hzTmD4YtD0xv?= =?iso-8859-1?Q?BFukielRb/CidZ9EXL/tzS3RtcDM+uS3mu50Y6Qgr3cpaBiq77f26tQvDE?= =?iso-8859-1?Q?vFFGryvvEPD09RFfX54kSvb354DUPIoEnQICFFQVfH+LtYUEGYuildeKpd?= =?iso-8859-1?Q?3CFM6rJ5fSTNbOuTKJVtTDxY47HFGQNMzfuV0mraUTVs2xmBu9Jn+1OFAn?= =?iso-8859-1?Q?6c7Bk9Hp9lzFa8onUhnKnMMzXPE0f7g=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f013205-25b5-443c-2089-08de627629d6 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:38.0305 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: l94HeemlUKN74wbZ7zRgOv2P63enIJQWWs5PnFsaAVV7iwJPGQQHNtu/MrA8tfIQEvNLxj3064HGoWng/IaWKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048902608158500 Content-Type: text/plain; charset="utf-8" Add definitions for GICv4 specific ITS commands. Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v4_its.h | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 xen/arch/arm/include/asm/gic_v4_its.h diff --git a/xen/arch/arm/include/asm/gic_v4_its.h b/xen/arch/arm/include/a= sm/gic_v4_its.h new file mode 100644 index 0000000000..f48eae60ad --- /dev/null +++ b/xen/arch/arm/include/asm/gic_v4_its.h @@ -0,0 +1,41 @@ +/* + * ARM GICv4 ITS support + * + * Penny Zheng + * Copyright (c) 2023 ARM Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; under version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; If not, see . + */ + +#ifndef __ASM_ARM_GICV4_ITS_H__ +#define __ASM_ARM_GICV4_ITS_H__ + +#define GITS_CMD_VMOVI 0x21 +#define GITS_CMD_VMOVP 0x22 +#define GITS_CMD_VSGI 0x23 +#define GITS_CMD_VSYNC 0x25 +#define GITS_CMD_VMAPP 0x29 +#define GITS_CMD_VMAPTI 0x2a +#define GITS_CMD_VINVALL 0x2d +#define GITS_CMD_INVDB 0x2e + +#endif + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048906; cv=pass; d=zohomail.com; s=zohoarc; b=YpwRyKGko+oqPHYH7uR4qMHmCbbziprJnmu/a+VDVvKSCO/P6dxdhnyOBEBd5aXBelih74TrRXUaPiVMpfvVaDtiW18bh87+qP+Ifyp8Cc5ZFA9JHHetl0U4zFCEM2cu5c+9SxvF3JtYQbpZpIQ6agwoBF04pTxaOyvcjDqJSyM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048906; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iUKC8PxXATJx7SpqIhLHzMIKs4Vp6o1Q57Ysq2ayrD4=; b=LwtWHtujuziGbHh2AZIEe8erbMhuYJ8TpwrSg5wvBLbJbmVewlNqf0yoa9kn6UzSF8fV0eAl8sSRbh0K9mmFF73tR3MYuC/mBkmoG2PD4+mHVKaa+fmdxrpA0fCxi0GVqGgZuk6OOxHiCs9SSg2EVevHqwrP1Py2MJWHCKjGZkc= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048906283233.61808084913162; Mon, 2 Feb 2026 08:15:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218793.1527676 (Exim 4.92) (envelope-from ) id 1vmwZY-0001Mg-Q1; Mon, 02 Feb 2026 16:14:44 +0000 Received: by outflank-mailman (output) from mailman id 1218793.1527676; Mon, 02 Feb 2026 16:14:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZY-0001LO-LQ; Mon, 02 Feb 2026 16:14:44 +0000 Received: by outflank-mailman (input) for mailman id 1218793; Mon, 02 Feb 2026 16:14:43 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZX-0000fY-0v for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:43 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 47287423-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:40 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:38 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:38 +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" X-Inumbo-ID: 47287423-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O2irMBLf38WWpd/dgjudEA19VynaRhlINTjNU5Evo9bOMNNgN6n6ZiZYXeyZHgX2OJOGc1sjB2lhL/Tz5xx20vWgNGmSjhQxbN6vAyGdEMogspkHBLa1Efkd6oKvRAh9ooZPy1Gjd7bHGSfAauvePf3cabUFtMt5Nu9kT3kzacdUyqUdfRlJO1OPkf+5htdpwVvZ5E9ArC5QZqXwH7MZGxtNG0rjiYVCW5wM8A6IHwhs33KJv6uxVXv5l50H2bDqJtQOK9yFSN3hQZUYVs4HnBaif3bUgl6ZNYEh0jHJYJnsXYEQxvBEWbQvDsOYBmB0xCpGXRINKABtd6Icyey2ZQ== 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=iUKC8PxXATJx7SpqIhLHzMIKs4Vp6o1Q57Ysq2ayrD4=; b=QWrZ0E3W7NFk5TD3xtQweDgR+YPYaEc44SiYChevCkYEofNCW8Ls3VPpSiPyPieIBujKMnvDY7n9/FI/xLsy2wMfaGSnoPGBKPVtOUQKGLQtM7bkDtIEaWmG7qTqDHJNT6Ea2K74R65vBFNfxI3L4LDRReJUsn9JKGW4/rT5wtDo/KhR/3RfV1Ldqc4Ee121o+s+iRuPpW+bL1J7oxzN3aifj0DOUYIU3QKhnUFKes989hjH4BBSR25y+39WV04zXWCvpgfPZEEvrkcnvELYBsMIeeKSVT6QFiQjSxNLFz2vSkihyTlOVStJMnSjBYY2Z8Y6IbB4JvwMeihQTn5PFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iUKC8PxXATJx7SpqIhLHzMIKs4Vp6o1Q57Ysq2ayrD4=; b=OybhA8M8XwL8cqibmAw1d+dE2G+U/bjrXcU0UwOx18aNopQIMpaY4GE+A6KdAHhQ7oiuQrzhkZzkeq+W1f8xNkbyO5UHoHKsL8t6hwLAg8SGjJqV33xtdD6HO/EDp4igkNp58GenqStfRP3xfw79DICEiwPBQh5VFktvEy28K/Jpum3oMAlATlWChPpP/ptUX75VPFUOQ4jAZGqCd1RU4/DnXFihWQxJnuSvLWevece4nRRmRfuM5OzBDT7wLrvc/1EfjoAAcM6b00uU7MOo41g+VrSWLU7/+wAiHvxhtlyEU8ebK/JSaIBmXxp5q29giieEhoB6aZsE5mRyA0vOGg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 03/19] arm/its: Export struct its_device Thread-Topic: [RFC PATCH 03/19] arm/its: Export struct its_device Thread-Index: AQHclF8HcsGkFxai5E6CQapzQPG17A== Date: Mon, 2 Feb 2026 16:14:38 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 0d63e815-d2ec-4e10-9f97-08de62762a19 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?j3x1Euh471pR+ixsPWpURI3ZddfnIAd0QK7LliKvwnBIqtZuN+jaa/4AjY?= =?iso-8859-1?Q?H3FssNo96zOnuvhey5RrnDALFm+X2OCiMiHMsZLSaalaFekqKYjVdeisaP?= =?iso-8859-1?Q?NSjz2aBBfv/f7od4v2xe4xIscIErza80fNeecZ4MbZ/PG/gwCf80PmwRUS?= =?iso-8859-1?Q?kovVhlJ2tZeAOML2MUTQjld7/hwWmK7aRZ+bCD+x+zxW/pDv47aTSySnBa?= =?iso-8859-1?Q?vfZsHCtko5xNXW72pK5zp4udWjvx6GoDHZo3CzcKZtGFT24b0p/L/YOIJw?= =?iso-8859-1?Q?8Cinetcv2pQa1Bb0sf4Ix6P3pRzw8eaUTPiPK5/w/uXJztqnXCrDFirAgW?= =?iso-8859-1?Q?kVOBdIYuqIOUsnSUfUuYCKFne93oelscg9lBSAiBYd3ZHlZYIJzHgqQ6O5?= =?iso-8859-1?Q?T1pvPktc2WGBNfrU9xMos7jL0cs4iyxRdi/N9uxEQc/vBT//KSFtBqV2/R?= =?iso-8859-1?Q?uH4BGRdNPavR9S59Abb0m0OpgqgXfC+8ac70vN3OhPmoXSDXO4iZinGoLI?= =?iso-8859-1?Q?2ZjdHHELwEbx33S9YkSug9jM+BzQEhbd5oFAuEHq+aI5Bll/qBPiETVplh?= =?iso-8859-1?Q?ETCDUGy0GYHpVgNVn3lzkSLT2daPxnj18qpgyki4/fhBlqEJ06286YsVU+?= =?iso-8859-1?Q?Oeg9CNxpuF/ebUma5WNQw4lz6NZerP4iy2xzq4gTUQX8PKHm8hMSboeJ2L?= =?iso-8859-1?Q?8PDDm4HgKzyUJos44esw7+cuWdp6RBsUsW+TAzqkAx3GWUbwCmx1PQu3Dx?= =?iso-8859-1?Q?keCVww6J01/PbNDR6PCXldKUFNzVp/scLPW1M4yUFM4qZ2GYHvNPr+oP8x?= =?iso-8859-1?Q?trTsSedPmPMemJ6X1lpB68cNu+qIIDERtBu+FOfSFPfpEFsUnmkE4+4PH0?= =?iso-8859-1?Q?xhRd5v4ZjMh9bESnVQyqcjkxL6g91r1Zn5rGurG9lpidCsaLfhCJVd8XkR?= =?iso-8859-1?Q?rn/2IxihkQmaB64Brygf6RaAlrECi3+JUz8l7OksAGmNcBwM8lPbbCUznW?= =?iso-8859-1?Q?vC3FAt8vqZDhjb5Q+f525FPTBG6OFbLITCnJGcSlw7N5tUTli61dMtxRuJ?= =?iso-8859-1?Q?vmF5a6AKT9tKrbKRRnqT1m1c+Qi6DClIyAbFosOzDYvKU/F4WzUgEoIbPt?= =?iso-8859-1?Q?Q9Hj/NxziVqsA3G+Rs1J7uzCk48emoBrAZmRXDZmwWEN4aIXiyK3FDOt5Q?= =?iso-8859-1?Q?mbkda8o2Jq60GcKu+G/f8TWSqTmzaJYUymDcmLEItBN5WVg4ERAzde/O5L?= =?iso-8859-1?Q?LOQnPIwY9Dgpl7DNKK5qWxpkdaNa6QwPcLH/p4RDgMKwCvuINjpVbj6uST?= =?iso-8859-1?Q?yaDRE2bdYSf+pIFXUuHZMcKiJ8hTMEbA9W8SkDDhICImxXPBLV3mjLTzoj?= =?iso-8859-1?Q?AdKcJdWjsN1+TqD2Kba6FQAqRrGEYJKJKvwG3T6w602q+krmZf/UfxNZiK?= =?iso-8859-1?Q?TV5A8GjaP9AHVwDTe313F8RL4/J05zvvEwH7COAu4vLA4TZ0rHha5FR1ag?= =?iso-8859-1?Q?yt2MahdJT2kZIiVaUdyYbT1OTTddwwRAB/sSEuxUL5jLZxruQ8JpZYKah0?= =?iso-8859-1?Q?/r7uPPYpdgDtzUPNTnwguAaRyVFEILeTpEI1y5Q1Dx1TxgKXJzZu8oNP8q?= =?iso-8859-1?Q?ZR9rr+J5Ta+NCrRoemqG5T4VZFZ0oxJrIpMBN/wyq7WaoomnpBE9YJDV8s?= =?iso-8859-1?Q?/TaLvBSWhMNyg8wFs24=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?aKdz+449kl414CdQuR/4h2NE5DZL7Ae87FadQs8eq/bwYLj0wECKhkCjm1?= =?iso-8859-1?Q?mDSZFYI01Vf4oQen4y3rP7BVVCEyfRjE9nZKfcNyKH8t3Dz8rwZF7f2vNm?= =?iso-8859-1?Q?OX33tRJZSo6yDjOKTenI/6HOmIZHMl/Cm47g8W+Dh94wZugJFO5GZ3ygsO?= =?iso-8859-1?Q?lEbA+dm++u2621zNhA3inTUibGnyLlRRdyMXuwzsbxDcHvBCAjmRIJIiOq?= =?iso-8859-1?Q?FUmIW34PtYj2vLmLjCgfy2rB5ChuYYxfuEqQZuS2XUtgFUhQn0fY8jgA+s?= =?iso-8859-1?Q?1w+kxfzfTp6pDN0sg+10SpkyJNFoZOj2UDn1QtDk4Po3IpmGpmJ/0pQzEW?= =?iso-8859-1?Q?z9EYI+oRg3cb2yFynRQvyFnqmzd+kvL/1xE+C/Fs050LcCkPufd5SKM+/a?= =?iso-8859-1?Q?Z5kRXgk7xPEDY8vB7gKR4ELbKbOs/3smD5DlxwI7jEvj7F3VadYfG/FI8R?= =?iso-8859-1?Q?/FNjJ8mn7Lxp1ybXRsNStXuiL+xZWLIqCWBwSDQsMeKccrWKPIJs3krWLq?= =?iso-8859-1?Q?QCyo3OBSugRRT538rOlvxWEnXm7X/xFqPJoL7RnO2maatQEakAFljK4r0M?= =?iso-8859-1?Q?LGiKAezmRiwbOmR3d0ZIyG5/7URclYMP6QGUxgDQ4+/jUdPZEQRg5XsLcV?= =?iso-8859-1?Q?+oYKNZ+Kud75ISi+9HisR8yBf3vS5+znoCYJsrWC/sk3FbtivIXalPglij?= =?iso-8859-1?Q?3pBzCqOjluyT+pOC3X+A5bfvhmNhP+WuoepH/uhmCJ93YW36wrIysDnzC4?= =?iso-8859-1?Q?6YVSVaRyFdGHxuMns4oR5fCso5VB/03XqXlGWY3zjZaz+7GxUYNjzkc4fL?= =?iso-8859-1?Q?swxDQ85qAFJklzcGnS/RB7JqnH+33EthDdxcvhWkPSBR/OPcXvSPtY2uX5?= =?iso-8859-1?Q?ZbisBXyc7eK38rN15DQa4Ni5p7o7LThWH/o7NBcK3O6N7CKXWDF0fBPerK?= =?iso-8859-1?Q?VgPPuYQ/wQIV3W3Ol5BvuadkSezFGIK8uhOaJZpnSXekRlBP6XnGdGEOhq?= =?iso-8859-1?Q?IIF9Ce2RCt0mDOFYRvCW89RqIwc+oYdJiyBdtI2cnddxhuQAKT28qW4ybx?= =?iso-8859-1?Q?ornbslOEpDRDjvFTCSJTAve2aA2mwYQo8ZmS/NiXP8FKuQ/1aiLB2alppq?= =?iso-8859-1?Q?cEpj8rmf27gbIexeF58nC7oLQiMpladDIOqbN/wt2BthLkqIUs9DSHBaTh?= =?iso-8859-1?Q?1hoenqfTtwHTmX9tE6hXubvg0/UMBUAi6w7y6vemedoZQtO8oUWIB0JZFX?= =?iso-8859-1?Q?GztRUvXAI8Qt64rX5DT/3sWnLcIGL2b7hiIhGXQ8PCgWHh2VI3x5E7QpVi?= =?iso-8859-1?Q?oAb2lR9oUIlpmm3CD2BHou7KhMN1MRkkdXbxkuQjLDG+kOt1KCDYL/uKxq?= =?iso-8859-1?Q?d6vqa5L/FNmlopAwtNZrhoo1v8WxU01nZcEqm24J/WfeV/47ctkA5hap+1?= =?iso-8859-1?Q?M6tKtEKQrFWKlk0x1gEQ1B7iUO8KeKGozOsRXblCdroGNTX9mBkkkU+xow?= =?iso-8859-1?Q?0mamiQma5+lIFsYvYRZfaC8sQwxjoUs9yoEe0CGI8Jsyz8pf+LMHuFlqJo?= =?iso-8859-1?Q?zkKCWuUsgFmNcOXt6stBl6SCEVR0ZcGV8AUE/K1NYUsG5ebhiDznUH8WaU?= =?iso-8859-1?Q?K8PgEuapefhbiLhJQV/Ua2YVVWPNiReMPdtVQzd9I2q1CVPNaIX3iwUoVw?= =?iso-8859-1?Q?pQez2pz01lBZfl+aOVY+/IVOruk8WTUjm4QA694aq6i27Usxh1SYDxLVTV?= =?iso-8859-1?Q?5i0Rb4ZdhaptLxXUaiJzi8M7xgoAANxbKO1fcnPjpE3i+Yn5wkFHxojj2J?= =?iso-8859-1?Q?UAsQJjXS5UbobSjO5gTFa+QCkPi3+eQ=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0d63e815-d2ec-4e10-9f97-08de62762a19 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:38.5061 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5F71G833OERRta/JCzqHTQNxuHXsP0F/tDRlw9VysD6uy7dySJnn3C9SLXFMkEXw+UhAdLFLYtaGwsUtgjC7LA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048906670158500 Content-Type: text/plain; charset="utf-8" Make struct its_device and its commands sending methods publicly available so they can be used by GICv4 implementation. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 30 +++++---------------------- xen/arch/arm/include/asm/gic_v3_its.h | 29 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 34833166ad..25c07eb861 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -30,26 +30,6 @@ */ LIST_HEAD(host_its_list); =20 -/* - * Describes a device which is using the ITS and is used by a guest. - * Since device IDs are per ITS (in contrast to vLPIs, which are per - * guest), we have to differentiate between different virtual ITSes. - * We use the doorbell address here, since this is a nice architectural - * property of MSIs in general and we can easily get to the base address - * of the ITS and look that up. - */ -struct its_device { - struct rb_node rbnode; - struct host_its *hw_its; - void *itt_addr; - unsigned int itt_order; - paddr_t guest_doorbell; /* Identifies the virtual ITS */ - uint32_t host_devid; - uint32_t guest_devid; - uint32_t eventids; /* Number of event IDs (MSIs) */ - uint32_t *host_lpi_blocks; /* Which LPIs are used on the host= */ - struct pending_irq *pend_irqs; /* One struct per event */ -}; =20 /* * It is unlikely that a platform implements ITSes with different quirks, @@ -155,7 +135,7 @@ bool gicv3_its_host_has_its(void) } =20 #define BUFPTR_MASK GENMASK(19, 5) -static int its_send_command(struct host_its *hw_its, const void *its_cmd) +int its_send_command(struct host_its *hw_its, const void *its_cmd) { /* * The command queue should actually never become full, if it does any= way @@ -258,7 +238,7 @@ static uint64_t encode_rdbase(struct host_its *hw_its, = unsigned int cpu, return reg; } =20 -static int its_send_cmd_sync(struct host_its *its, unsigned int cpu) +int its_send_cmd_sync(struct host_its *its, unsigned int cpu) { uint64_t cmd[4]; =20 @@ -270,7 +250,7 @@ static int its_send_cmd_sync(struct host_its *its, unsi= gned int cpu) return its_send_command(its, cmd); } =20 -static int its_send_cmd_mapti(struct host_its *its, +int its_send_cmd_mapti(struct host_its *its, uint32_t deviceid, uint32_t eventid, uint32_t pintid, uint16_t icid) { @@ -322,7 +302,7 @@ static int its_send_cmd_mapd(struct host_its *its, uint= 32_t deviceid, return its_send_command(its, cmd); } =20 -static int its_send_cmd_inv(struct host_its *its, +int its_send_cmd_inv(struct host_its *its, uint32_t deviceid, uint32_t eventid) { uint64_t cmd[4]; @@ -897,7 +877,7 @@ out: } =20 /* Must be called with the its_device_lock held. */ -static struct its_device *get_its_device(struct domain *d, paddr_t vdoorbe= ll, +struct its_device *get_its_device(struct domain *d, paddr_t vdoorbell, uint32_t vdevid) { struct rb_node *node =3D d->arch.vgic.its_devices.rb_node; diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index fc5a84892c..aa54e9a364 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -116,6 +116,27 @@ /* We allocate LPIs on the hosts in chunks of 32 to reduce handling overhe= ad. */ #define LPI_BLOCK 32U =20 +/* + * Describes a device which is using the ITS and is used by a guest. + * Since device IDs are per ITS (in contrast to vLPIs, which are per + * guest), we have to differentiate between different virtual ITSes. + * We use the doorbell address here, since this is a nice architectural + * property of MSIs in general and we can easily get to the base address + * of the ITS and look that up. + */ +struct its_device { + struct rb_node rbnode; + struct host_its *hw_its; + unsigned int itt_order; + void *itt_addr; + paddr_t guest_doorbell; /* Identifies the virtual ITS */ + uint32_t host_devid; + uint32_t guest_devid; + uint32_t eventids; /* Number of event IDs (MSIs) */ + uint32_t *host_lpi_blocks; /* Which LPIs are used on the host= */ + struct pending_irq *pend_irqs; /* One struct per event */ +}; + /* data structure for each hardware ITS */ struct host_its { struct list_head entry; @@ -138,6 +159,10 @@ int gicv3_its_setup_collection(unsigned int cpu); =20 extern struct list_head host_its_list; =20 +int its_send_cmd_inv(struct host_its *its, uint32_t deviceid, uint32_t eve= ntid); +int its_send_cmd_clear(struct host_its *its, uint32_t deviceid, uint32_t e= ventid); +int its_send_cmd_mapti(struct host_its *its, uint32_t deviceid, + uint32_t eventid, uint32_t pintid, uint16_t icid); #ifdef CONFIG_ACPI unsigned long gicv3_its_make_hwdom_madt(const struct domain *d, void *base_ptr); @@ -198,6 +223,10 @@ struct pending_irq *gicv3_assign_guest_event(struct do= main *d, uint32_t virt_lpi); void gicv3_lpi_update_host_entry(uint32_t host_lpi, int domain_id, uint32_t virt_lpi); +int its_send_command(struct host_its *hw_its, const void *its_cmd); + +struct its_device *get_its_device(struct domain *d, paddr_t vdoorbell, + uint32_t vdevid); =20 /* ITS quirks handling. */ uint64_t gicv3_its_get_cacheability(void); --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048906; cv=pass; d=zohomail.com; s=zohoarc; b=Q8K0CBdZxH58ng5JvXO80D9Jzsq4y8hUqbZ9fJVJzi8lJjoZA/lB+iwoJBog+oZEqwCzjFbsp9u1SgevdqLVsXnJg24KlLPr+dr58KT6sNvNjt39SzbDZ5tKbT5ROBEDjgydNSxaJtP7ug1nZyJzHsXmP1K6icjhfdAqNf3HpPQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048906; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pUeEU3bbSuS4RygDqfWI+sk2Oq51A0Lc+fee+eE/fIY=; b=XaddZlSdf1v4i6lWkBlqEMmGasOWgYnqBkZs704AUirhrhb4fhZIKzCkKXaKvA/1rGCWHzsR0hSAybdTlceFIZVyJagU38CXrbLRO6hxt5hnd1fjL7L2fvOqidMAVdse+gkGpO2AiseY41LKIDzPDgMtGoGWZgsba06Sg8Am/nQ= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 177004890615733.45446163578026; Mon, 2 Feb 2026 08:15:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218794.1527682 (Exim 4.92) (envelope-from ) id 1vmwZZ-0001Qa-78; Mon, 02 Feb 2026 16:14:45 +0000 Received: by outflank-mailman (output) from mailman id 1218794.1527682; Mon, 02 Feb 2026 16:14:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZY-0001Pv-VO; Mon, 02 Feb 2026 16:14:44 +0000 Received: by outflank-mailman (input) for mailman id 1218794; Mon, 02 Feb 2026 16:14:44 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZY-0000fY-1Q for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:44 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4771892a-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:41 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:39 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:38 +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" X-Inumbo-ID: 4771892a-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FkfBReS2bO5x3YjBb8sJouEd1H704fJBtv5NyxTt2Ww060GltEgRw55PHzKcF8N9UQbonQGcuWmEkw5XpWizgEnTvU3ofdLNEdIADWnQtteat9Rjx2NO9xm/ZPdCIz77FDZauJCzJtfMvYb3hSAHSMMu1csAdiZh56wQW0nT3w4u57rpSBLipOKKu47RYbQGbPifSycKVHQkHfi03bWJCXZRoaAQo4bVbbHlnX1Juvyh++cEPAuJhKC9b2etqVhLVRRmnE/mu+DpukF4O1tLdOfBGJsiiNHphx56BRhnMUmWEwADph/1PubS+sXcqpvF7seufbSGxqzcOZnzUbwRvA== 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=pUeEU3bbSuS4RygDqfWI+sk2Oq51A0Lc+fee+eE/fIY=; b=PkTG8pYtHmP6qCNyre2QrVBU/6IpjFc3Hy6xGBdRqqfH/OhNKxTAQ9bK3xUeGQmuliDvXH1Lf9OHfT4LUY4ImJkmOvqbbeVlIQ5iQ++vzihuC/JMo7sFvJRWyUwHOc1Jv4WOiRg8EdmVsec3OLN4/lDODgGUZXgAYhlLJM9DgTXTweK9mEyuboCWx0qFI2Ur7X9+YHApuhF2Jwi8I/UYM5TyUTua8juc7OxRG+JVYZ4wN0hxLCXgQGJNE4SEDz4RQ4pnmf3Y+T50somjdP7CPpsZQnao6gesWmG417wPR8bFWGvDDuBp8mkqt0jlY9GXBnsjjMuM2Yj3qkq0kInV1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pUeEU3bbSuS4RygDqfWI+sk2Oq51A0Lc+fee+eE/fIY=; b=uKpIUWCnr/IfnfmQEzCBCtGFlQhGa2xZeyxI1tqC4pytFkQ3kJW6AlT9qNWC7m48ZyNkFsB3qFB2Y9LbdmTk7AD5R7aGkGam3IpPrVm+gO8q9lO1pIm5MEE+ZK9BzAV0jHIjPTHFD0Zjuakz6uNPMcVSr/GCidJU0a585116uxOkLc+jgw4RYDCTZCdHd0TeE/bRkyll6W5nI8Vl5tKDZXsBFb4NJYnqVZrDcrfG2lXWBJSM2ffHVk8VVsH/+IbQWzYaHnrPcOnhEkSYeVEZIHn71rYFneB0cgrXwGpfIsOTSffmHjuIh1Udekg/LValc3FRUwEil0kcf0clt0X1sA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 04/19] arm/its: Add vlpi configuration Thread-Topic: [RFC PATCH 04/19] arm/its: Add vlpi configuration Thread-Index: AQHclF8He0hTGFqEmEaW888dgnQDnw== Date: Mon, 2 Feb 2026 16:14:38 +0000 Message-ID: <76de7174202e96fb907bb2ce1a874063ed9f393e.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 48df5614-b3bf-4b5f-7b3e-08de62762a5a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?DmRWj+mJyXm1gk+vyXNtGCVIwj+6Y963FfLUaxxuKVe1alH2DZ3qhNqbO4?= =?iso-8859-1?Q?BbVyV2mZuGuFdiDELshJ7LfGzZJJETKv70yD4UjAp//PREe07rVZ4A1skI?= =?iso-8859-1?Q?RJ0yfvOo/JF4LNaCRgYuD4uXYYochWn0YTzrUc6YSxx3EMFrxKtonGHUj9?= =?iso-8859-1?Q?5nonVfwViNV174CMjCBTMhKxM9k0bGtMk27f1V1x6wSVbmAemHAiatzG8w?= =?iso-8859-1?Q?O3jzX58Fj3qDRMSyRhdKYEoYHk458nQp5WrK71rVShJ764pZ5kdfSYEEO5?= =?iso-8859-1?Q?tdPGJVuni48IyBNaxTsLiMPLL7GLgUn5BxSn2iAq0ncbpkhVJUjxXw/gZw?= =?iso-8859-1?Q?fy2rSerxzjIZpsJyn2IimkYLHqfuA38LDacGB/xvVqywgQn1oHHQF1zwiM?= =?iso-8859-1?Q?FbV1kMXNidIPt724PJWik91UPECzrFGXp74SCSDsGBJBPlF8wGIH8dkvJb?= =?iso-8859-1?Q?J4rlHuLJT9RdS+d/68bX4ZiB7hAksnZ6i9gG3uELJUJGWvvKaWe/+Q7cG8?= =?iso-8859-1?Q?y/nkPLos77FlnEg9JzRlMink6ElDEWzrT3g3/um1Ec6Aph4v8HV/SPEdvR?= =?iso-8859-1?Q?NbC6zIS8HqdMhQKFHRgCIeKbBQ+5WMwrarqv3VMC67wBBdBYWWZPd0FEFf?= =?iso-8859-1?Q?uD70eXbGowUbYKTnzlIq73SdMSbp4Os1z9W4zOokJ/PFqkl33GzaGPUOkn?= =?iso-8859-1?Q?YJwumvKTv/xpKEM7sXWbFH6JAQoxjHC391oq+1E6kt2v/QMV8VrOQjLt44?= =?iso-8859-1?Q?H8moUZk4aD0u726DmFghf+oXQBt3ZUELi7s0QOhZ+0cu5KqV+JimKt7Z21?= =?iso-8859-1?Q?nBa+/K411b1R2TklJXR/+M6/aRFYSii4vf64mFDGglq8GsNOO54OmebWeX?= =?iso-8859-1?Q?1SHHt5SaMMfLAYgb9Jk+Sy0TBKuthPBeZWM32tYgvxGNYhZzBM7gJw1KjE?= =?iso-8859-1?Q?sVhyl2fw7j7Keyy927ICQCb6A6kSgGwaekaUxkGRMvatie6B+eiaNfWoD+?= =?iso-8859-1?Q?Oc0sKSTz1c2Evc9k2NppV8/mgS4XsiGTuu769koUTZ4Poscy4eGVo9GCxz?= =?iso-8859-1?Q?hzqS+Ood82lDdrWwfuC1lvLY0EL6+NAVrelKssSeHFxi79r7IMMNtMEE+0?= =?iso-8859-1?Q?TEvXvO6ctwhyw83iM8Mp/bKr/B9y5zR79cLIyUMnbF0L1V7c9FAm+OfTk1?= =?iso-8859-1?Q?6CdtcaEiQlXSRXHIk8vGDQnhr1eyQrN3Jhyr1/LyPhyk4/JIn5K23EpFnB?= =?iso-8859-1?Q?pEr2c2gkYWS062beHA8Iby16YyCpHauZ3v8XtCbwQSkYSjdAfu0On0ja+M?= =?iso-8859-1?Q?wv4h1QJ+YwQgxHYed+pavN0UBAcgBERBj56o+zbBAQhW7mN5CCp8rAvSaG?= =?iso-8859-1?Q?QLjUgcB2tc/g0k0jdxTNWBYWxGixFgY/kp/xBgazYXBpTxkFSNpVxaYOOf?= =?iso-8859-1?Q?HdQaK0TA8J4KQEZozWC8paxDsJlg4xiQI0vXOty0kN8ZFDP07I1w/wF6EU?= =?iso-8859-1?Q?8H5NLj6dENL+DP75r13sjzT6qUQedyVgTyw4/V3oMEe0hIBusMQwOebBwI?= =?iso-8859-1?Q?ijm+XC9To44aboGRyPbiDcpYO75kG+FQSJI5yVREU9o6SjZ34NYF05UQT8?= =?iso-8859-1?Q?M+i2JchcPTItvj961AwR9lOde9kd1wjt/gxViruFc3FsiDLouFNn6kwLAy?= =?iso-8859-1?Q?XgUk46qNZ0Umey90iYg=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?YZTF/XhXQUb/jIbEBpLZ4Zbcri5Cm99NKWj0Keole+CCu6o5MymyzhskUu?= =?iso-8859-1?Q?o3q9Pc4PZL5fCmWX7acFL5Wqyg1AoAEHkgUACBQETehbcM61UWngDBildG?= =?iso-8859-1?Q?7yEW+Dow83PC/qOomvevPVYA6oYmPGIuHX9PJ6+CmvTuZHpcDt+Zypxij2?= =?iso-8859-1?Q?7fQy4By7LLi0EfsR+UXQY5KC74mLNXRAi5tudYXJEjAHLVG1tlrCzCf2y5?= =?iso-8859-1?Q?simhqJN17xvtcLUWs77uPWzB/jLsEkW6qd5T+7WeefjyzfW3KIZij9eOOd?= =?iso-8859-1?Q?4uLSCjn1wRdHVbP6os3ENyQGDhX2Bk2cUWVMk2GQvdGZ5iNSBYqV5uizb0?= =?iso-8859-1?Q?8oNYskOpuTIxGUJq0JN7Y9dHSMV1+tdegZ4hxB9bFNvvjn7kJvidYJdhjz?= =?iso-8859-1?Q?MiUlg9jFX4FN4n4zwi6gZHxT8RmaG1uY0hRx2IwBoMxxJOqY0G+Y8Fcy/+?= =?iso-8859-1?Q?ycgUyp3gdp0Z0cwZO4dJUbMpBc2wbFFSG1s4lFoDzamtUmU9/OWgxF4gtS?= =?iso-8859-1?Q?RdaaPjLqsO7L4CjG9afTOvsy4jUVfnU/Lko3O2C1hSufGx3f4Ed6yyX9Vq?= =?iso-8859-1?Q?3oHRmJ+87bleE0gWA+93BI31BRY4udhRv2DXxurVGUwoP5yoW532F8Xp24?= =?iso-8859-1?Q?dpXGYJ5AXPFTmXm/bnlm4AGKMRkW2qtz2/SR7ce9MCphixk/itnQ6bfSJT?= =?iso-8859-1?Q?mUQakbnM3wPSkP9ilQRFmKpnAFFT2PzKXM97YqGBwYseqaGp+PzsFJp6i3?= =?iso-8859-1?Q?AbzS7hnhxk2FQQQTDtsj++gd+ofbxMWRGOjMZJYsfXpRyC46qal5yv8S0H?= =?iso-8859-1?Q?pj4ibeOq18ee27ZVn5qbRVQ/5m2/H2Rf4nqKJ/MowTRQInmVtfenXQ6kaQ?= =?iso-8859-1?Q?I61/ME22vaGaW6/zc6h0TCEDZ5+kESd9KtNjMtSGAuvCZaNAcn7h/fqQjN?= =?iso-8859-1?Q?gJvASLSuNoUmwgMzu0XxZSEKmrT5mDiZOpNgI+mENdrmgmuoBFpku5D2pq?= =?iso-8859-1?Q?k0+6g/6N02bDdUjPypAmZgblOj8pF9tJH1O3AWsJhEsp0ORu5IEjipbDH3?= =?iso-8859-1?Q?kP2lR40zpnsxZALwtbI6TVpOekaoukrgoLIupptQGQuonlgT8l+Haosagz?= =?iso-8859-1?Q?ri8mBcRphhaa8n9MZY4gHfNkvf6zGmBR4Lb6jxRyl8ZOQPYUz8vcjKvmS4?= =?iso-8859-1?Q?GcsQgNRl2X0PKiCvsyXNJZx6d1DySljbQ/HCK2gKykmtN8gFKvpt+X6SHJ?= =?iso-8859-1?Q?1F24VsNtXwIFdGA/Ptli0uQLB8wLuS5nHNhPK2u4ff79eDfc28B/uEBv13?= =?iso-8859-1?Q?YX4uDbneGl85sGvHeArDPsN6/0h2dcjSHVOTEYiyk8UAdk2562IcIKwW60?= =?iso-8859-1?Q?c2Cg118rIxH+REORSdf0X0/WlqSaXXQB9oESEAsq1yJc3Nh94deVv6z51E?= =?iso-8859-1?Q?53K5YtxS+l7wiBSD2KvXduM5PsMWJ8Il8ZvWVAhVErC4oxtM6YWNMAwIs9?= =?iso-8859-1?Q?bXn4AlCW1riMAKhjYoEgzlljGVZ9+LYWzaurLopawzdquiCKAPsndEY8lH?= =?iso-8859-1?Q?qZjBC3pxWxHRMgm/IxqcHMTFbfWgF8aZRwFCpQf4g2f56zFoNl+HqX0a7j?= =?iso-8859-1?Q?v9CUcks7oWzOtWTq+M83mrYRzq/gmSMsY7C79sPDI0yrPSuvcnfgWa+4hu?= =?iso-8859-1?Q?MnlusjzNyByTwZrIauO3GFLxZGVagc0AMnz/90i00AXwNXw2CPcwNdFKW3?= =?iso-8859-1?Q?psKzuapU7BBsUCwRolkyl62nts78HJ5v30QVTa7ooBbZmzWAo+p5/XWovt?= =?iso-8859-1?Q?JABl6dhR7pInCYJ/8h7OtcxAYr3PbeA=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48df5614-b3bf-4b5f-7b3e-08de62762a5a X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:38.9082 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eYrJ1o6b5X3GGapGp+aJsYzpIjgVgsjSsGfOVltrGr83RUIvHw8FjvMfjXkJRVaea4wInPk+omAQGzwNRlypCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048909130154100 Content-Type: text/plain; charset="utf-8" Add a helper to write LPI configuration entries. Expose lpi_data structure in the header to be used in said helper. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-lpi.c | 39 +++++++++++---------------- xen/arch/arm/include/asm/gic_v3_its.h | 27 +++++++++++++++++++ 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/xen/arch/arm/gic-v3-lpi.c b/xen/arch/arm/gic-v3-lpi.c index de5052e5cf..c029d5d7a4 100644 --- a/xen/arch/arm/gic-v3-lpi.c +++ b/xen/arch/arm/gic-v3-lpi.c @@ -46,29 +46,7 @@ union host_lpi { #define LPI_PROPTABLE_NEEDS_FLUSHING (1U << 0) =20 /* Global state */ -static struct { - /* The global LPI property table, shared by all redistributors. */ - uint8_t *lpi_property; - /* - * A two-level table to lookup LPIs firing on the host and look up the - * VCPU and virtual LPI number to inject into. - */ - union host_lpi **host_lpis; - /* - * Number of physical LPIs the host supports. This is a property of - * the GIC hardware. We depart from the habit of naming these things - * "physical" in Xen, as the GICv3/4 spec uses the term "physical LPI" - * in a different context to differentiate them from "virtual LPIs". - */ - unsigned long int max_host_lpi_ids; - /* - * Protects allocation and deallocation of host LPIs and next_free_lpi, - * but not the actual data stored in the host_lpi entry. - */ - spinlock_t host_lpis_lock; - uint32_t next_free_lpi; - unsigned int flags; -} lpi_data; +struct __lpi_data lpi_data; =20 struct lpi_redist_data { paddr_t redist_addr; @@ -492,6 +470,21 @@ static int find_unused_host_lpi(uint32_t start, uint32= _t *index) return -1; } =20 +void lpi_write_config(uint8_t *prop_table, uint32_t lpi, uint8_t clr, + uint8_t set) +{ + u8 *cfg; + + cfg =3D prop_table + lpi - LPI_OFFSET; + *cfg &=3D ~clr; + *cfg |=3D set | LPI_PROP_RES1; + + /* Make the above write visible to the redistributors. */ + if ( lpi_data.flags & LPI_PROPTABLE_NEEDS_FLUSHING ) { + clean_and_invalidate_dcache_va_range(cfg, sizeof(*cfg)); + } +} + /* * Allocate a block of 32 LPIs on the given host ITS for device "devid", * starting with "eventid". Put them into the respective ITT by issuing a diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index aa54e9a364..9f0ea9ccb1 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -157,6 +157,31 @@ int gicv3_its_setup_collection(unsigned int cpu); =20 #ifdef CONFIG_HAS_ITS =20 +struct __lpi_data { + /* The global LPI property table, shared by all redistributors. */ + uint8_t *lpi_property; + /* + * A two-level table to lookup LPIs firing on the host and look up the + * VCPU and virtual LPI number to inject into. + */ + union host_lpi **host_lpis; + /* + * Number of physical LPIs the host supports. This is a property of + * the GIC hardware. We depart from the habit of naming these things + * "physical" in Xen, as the GICv3/4 spec uses the term "physical LPI" + * in a different context to differentiate them from "virtual LPIs". + */ + unsigned long int max_host_lpi_ids; + /* + * Protects allocation and deallocation of host LPIs and next_free_lpi, + * but not the actual data stored in the host_lpi entry. + */ + spinlock_t host_lpis_lock; + uint32_t next_free_lpi; + unsigned int flags; +}; +extern struct __lpi_data lpi_data; + extern struct list_head host_its_list; =20 int its_send_cmd_inv(struct host_its *its, uint32_t deviceid, uint32_t eve= ntid); @@ -223,6 +248,8 @@ struct pending_irq *gicv3_assign_guest_event(struct dom= ain *d, uint32_t virt_lpi); void gicv3_lpi_update_host_entry(uint32_t host_lpi, int domain_id, uint32_t virt_lpi); +void lpi_write_config(uint8_t *prop_table, uint32_t lpi, uint8_t clr, + uint8_t set); int its_send_command(struct host_its *hw_its, const void *its_cmd); =20 struct its_device *get_its_device(struct domain *d, paddr_t vdoorbell, --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048911; cv=pass; d=zohomail.com; s=zohoarc; b=FllSYYyEadpyJPPYreIoAv2HU9DQaasovLzBJgzY54fmTXPQYFmDL1U6w5LATMxcq0/1lyLObSHooMurock0sMwNajFgtAFospF3Vp5XPsdk1M8QrUpnd/PHTuvcgCfRfpogf510OdYMVca+cmnKy4WjITSb1dXVI54ti1P5EuQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048911; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W1pz7vCFYxpX9MTz+b8Eqe1m9onDCDzvD7qLN1X6f4M=; b=aqgnlnu9KPczeJBMiDEQCIEhzXOsf/W+oSnz1s/OFhSHN6ZG5ukWhii9U3SxwmVCvULyyLqdqAcBrsDU9VaqFbNAw3AsmCDnVpbwaKaRpf6KTDPJ3D0n0jzJ7Xk38UEtg5m6OtvqE9U19bxRJ0NbszkNWe420wbOTcMd2JecwY4= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048910828107.63325008029744; Mon, 2 Feb 2026 08:15:10 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218795.1527696 (Exim 4.92) (envelope-from ) id 1vmwZb-0001tB-HN; Mon, 02 Feb 2026 16:14:47 +0000 Received: by outflank-mailman (output) from mailman id 1218795.1527696; Mon, 02 Feb 2026 16:14:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZb-0001ss-Dh; Mon, 02 Feb 2026 16:14:47 +0000 Received: by outflank-mailman (input) for mailman id 1218795; Mon, 02 Feb 2026 16:14:45 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZZ-0000fY-1G for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:45 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 47b44db1-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:41 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:39 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:39 +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" X-Inumbo-ID: 47b44db1-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Erbisb+Of+SlMSdxM72a2OwcpAzZU303H66E5pwuV2nddPckGsF0KjnEETALJUai2jcGQB5pWf8znDlgtM7enkOFqePYJgj9I+MS1EhaKaqjYo9BOmDlAMPf5bX4zJ5gyUplFXbRRqybv8uPu8Du8c7DTFocHC6RTTqFdRCGru+6fwIllsRVjWSoIP9V6FBSFcxBVh/rCXBqUIwaMS1uJROsR4ZUZtArqacuGaY4fwBU7FA+PoJQqk6F5FJSQiMQzBNBUsD/WDjZtyRuJqAd/aI7v+rHfNkVXbsiRJRFufX/7G8lG7IJ9hUH6RBZET/eF9te0/2XBe0tYPh5q/6sSw== 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=W1pz7vCFYxpX9MTz+b8Eqe1m9onDCDzvD7qLN1X6f4M=; b=q3lr3ApVth3VcNLXK8GyHLUCcNwlkpgQPgYm9GEl85vcB9FHjlCpaeX8CGnVPX9FbHLdXtZGPq2wNG3h591UJQ1ODIVTSIs6dRPMXovF0Q6Xim2Cjo/49Lc1G6qBHHO8U3trAOgm905wLC5+JHJabotIEmS84EQA5xuJXqdm08mHtZsDKaqo5OG2GaXXTdO3HP8FIwfVCVOfJ7ChpM5/+I47tR5DBXpw83kpcRhF6l88vkDdep3abMTrmr8y2KtoV58JO8X8WQio7eLcFL6A0u3XPzdmCQ9bjWR04b4U2Mwm807ABh+dsnaUQ6eZCj2DglnR5lpY0PFYj0Z830dnSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W1pz7vCFYxpX9MTz+b8Eqe1m9onDCDzvD7qLN1X6f4M=; b=sOAxwG8iNc/ha0SnPilfqyrl3KkDbLt56L0Fa045YBPZCiC9Ef60Z13oWbJFX3VemN4SIbqz18BzDspH6zpBZa47rFjBnUJPhluFLQ7vYUdtFQ8PPHTK1TIBz+KMg1xpXFbA2amoyc0riGvlMTBKa6+7Uonipn3J9bpZZZufEjQkcn0OGfAw8kc/UdehVpCvrrTctaA43zOcJ5kRCgd1pfecK+1E7838Vlx4uTAjT7tl1enfW5LNdu7ex9/GCGbOH6duU/ZOi4QJc5EU8EWOEQYrrRmx5qAWRVsMg7GgMe4vdOLGD1BCgwkHjTURiX7Dd8CdNiTILCpan4nlbRL7UQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 05/19] arm/irq: Add hw flag to pending_irq Thread-Topic: [RFC PATCH 05/19] arm/irq: Add hw flag to pending_irq Thread-Index: AQHclF8IAwxlbrsSsEO8DhPwxpUVpw== Date: Mon, 2 Feb 2026 16:14:39 +0000 Message-ID: <5d63b3b4c9c7b43e7cd8afdecbcf0b2c77f51d13.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 895c550e-c48f-45b5-6e73-08de62762a8a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?+YFxjRX6cW5YnTOVwX9rfJF4ANjYhwdBIzBs4E2XeLMno0PhuF56bHd3kB?= =?iso-8859-1?Q?vfJpZPH5JjKsRmKpg78AVZBaHao+hIpiYUJW2U2ihHWPslzImDQV7+Bhzs?= =?iso-8859-1?Q?NVa4g2OVWUXVuyYj+3h6fU4Mtysd83c6haNh5O+UdXJqput4PA5MfgdBHs?= =?iso-8859-1?Q?xErl+T5AGIdrtdxuWgfVq3PP6Cjcp5/lIQ3oELv2VnFmLIdpWV7VLLkTxl?= =?iso-8859-1?Q?eU5sURUDyZzqxdsTBnheYi/F3ZMGNortcKy2L7+cw/x5lI5cPGpULhbVCV?= =?iso-8859-1?Q?OuffD9XRiNh8OnDbUsoHJD6D14ydPgK26Nh7cAhJM96qK06TUl0sOQgLcl?= =?iso-8859-1?Q?ywbxh2S4mG/whoRNKur+9qjel7tue+SpCede5IN2y+xDGWdn7Vp6d4n7JJ?= =?iso-8859-1?Q?OIAcLKIPno6i/J030GTWu7OP7DeoS/zkMgHOSkeAcoCKZxNxxHwWPNOa+Y?= =?iso-8859-1?Q?WfNDkuND80WYPP2P0urVxmnF0hdk8W71P84jHbXRdJGtnUiSEpI+pzVJ8N?= =?iso-8859-1?Q?P9jVC1Mnd2TNO6kNn20vk8FlnJr0aBTulwBqExR0CsxJA/xu4srpGWxkmz?= =?iso-8859-1?Q?dnOsoJiH8buuhHOBJo/SBopGOdAWbUrBbdCyCNgflwcSxmDvccJb0F3ea4?= =?iso-8859-1?Q?p7iqvXmZAqe7QVf+t0Y+eGx1QCgxWcSTNC5ArDkLQbDlV2XP0FgLZTafgq?= =?iso-8859-1?Q?CHQ1Mvft/pQdMKQ4xZkHJY/XdBeyRWTNGGRkQYVJaZXwESmIfh86Yu+yN5?= =?iso-8859-1?Q?u5RprkDhmgH1ZMJqoQNcZWpkzI67YCa6Wf5OQtIINUD/qS1vxvV4qHYN5r?= =?iso-8859-1?Q?kNjplVusG6TTlh8gSMvZzhQZHZfAwr0pF+c6K6P0MFFMht54eDGNvLIkYJ?= =?iso-8859-1?Q?PWIjy2HAERftvM8cWsG6Dz98jXCXh/YNRxuHeZ/82nahH1wadkrM5B2PPk?= =?iso-8859-1?Q?W6zyQleod8BEBbA2MOoOVYdTDq24+NLpUjCzz4GioyufAIK0cGXLWRS53R?= =?iso-8859-1?Q?203lvH4QltfOBfIiDPJXww+Ob9q3FujBmfT+9MyBsU33o+bU/YlAdp7R8C?= =?iso-8859-1?Q?+WNNEup/s64Xh1Yg4Q8Nca8s0EPu/7cfd7wlC9AVaVMhblAh6nNmQiNJPk?= =?iso-8859-1?Q?Dd29cH0d+0XRqNz4AG/F6Nnchh62+GGYDFt3P5gavCWeSgfI7o+4D6wSlJ?= =?iso-8859-1?Q?tQkz4DQbd8ojLIM8pEsWyWgY/PtQtz9avRwkdQ0PVP3zC5pcbOFzlOZLcA?= =?iso-8859-1?Q?RboC8SgqYHan3+loyU6z34mvfCPa7Ep9+/FLyn3OpBi4GgMyL3Rth9u47B?= =?iso-8859-1?Q?Hn6LvZjos0AMa5o+fqRxmNH00UR7CqC5sHPFmHm9FPCNjEoomW7bFd0O+p?= =?iso-8859-1?Q?2xevZaWi8kutGqBa1SMtgh+Au8gQSY5eJwk5XWyy/xkZPrkLDH48O11A3A?= =?iso-8859-1?Q?yPq9ISz+WKba1yxaulGXIzyv6ZDe8Ikc5TFKK4/ULCTjwouW8EVUHA+0in?= =?iso-8859-1?Q?Lk8pdovxMTISdaFqinktupSuAWjTzx6mTICjFeoVEF9xKyIirVt4x867j5?= =?iso-8859-1?Q?RKrIQKZCuTo/EsjEubpGVlQwHSGCiHK1xx0Di0WTNYb6bjGwcqViK+rsDg?= =?iso-8859-1?Q?AvyE02bPzTYteDj4c0p/cTKPYhImoXfdcYri+0ipSABlw5m6G1eZITeLyp?= =?iso-8859-1?Q?uD9TwrJQoyi7LQHO934=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?fpQsk3Q9v17BnWAuFXt/nokrqeT/dhkWGo0TE167OSuzQQ6yZjcKZprXd2?= =?iso-8859-1?Q?A+MV8hz66gCrMDJnBB5deE5ZiLfWjspY13wW8p2RjkPBnkoSbZIymuuIDi?= =?iso-8859-1?Q?wkPJT0mB6dLIxyWu2vx49hFPEgDdk/rcem3k1R0GItsRaVC6jarFMfaNNr?= =?iso-8859-1?Q?XXA3Bb34bsBn0Y5yY9K0sLRSSsc9kQUvoTmebrBm+4yowF8xbVqHvqc1ju?= =?iso-8859-1?Q?CyaAu/YEufVVU67W080u41Xo2uiAnyCX9fqgugCplMN/5RVX172DzhxzWu?= =?iso-8859-1?Q?p+zodqXzakLJVp3R/FrxcFOHync9Q5jKrezdf1FJjAxsOwlZCb5vNS80jB?= =?iso-8859-1?Q?NeGlmkEK9rhz/H3rJPYvk266DRmLIzsunz7FTg4L1yJw518rYaPAMNEvBj?= =?iso-8859-1?Q?AQeMK7VIJnht9L/wZweB0bSZpEzZyGTk1YxnmA1xycyc7eB+DuBn+yjhUp?= =?iso-8859-1?Q?s56JM7BLkjrVAie6w9CuV0EUzkPOzZXvrVpGM8B5JqUrzvVVnidn7MOqpk?= =?iso-8859-1?Q?tUx1kGribyWie5CGj3RwdQv2cR8paWIkwAhm2QkOPF/M1KU75xRkUbHY6v?= =?iso-8859-1?Q?oENf9bEfEtpPE+XdsrQD7qQskyaM040aJMCwJnfCjFU+9osxyZqmTspCNO?= =?iso-8859-1?Q?qdAG+vnsIaMagLNJg+1NROXDf2GirDivscGz/e3Ey9zZJ6bIa14WkCCUY+?= =?iso-8859-1?Q?qoxMulnyKbmIVj1m6vWPwdxQC9MHbXWtsdp9h3VUt8f31HH0bvtKI0b21B?= =?iso-8859-1?Q?B1jzUWqd3VId6AVexUhQsK2fDsmFI9f8gOFs6yPUfdjS8SYkQAVQt4tmus?= =?iso-8859-1?Q?KgQYRDzKDeJfoCs7ae7KkCFHArJqvmn/h4PVzDBWvHG0lYTzLNQLZFAKal?= =?iso-8859-1?Q?DNx29upCuhjbAHrNbkW78R1xvwh2UeZhQBfzQKZuy0DJHrFA4B39q0UmRg?= =?iso-8859-1?Q?bZMXX9orf8d8yz7CMmpIogjMF2mtpf5XqUf3+6GyKNMB7oR11J+rpkYTv3?= =?iso-8859-1?Q?uGhhOs/8+x8+e1rCG4h3mBs1WyUC9hmdifOObLFb/u0J6hizKmdFINxbiY?= =?iso-8859-1?Q?mn3zKxh6dluSpwrTj6N3zYS0jX+KmZ9RsOM/eHpYmKwZQcy52IidCy0pPn?= =?iso-8859-1?Q?4y6Qvcf9uKT1h7uta62szB5RAN4GnbpjXRgphPtQQv9hOzBJ3PCjPZNyPY?= =?iso-8859-1?Q?8hdn7KfKPeXcLTreH5MHyvW0zln0UPK4VHuzV980X56UDlvhHtHXM6wpXN?= =?iso-8859-1?Q?jW1VsST4nVJN2mSX/6linX/mYAXgxXopZg5aJg8VP40HYPFEJWn7eIda2h?= =?iso-8859-1?Q?PW8L7Kn+mE8O5ji/5W6NtM0lDz2F92lJ5eny3cGZM3oxnYp1LUznunSf59?= =?iso-8859-1?Q?Zlu5/lCMC3EP7G6H5658Kl3hY2F3SFYPP9seheBynIrXvF5t0+mHfixrL4?= =?iso-8859-1?Q?gUQVbo9FDwNAqFt6XeJARz6mgNQgM5HLAdKBCsGvN6JFwbIfQUSB2Wq4AF?= =?iso-8859-1?Q?uYfPJyqumHY3x5DvDmy3KDhnh4Fm3i2nBSz99HpfnjA4Fvj+VesjpuJZ42?= =?iso-8859-1?Q?1z0Q51DEQUaY3YPo9MvsoyicTnV03/+Xnmfcfyl6EIyBp41HlHS8g/uTsv?= =?iso-8859-1?Q?iUnXRLuR/RcaTw9vwhC2BzGaMxb/nx6j+AbSOhpLhgMnvtTTNqW+wXinc+?= =?iso-8859-1?Q?LfW1gXFXVJkd1HxhOP6ZpljXq9fFHtk0uivJRFVNlcZTbjxUEXxPue/bzF?= =?iso-8859-1?Q?JdyF+y72yJQGeFimMi7rYGHSErlZYNljCWVENIGoEZYv13WVfYLVa1ZUxo?= =?iso-8859-1?Q?/QMnYrQwohpUeG9zz+tyAsMWbjFGkJU=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 895c550e-c48f-45b5-6e73-08de62762a8a X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:39.2434 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: JXwwlmfxxG7ZsUUcxaQHvqiFUQpNvhKMdIy/f2xQ4FSCLGChlRqbjpvhj/NfN2X7cMLBcuwh2/Jm9P2H3X2iSg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048913251154100 Content-Type: text/plain; charset="utf-8" Add a new flag to vgic_init_pending_irq() so that we can record whether a virtual interrupt is tied to a hardware one. The ITS code sets the flag when mapping an LPI on GICv4 systems and the cleanup path skips removing such IRQs from the virtual queues to avoid interfering with hardware-backed injections. Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/vgic.h | 15 ++++++++++++++- xen/arch/arm/vgic-v3-its.c | 4 ++-- xen/arch/arm/vgic.c | 10 ++++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index a874a02d70..77323b2584 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -94,11 +94,23 @@ struct pending_irq * TODO: when implementing irq migration, taking only the current * vgic lock is not going to be enough. */ struct list_head lr_queue; + bool hw; /* Tied to HW IRQ */ }; =20 #define NR_INTERRUPT_PER_RANK 32 #define INTERRUPT_RANK_MASK (NR_INTERRUPT_PER_RANK - 1) =20 +#ifdef CONFIG_GICV4 +static inline bool pirq_is_tied_to_hw(struct pending_irq *pirq) +{ + ASSERT(pirq); + return pirq->hw; +} + +#else +#define pirq_is_tied_to_hw(pirq) ((void)pirq, false) +#endif + /* Represents state corresponding to a block of 32 interrupts */ struct vgic_irq_rank { spinlock_t lock; /* Covers access to all other members of this struct = */ @@ -360,7 +372,8 @@ static inline paddr_t vgic_dist_base(const struct vgic_= dist *vgic) extern struct vcpu *vgic_get_target_vcpu(struct vcpu *v, unsigned int virq= ); extern void vgic_remove_irq_from_queues(struct vcpu *v, struct pending_irq= *p); extern void gic_remove_from_lr_pending(struct vcpu *v, struct pending_irq = *p); -extern void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq= ); +extern void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq, + bool hw); extern struct pending_irq *irq_to_pending(struct vcpu *v, unsigned int irq= ); extern struct pending_irq *spi_to_pending(struct domain *d, unsigned int i= rq); extern struct vgic_irq_rank *vgic_rank_offset(struct vcpu *v, diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index bc738614bb..576e7fd4b0 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -610,7 +610,7 @@ static int its_discard_event(struct virt_its *its, =20 /* Cleanup the pending_irq and disconnect it from the LPI. */ vgic_remove_irq_from_queues(vcpu, p); - vgic_init_pending_irq(p, INVALID_LPI); + vgic_init_pending_irq(p, INVALID_LPI, false); =20 spin_unlock_irqrestore(&vcpu->arch.vgic.lock, flags); =20 @@ -749,7 +749,7 @@ static int its_handle_mapti(struct virt_its *its, uint6= 4_t *cmdptr) if ( !pirq ) goto out_remove_mapping; =20 - vgic_init_pending_irq(pirq, intid); + vgic_init_pending_irq(pirq, intid, gic_is_gicv4()); =20 /* * Now read the guest's property table to initialize our cached state. diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index 6647071ad4..0da8c1a425 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -112,7 +112,7 @@ struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v, uns= igned int irq) return vgic_get_rank(v, rank); } =20 -void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq) +void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq, bool = hw) { /* The lpi_vcpu_id field must be big enough to hold a VCPU ID. */ BUILD_BUG_ON(BIT(sizeof(p->lpi_vcpu_id) * 8, UL) < MAX_VIRT_CPUS); @@ -122,6 +122,8 @@ void vgic_init_pending_irq(struct pending_irq *p, unsig= ned int virq) INIT_LIST_HEAD(&p->lr_queue); p->irq =3D virq; p->lpi_vcpu_id =3D INVALID_VCPU_ID; + /* Whether virtual irq is tied to a HW one. */ + p->hw =3D hw; } =20 static void vgic_rank_init(struct vgic_irq_rank *rank, uint8_t index, @@ -202,7 +204,7 @@ static int init_vgic_espi(struct domain *d) for ( i =3D d->arch.vgic.nr_spis, idx =3D 0; i < vgic_num_spi_lines(d); i++, idx++ ) vgic_init_pending_irq(&d->arch.vgic.pending_irqs[i], - espi_idx_to_intid(idx)); + espi_idx_to_intid(idx), false); =20 for ( i =3D 0; i < DOMAIN_NR_EXT_RANKS(d); i++ ) vgic_rank_init(&d->arch.vgic.ext_shared_irqs[i], @@ -304,7 +306,7 @@ int domain_vgic_init(struct domain *d, unsigned int nr_= spis) return -ENOMEM; =20 for (i=3D0; iarch.vgic.nr_spis; i++) - vgic_init_pending_irq(&d->arch.vgic.pending_irqs[i], i + 32); + vgic_init_pending_irq(&d->arch.vgic.pending_irqs[i], i + 32, false= ); =20 /* SPIs are routed to VCPU0 by default */ for ( i =3D 0; i < DOMAIN_NR_RANKS(d); i++ ) @@ -381,7 +383,7 @@ int vcpu_vgic_init(struct vcpu *v) =20 memset(&v->arch.vgic.pending_irqs, 0, sizeof(v->arch.vgic.pending_irqs= )); for (i =3D 0; i < 32; i++) - vgic_init_pending_irq(&v->arch.vgic.pending_irqs[i], i); + vgic_init_pending_irq(&v->arch.vgic.pending_irqs[i], i, false); =20 INIT_LIST_HEAD(&v->arch.vgic.inflight_irqs); INIT_LIST_HEAD(&v->arch.vgic.lr_pending); --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048907; cv=pass; d=zohomail.com; s=zohoarc; b=Y3EMtnyg8Gu5+SdNCvqybq/2uqWVD0SfBUGci99wUawGA/mYTRYsOvjaL+ppeMQdM9w8lB3pRmG/aWcIC94AEQkEUThEojKfcUQDC33zvkm3gmo17AsuhpgEG+qkp0CyDsZ2w5y/pVWB6loVaVmdTAs1Nbmmb8JIHZYeQUWm/8o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048907; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GTPHXMX3fipHD7hAp9lN3f/0Zh89SWFqMLQN0ky9Opw=; b=DKnqatb299939PycZqJZhlLaKude2LnRfhc7Mgp31WZWI24SpqC4Frg0VEqktqcRSjDK9+LEw2SUQnZ52BV9COMG/YNY8TKqP5CDe+hpvsb2dhxoVwyiUgixmUtFvwyAtXwqNQDo9QOUPy5aFuJV2djYJAL4YUE9tiA7pFuJxFQ= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 177004890725615.039179181588906; Mon, 2 Feb 2026 08:15:07 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218796.1527700 (Exim 4.92) (envelope-from ) id 1vmwZb-0001xJ-Sx; Mon, 02 Feb 2026 16:14:47 +0000 Received: by outflank-mailman (output) from mailman id 1218796.1527700; Mon, 02 Feb 2026 16:14:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZb-0001w4-Ni; Mon, 02 Feb 2026 16:14:47 +0000 Received: by outflank-mailman (input) for mailman id 1218796; Mon, 02 Feb 2026 16:14:46 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZa-0000fY-1G for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:46 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4810d5eb-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:42 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:39 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:39 +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" X-Inumbo-ID: 4810d5eb-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uo2hE3MQhU8Y/+6mnxplSpwliCr6Yv+j7bBXbsy3c51B/PAG9AS4vPBufm5CznAAtHXbrLLHJeagO2K52Ci/IetI1R/RFLwWzOGiKsq2NiMoFD7BRBcGJbpESiXEZm0hBEsUrxGd6cvZqsuKm2IURnHkKH7uQmVMCDPpAa4XSTMKFG5MtvQyqIUTeZvYmJIhrLAVEOzkvfNyy4wIlvQ/nHh5nqlsUlzhMONjxzLUYEt/EaNxxRdMzfz/MQmguGjeax+JjhTa49o1+OJogCan29fv6CiFt1I7kJwpcl7TCDzdKHzicSTkp/X22K0fgSAO9iotCZYLEhNbhpX8MbSRDA== 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=GTPHXMX3fipHD7hAp9lN3f/0Zh89SWFqMLQN0ky9Opw=; b=so9teKL6xQBct73mBjzgbH839UQbaJ0SuLlTkDbkj6OLUq25272p2Bx7U31aOvv2R/to5WuDj7p+CNXu9tA5on3OaqhxazsZyeNURjlmD+Eh1KT8zrZyw4pRj0xQt/qtisB1aWAOTxsEZs8eVjciUh/AjPm30SOl3y0NbFgWJ6BmlZRnovgoile/n0RGLKERW0KFlY8vl6s0PME2BZdtmudtC6CaOqVpDN2Lsj06E31XnEFeXhu0vHKD/BLjVIfYaeLoI+qq6NCDxbWSaaGcJK5a7kJum/qSRw2B98v7+g+MaTZlOdtRe5aD1irR84uIXSBamHNbly3q9lkxqrRDDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GTPHXMX3fipHD7hAp9lN3f/0Zh89SWFqMLQN0ky9Opw=; b=shmU30LNwwAJU7LjepflUy+GXLcaP7yfnhmDuKhwZPavbORnUYYa4/+J7ZnvvIwwrwwiW7l80OcQlLXXoXCFXEDZFz1LQX79uUOK1MFTn6wm8hSMGjychXMVNxKptVIpUvgNdSN4XTplng6q6GF9hY7/BeAPGymrWe4b/RmuNzmAoA187lNw0YtcdfuGu16RD7s8utm8aYljMUAOuemrJ4SN6bgomzQ4bQ3EZRZqh5KuSheq92cRZDuT7yzGr6o6VTYrDNIpm8h4Gd5l0hl11f03xgWYvwyTbIDULAvf/oaYiDvt3ayblAj6Un8qaSWmFZ2mHfXIvZMFUVL5Me4+1w== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 06/19] arm/gicv4-its: Add VLPI map/unmap operations Thread-Topic: [RFC PATCH 06/19] arm/gicv4-its: Add VLPI map/unmap operations Thread-Index: AQHclF8I6+NnH8ugx0O4CpyExrWGFQ== Date: Mon, 2 Feb 2026 16:14:39 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: dda4a3ec-6969-4f7d-f260-08de62762ac3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?EC1wxpwNhlBNHT5dY52Gb/hwIq6bkGSY+Yh/4qg+pkO42i3AiWdoatBLg2?= =?iso-8859-1?Q?oPhM1FFJ5Kng65/rip9weKrcx7ePVaF2ApNJ5rgd4exlu8K8Ik6vi51HgN?= =?iso-8859-1?Q?ABtwSigH2GVowsI9Bx9gWD9WMLMwUueuz/u6flRQLgvGyTdZl3AqjgFeEa?= =?iso-8859-1?Q?NWv8hNl/c0zmx3CcW6lcKaH0cqfUn975oPoKdZkhhpqaUj4+QYZnGC+1Kv?= =?iso-8859-1?Q?p82TZ0Z3UejKTXVBLzaK6pwYu/NpMJz3Mgy/WvF42RMuMByB+D24ZilIJj?= =?iso-8859-1?Q?WOPAA3IIULp6iySdaL7LQhWojLXdsViZsSNeFdxni2XXJVupj1Tz5y0/NX?= =?iso-8859-1?Q?lg8+vznlLJe7Bd0pistUu3X5ct/SB15uXoPwTIEDzTZ1RPUvf3wzBO5jg2?= =?iso-8859-1?Q?61fOTa+NQHQPBuL1Gd58JICiVRUwoDa3Q/kYEwIEPdMqd8StV4CNmuzQhj?= =?iso-8859-1?Q?DKk9yUPQWIE4qKRwuAOjgxmKl42jFK46Ger86MmSRiNpCinlgUtasgg05G?= =?iso-8859-1?Q?X+34PhMD+J9iE0CJOk2qBsPg/LZ2gMTnP30xudptWpUWdKN0PsWKrtaDqN?= =?iso-8859-1?Q?HBd9Oi4I4TEUZ8RGmWNDTA0CjaKP2Lnu8ebAkmOlA3ckd6OPt+3gL+aZxQ?= =?iso-8859-1?Q?9HAjDU7+K+EbaJuZVhbZOgZ07Z6ERJ4cLH3E3KdegEJmwqQMdQptoHbvTI?= =?iso-8859-1?Q?Hhkd/WfYLcBn8hWz7Dskp80FfMtqKS1erzulofw/coWww8qb46ampeY+Cz?= =?iso-8859-1?Q?JRKxf/c4AwpsmYM469cqEkM2vqoFGQt0X38VML1ONWybT5g2SaXnYh8L+g?= =?iso-8859-1?Q?bf8lH6O+cXmOrm9pq/AW8alsc9aZoZvyQy3iLV5l0RIILtkDCYv6Eptkam?= =?iso-8859-1?Q?xzAYeRGV6bZ3qGf1VLfgRqx0kFijwyk9Bf1KhF60j3vQIJqkKpChp2eE/e?= =?iso-8859-1?Q?4uCXw/ReleypwUPA6AwgFGVgMgb6vqGTTyL614faQVUtmcE+IYmoq8PjC5?= =?iso-8859-1?Q?27Wr2MzF703PePt/aAxdwtqvETzjnb5Xn0FukkFXtna0A6GXl20S/YyX5w?= =?iso-8859-1?Q?NSPDtwxxkJjBLR+ZtJUK4Ol7AP9W8CDB13YhGN1Tu7flQFpw9SoNgAwzdC?= =?iso-8859-1?Q?G69mqS29yIwHOeervHyKGHbaEOoJn/DkLH5P9wYgDjum8iUWkhw50CQlcY?= =?iso-8859-1?Q?nLgKKm7ZWwclOw6fjCA25GLT8TA+2z1nGmeqygGTJjZjyh8Ptjf4x817NB?= =?iso-8859-1?Q?++U1iET/JEQXn2ZyBX0BTil1iRywspfFvRnaVP3tuc20fQZQm7JnANzXGm?= =?iso-8859-1?Q?0QAnisMWRSIUx04dsL1G7/TIppMXk6rNTvd2Kcfnef+Y9AXkHiKkMDhQkE?= =?iso-8859-1?Q?Qczr6ESs32pea1rb2j18fkdSzDhgQh8cf64YiaBtE/xwGE8JH9rhcwv1B6?= =?iso-8859-1?Q?vUdIFjy2KwRRqcyqGSpA2nK+F7vSLJ9N0iFHEMSyvIS9WWxUANEfTeoHAm?= =?iso-8859-1?Q?51utlxQllrM4IZk2v6PfMJY0lprQIdwkhXPYPRkk4gix9D7M0QlmJrW1DS?= =?iso-8859-1?Q?hRByEu7ZlYsGgXZzO+99zBQ21lJ2uYLRAjy5IAmCofUBUMH/Nc2ZDuckpk?= =?iso-8859-1?Q?MtraQtoNh0kd3dlVPU633QXFvXjEKxW24aGvg8xzR0QQ47lLIIEZp4TJGN?= =?iso-8859-1?Q?xl0jh2/tDkcOS5sE/O0=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?K6hWoTP76894LqB/xRhftcMZEhUIzIae0bqsj3VAOyVdN8yzxOlb76iTPQ?= =?iso-8859-1?Q?LzbsM3NgqC84qeaNJNNQaJYo/vXXHjNq9wCznfbDdYbfJBOoY48KTvuNeF?= =?iso-8859-1?Q?jHc5Xr7Nb53l1OHlBLH//U+3QtVlNUIy5Cj2Y3UuJ8MPSBkYgvgVT5evo5?= =?iso-8859-1?Q?q3fdiaeYVxtyzXVHpjAZtVWRKyJKBL2Ks6lQf2q+1lx1rn5dBQiba7eoJt?= =?iso-8859-1?Q?BVP/7jHjGRP13TTyNsMOrms3Opwz2R8wgsTCflLuOt2TGYE0KphrRkFGTq?= =?iso-8859-1?Q?caNzE7IgSGuJrmTH0CQstmszNJl0lQ+z1S7iGzk2iEGIv/sjyqFT4G0/tM?= =?iso-8859-1?Q?2Yb2SyQAsLWvwmNQaUXXW6SRkYwFW2Ui2U9kSGDx8GFwUueD/ODgYaM3Yx?= =?iso-8859-1?Q?t8DNTZgGrqGgxtwCveyf1IUh69MV1gh5hu9HGygTupP3Q+QzuM5tKkvs1Z?= =?iso-8859-1?Q?4ynlj9DAlryYQBlZ/a3HF43/tlykTMpgK3Me5mBPNl63/t2FUYnJGZK9zg?= =?iso-8859-1?Q?UjHO/jkQL/zAqrHCQKxm8dHVqzvD+6WGGmcZX+kqS8JCtSMRHBOLlNA4UU?= =?iso-8859-1?Q?hjY+aMdZPDtGiZdzrWY83K9tDEG2MnaNW4ZNn1JhCU9Zf/gEemELf8jU5f?= =?iso-8859-1?Q?bxtrzxPKAqHnMk/ogZJt9gI2EKU+mRexqqjGLtuoublctmCP2a4CS5yHkm?= =?iso-8859-1?Q?R6jqGS9LmvTW3dA0cUV8Jp7UMu5gaX5H4FL5tg/mYtZLLAMdB6YzbCKbV1?= =?iso-8859-1?Q?Rpvrf77BFnHAyD/m7huZuDTS+fn6aX1xJzpzt0OFZ7HELu/HAJK4zL2u9b?= =?iso-8859-1?Q?Hnq3NGPsu9NamsDfJbC04wqntUkV1CykzFFA6yLIxM9YRPny9V2Lo2c0mu?= =?iso-8859-1?Q?tIM4WWwBVwHpK0siCEDx6zZFrtWRkkFgT93RWfnPfGk0aCZlhOvRd7D52P?= =?iso-8859-1?Q?4d4HquAEzKMI9xg1wEIs8ARobHzter0Ms2/doH0eE7erCQOAoM7go475lS?= =?iso-8859-1?Q?RSx1h3hwv7zKzk3OGB0SPhxctkme2ZYCmjI201eJrni59Nz35TU5aHqDEQ?= =?iso-8859-1?Q?KhUYPkJ3ofcoKfqoDjbAbXuxpb0AGQe28P0Izjd52YLVPdmnfBObSxWGbH?= =?iso-8859-1?Q?yd5H8cCMDncuxHMd8FN7rtykv3DzgJgtJrRA3eljGT0rnj0BT3NxBa+IV0?= =?iso-8859-1?Q?zZnetBWygt6V3NUiE3arsshOkLBU13ePY14H/G7ykWfOMQz84iGfJaK+FI?= =?iso-8859-1?Q?/UtAZSQA5Jm5hBmEq42hkqP8k4vGU4a8TpLhVur5Xvn0VZ7/SvGGAAP/Lo?= =?iso-8859-1?Q?D/SUTjloezvXf48pj7e1Lz0gT5WFImVvJNdO1Y9/NNw1sAGQB+eYBpv74H?= =?iso-8859-1?Q?PjnEQ8rxpVdVerN0rwXGeS+KVUpX96YC6nuSkUZk9uZZcFFt/imxsiuZzc?= =?iso-8859-1?Q?kTXwEiNesD7VNn+UYgpYtJeAzVFOnJU5sm20EtKXTKXkg0kSGyfxcBZceW?= =?iso-8859-1?Q?miQo2zxVOGaCdtT9tla2p6UClWB7KOADwEVOjWsUZsvHXZQ6ja7bWLXoHM?= =?iso-8859-1?Q?FuNHveJFsv5XyajN9BtoSS7AL79n6i60Sqg6AXiBV5fS3INqlry/6PL2sr?= =?iso-8859-1?Q?AIiAvbfEnV2UAfPhZVvPRh5IEsGgWc/bQFqVjfpzxsITC9K6Tx72y3DU3g?= =?iso-8859-1?Q?VMt1r1UyOzmbxoGkDOCeqlnBHP/N+RxXqiG16OkK1EioLDofZpgMmZh6Vy?= =?iso-8859-1?Q?oN/7Epz0LczmHZUCAf7x/YOIpLe6vzmSSvKs92pNYe4H03Ak2BcN01Ocls?= =?iso-8859-1?Q?MmPOuNUaTgkGI6lTgdQxuLd30kSl8a0=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dda4a3ec-6969-4f7d-f260-08de62762ac3 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:39.6030 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aazgJq0TTbF/EnamPFW34rY0hS57enu2SGrW5/cIwQlkSvKD0Mbxh3WTPoOWa8whBRP2Cd6An3rY+L6iZOQRKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048909185154101 Content-Type: text/plain; charset="utf-8" For VLPI to be injected into a guest, it needs to be mapped or moved to a corresponding VPE first. Add a struct to handle the info about the VLPI mapping and a flag indicating whether the IRQ is tied to a HW one. Implement mapping/unmapping of VLPIs to VPEs, also handle moving. Tie them to emulated MAPTI/MOVI/DISCARD commands. Add GIC_IRQ_GUEST_FORWARDED IRQ status flag to keep track of which LPIs are mapped to virtual ones. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 14 ++ xen/arch/arm/gic-v4-its.c | 292 ++++++++++++++++++++++++++ xen/arch/arm/include/asm/gic_v3_its.h | 20 ++ xen/arch/arm/include/asm/gic_v4_its.h | 20 ++ xen/arch/arm/include/asm/vgic.h | 5 + xen/arch/arm/vgic-v3-its.c | 42 +++- 6 files changed, 387 insertions(+), 6 deletions(-) create mode 100644 xen/arch/arm/gic-v4-its.c diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 25c07eb861..25889445f5 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -315,6 +315,20 @@ int its_send_cmd_inv(struct host_its *its, return its_send_command(its, cmd); } =20 +int its_send_cmd_discard(struct host_its *its, struct its_device *dev, + uint32_t eventid) +{ + uint64_t cmd[4]; + uint32_t deviceid =3D dev->host_devid; + + cmd[0] =3D GITS_CMD_DISCARD | ((uint64_t)deviceid << 32); + cmd[1] =3D (uint64_t)eventid; + cmd[2] =3D 0x00; + cmd[3] =3D 0x00; + + return its_send_command(its, cmd); +} + /* Set up the (1:1) collection mapping for the given host CPU. */ int gicv3_its_setup_collection(unsigned int cpu) { diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c new file mode 100644 index 0000000000..9bbd0d96b7 --- /dev/null +++ b/xen/arch/arm/gic-v4-its.c @@ -0,0 +1,292 @@ +/* + * xen/arch/arm/gic-v4-its.c + * + * ARM Generic Interrupt Controller support v4 version + * based on xen/arch/arm/gic-v3-its.c and kernel GICv4 driver + * + * Copyright (C) 2023 - ARM Ltd + * Penny Zheng , ARM Ltd ported to Xen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include + + +static int its_send_cmd_vsync(struct host_its *its, uint16_t vpeid) +{ + uint64_t cmd[4]; + + cmd[0] =3D GITS_CMD_VSYNC; + cmd[1] =3D (uint64_t)vpeid << 32; + cmd[2] =3D 0x00; + cmd[3] =3D 0x00; + + return its_send_command(its, cmd); +} + +static int its_send_cmd_vmapti(struct host_its *its, struct its_device *de= v, + uint32_t eventid) +{ + uint64_t cmd[4]; + uint32_t deviceid =3D dev->host_devid; + struct its_vlpi_map *map =3D &dev->event_map.vlpi_maps[eventid]; + uint16_t vpeid =3D map->vm->vpes[map->vpe_idx]->vpe_id; + uint32_t vintid =3D map->vintid; + uint32_t db_pintid; + + if ( map->db_enabled ) + db_pintid =3D map->vm->vpes[map->vpe_idx]->vpe_db_lpi; + else + db_pintid =3D INVALID_LPI; + + cmd[0] =3D GITS_CMD_VMAPTI | ((uint64_t)deviceid << 32); + cmd[1] =3D eventid | ((uint64_t)vpeid << 32); + cmd[2] =3D vintid | ((uint64_t)db_pintid << 32); + cmd[3] =3D 0x00; + + return its_send_command(its, cmd); +} + +static bool pirq_is_forwarded_to_vcpu(struct pending_irq *pirq) +{ + ASSERT(pirq); + return test_bit(GIC_IRQ_GUEST_FORWARDED, &pirq->status); +} + +bool event_is_forwarded_to_vcpu(struct its_device *dev, uint32_t eventid) +{ + struct pending_irq *pirq; + + /* No vlpi maps at all ? */ + if ( !dev->event_map.vlpi_maps) + return false; + + pirq =3D dev->event_map.vlpi_maps[eventid].pirq; + return pirq_is_forwarded_to_vcpu(pirq); +} + +static int its_send_cmd_vmovi(struct host_its *its, struct its_vlpi_map *m= ap) +{ + uint64_t cmd[4]; + struct its_device *dev =3D map->dev; + uint32_t eventid =3D map->eventid; + uint32_t deviceid =3D dev->host_devid; + uint16_t vpeid =3D map->vm->vpes[map->vpe_idx]->vpe_id; + uint32_t db_pintid; + + if ( map->db_enabled ) + db_pintid =3D map->vm->vpes[map->vpe_idx]->vpe_db_lpi; + else + db_pintid =3D INVALID_IRQ; + + cmd[0] =3D GITS_CMD_VMOVI | ((uint64_t)deviceid << 32); + cmd[1] =3D eventid | ((uint64_t)vpeid << 32); + cmd[2] =3D (map->db_enabled ? 1UL : 0UL) | ((uint64_t)db_pintid << 32); + cmd[3] =3D 0x00; + + return its_send_command(its, cmd); +} + +static int gicv4_its_vlpi_map(struct its_vlpi_map *map) +{ + struct its_device *dev; + struct host_its *its; + uint32_t eventid; + int ret; + + if ( !map ) + return -EINVAL; + dev =3D map->dev; + its =3D map->dev->hw_its; + eventid =3D map->eventid; + + spin_lock(&dev->event_map.vlpi_lock); + + if ( !dev->event_map.vm ) + { + struct its_vlpi_map *maps; + + maps =3D xzalloc_array(struct its_vlpi_map, dev->event_map.nr_lpis= ); + if ( !maps ) + { + ret =3D -ENOMEM; + goto err; + } + + dev->event_map.vm =3D map->vm; + dev->event_map.vlpi_maps =3D maps; + } + else if ( dev->event_map.vm !=3D map->vm ) + { + ret =3D -EINVAL; + goto err; + } + + /* Get our private copy of the mapping information */ + dev->event_map.vlpi_maps[eventid] =3D *map; + + if ( pirq_is_forwarded_to_vcpu(map->pirq) ) + { + struct its_vlpi_map *old =3D &dev->event_map.vlpi_maps[eventid]; + uint32_t old_vpeid =3D old->vm->vpes[old->vpe_idx]->vpe_id; + + /* Already mapped, move it around */ + ret =3D its_send_cmd_vmovi(dev->hw_its, map); + if ( ret ) + goto err; + + /* + * ARM spec says that If, after using VMOVI to move an interrupt f= rom + * vPE A to vPE B, software moves the same interrupt again, a VSYNC + * command must be issued to vPE A between the moves to ensure cor= rect + * behavior. + * So each time we issue VMOVI, we VSYNC the old VPE for good meas= ure. + */ + ret =3D its_send_cmd_vsync(dev->hw_its, old_vpeid); + } + else + { + /* Drop the original physical mapping firstly */ + ret =3D its_send_cmd_discard(its, dev, eventid); + if ( ret ) + goto err; + + /* Then install the virtual one */ + ret =3D its_send_cmd_vmapti(its, dev, eventid); + if ( ret ) + goto err; + + /* Increment the number of VLPIs */ + dev->event_map.nr_vlpis++; + } + + goto out; + + err: + xfree(dev->event_map.vlpi_maps); + out: + spin_unlock(&dev->event_map.vlpi_lock); + return ret; +} +int gicv4_its_vlpi_unmap(struct pending_irq *pirq) +{ + struct its_vlpi_map *map =3D pirq->vlpi_map; + struct its_device *dev =3D map->dev; + int ret; + uint32_t host_lpi; + + spin_lock(&dev->event_map.vlpi_lock); + + if ( !dev->event_map.vm || !pirq_is_tied_to_hw(pirq) ) + { + ret =3D -EINVAL; + goto out; + } + + /* Drop the virtual mapping */ + ret =3D its_send_cmd_discard(dev->hw_its, dev, map->eventid); + if ( ret ) + goto out; + + /* Restore the physical one */ + clear_bit(GIC_IRQ_GUEST_FORWARDED, &pirq->status); + host_lpi =3D dev->host_lpi_blocks[map->eventid / LPI_BLOCK] + + (map->eventid % LPI_BLOCK); + /* Map every host LPI to host CPU 0 */ + ret =3D its_send_cmd_mapti(dev->hw_its, dev->host_devid, map->eventid, + host_lpi, 0); + if ( ret ) + goto out; + + lpi_write_config(lpi_data.lpi_property, host_lpi, 0xff, LPI_PROP_ENABL= ED); + + ret =3D its_inv_lpi(dev->hw_its, dev, map->eventid, 0); + if ( ret ) + goto out; + + xfree(map); + /* + * Drop the refcount and make the device available again if + * this was the last VLPI. + */ + if ( !--dev->event_map.nr_vlpis ) + { + dev->event_map.vm =3D NULL; + xfree(dev->event_map.vlpi_maps); + } + +out: + spin_unlock(&dev->event_map.vlpi_lock); + return ret; +} + +int gicv4_assign_guest_event(struct domain *d, paddr_t vdoorbell_address, + uint32_t vdevid, uint32_t eventid, + struct pending_irq *pirq) + +{ + int ret =3D ENODEV; + struct its_vm *vm =3D d->arch.vgic.its_vm; + struct its_vlpi_map *map; + struct its_device *dev; + + spin_lock(&d->arch.vgic.its_devices_lock); + dev =3D get_its_device(d, vdoorbell_address, vdevid); + if ( dev && eventid < dev->eventids ) + { + /* Prepare the vlpi mapping info */ + map =3D xzalloc(struct its_vlpi_map); + if ( !map ) + goto out; + map->vm =3D vm; + map->vintid =3D pirq->irq; + map->db_enabled =3D true; + map->vpe_idx =3D pirq->lpi_vcpu_id; + map->properties =3D pirq->lpi_priority | + (test_bit(GIC_IRQ_GUEST_ENABLED, &pirq->status) ? + LPI_PROP_ENABLED : 0); + map->pirq =3D pirq; + map->dev =3D dev; + map->eventid =3D eventid; + + ret =3D gicv4_its_vlpi_map(map); + if ( ret ) + { + xfree(map); + goto out; + } + + pirq->vlpi_map =3D map; + } + + out: + spin_unlock(&d->arch.vgic.its_devices_lock); + return ret; +} + +int gicv4_its_vlpi_move(struct pending_irq *pirq, struct vcpu *vcpu) +{ + struct its_vlpi_map *map =3D pirq->vlpi_map; + struct its_device *dev =3D map->dev; + + if ( !dev->event_map.vm || !map ) + return -EINVAL; + + map->vpe_idx =3D vcpu->vcpu_id; + return gicv4_its_vlpi_map(map); +} diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index 9f0ea9ccb1..75c91c0426 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -116,6 +116,9 @@ /* We allocate LPIs on the hosts in chunks of 32 to reduce handling overhe= ad. */ #define LPI_BLOCK 32U =20 +#ifdef CONFIG_GICV4 +#include +#endif /* * Describes a device which is using the ITS and is used by a guest. * Since device IDs are per ITS (in contrast to vLPIs, which are per @@ -135,6 +138,9 @@ struct its_device { uint32_t eventids; /* Number of event IDs (MSIs) */ uint32_t *host_lpi_blocks; /* Which LPIs are used on the host= */ struct pending_irq *pend_irqs; /* One struct per event */ +#ifdef CONFIG_GICV4 + struct event_vlpi_map event_map; +#endif }; =20 /* data structure for each hardware ITS */ @@ -184,6 +190,8 @@ extern struct __lpi_data lpi_data; =20 extern struct list_head host_its_list; =20 +int its_send_cmd_discard(struct host_its *its, struct its_device *dev, + uint32_t eventid); int its_send_cmd_inv(struct host_its *its, uint32_t deviceid, uint32_t eve= ntid); int its_send_cmd_clear(struct host_its *its, uint32_t deviceid, uint32_t e= ventid); int its_send_cmd_mapti(struct host_its *its, uint32_t deviceid, @@ -254,6 +262,18 @@ int its_send_command(struct host_its *hw_its, const vo= id *its_cmd); =20 struct its_device *get_its_device(struct domain *d, paddr_t vdoorbell, uint32_t vdevid); +/* GICv4 functions */ +int gicv4_assign_guest_event(struct domain *d, paddr_t vdoorbell_address, + uint32_t vdevid, uint32_t eventid, + struct pending_irq *pirq); +int gicv4_its_vlpi_move(struct pending_irq *pirq, struct vcpu *vcpu); +#ifndef CONFIG_GICV4 +#define event_is_forwarded_to_vcpu(dev, eventid) ((void)dev, (void)eventid= , false) +#else +bool event_is_forwarded_to_vcpu(struct its_device *dev, uint32_t eventid); +void its_vpe_mask_db(struct its_vpe *vpe); +#endif +int gicv4_its_vlpi_unmap(struct pending_irq *pirq); =20 /* ITS quirks handling. */ uint64_t gicv3_its_get_cacheability(void); diff --git a/xen/arch/arm/include/asm/gic_v4_its.h b/xen/arch/arm/include/a= sm/gic_v4_its.h index f48eae60ad..722247ec60 100644 --- a/xen/arch/arm/include/asm/gic_v4_its.h +++ b/xen/arch/arm/include/asm/gic_v4_its.h @@ -29,6 +29,26 @@ #define GITS_CMD_VINVALL 0x2d #define GITS_CMD_INVDB 0x2e =20 +/* Describes the mapping of a VLPI */ +struct its_vlpi_map { + struct its_vm *vm; + unsigned int vpe_idx; /* Index of the VPE */ + uint32_t vintid; /* Virtual LPI number */ + bool db_enabled; /* Is the VPE doorbell to be generated= ? */ + uint8_t properties; + struct pending_irq *pirq; + struct its_device *dev; + uint32_t eventid; +}; + +struct event_vlpi_map { + unsigned int nr_lpis; + spinlock_t vlpi_lock; + struct its_vm *vm; + struct its_vlpi_map *vlpi_maps; + unsigned int nr_vlpis; +}; + #endif =20 /* diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index 77323b2584..360f8a968e 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -70,6 +70,7 @@ struct pending_irq * LPI with the same number in an LR must be from an older LPI, which * has been unmapped before. * + * GIC_IRQ_GUEST_FORWARDED: the IRQ is forwarded to a VCPU(GICv4 only) */ #define GIC_IRQ_GUEST_QUEUED 0 #define GIC_IRQ_GUEST_ACTIVE 1 @@ -77,6 +78,7 @@ struct pending_irq #define GIC_IRQ_GUEST_ENABLED 3 #define GIC_IRQ_GUEST_MIGRATING 4 #define GIC_IRQ_GUEST_PRISTINE_LPI 5 +#define GIC_IRQ_GUEST_FORWARDED 6 unsigned long status; struct irq_desc *desc; /* only set if the irq corresponds to a physica= l irq */ unsigned int irq; @@ -95,6 +97,9 @@ struct pending_irq * vgic lock is not going to be enough. */ struct list_head lr_queue; bool hw; /* Tied to HW IRQ */ +#ifdef CONFIG_GICV4 + struct its_vlpi_map *vlpi_map; +#endif }; =20 #define NR_INTERRUPT_PER_RANK 32 diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index 576e7fd4b0..94f7dd7d90 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -589,6 +589,14 @@ static int its_discard_event(struct virt_its *its, if ( vlpi =3D=3D INVALID_LPI ) return -ENOENT; =20 + p =3D gicv3_its_get_event_pending_irq(its->d, its->doorbell_address, + vdevid, vevid); + if ( unlikely(!p) ) + return -EINVAL; + + if ( pirq_is_tied_to_hw(p) ) + if ( gicv4_its_vlpi_unmap(p) ) + return -EINVAL; /* * TODO: This relies on the VCPU being correct in the ITS tables. * This can be fixed by either using a per-IRQ lock or by using @@ -751,6 +759,27 @@ static int its_handle_mapti(struct virt_its *its, uint= 64_t *cmdptr) =20 vgic_init_pending_irq(pirq, intid, gic_is_gicv4()); =20 + pirq->lpi_vcpu_id =3D vcpu->vcpu_id; + + if ( pirq_is_tied_to_hw(pirq) ) + /* + * If on GICv4, we could let the VLPI being directly injected + * to the guest. To achieve that, the VLPI must be mapped using + * the VMAPTI command. + */ + if ( gicv4_assign_guest_event(its->d, its->doorbell_address, devid, + eventid, pirq) ) + goto out_remove_mapping; + + if ( pirq_is_tied_to_hw(pirq) ) + set_bit(GIC_IRQ_GUEST_FORWARDED, &pirq->status); + else + /* + * Mark this LPI as new, so any older (now unmapped) LPI in any LR + * can be easily recognised as such. + */ + set_bit(GIC_IRQ_GUEST_PRISTINE_LPI, &pirq->status); + /* * Now read the guest's property table to initialize our cached state. * We don't need the VGIC VCPU lock here, because the pending_irq isn't @@ -761,12 +790,6 @@ static int its_handle_mapti(struct virt_its *its, uint= 64_t *cmdptr) goto out_remove_host_entry; =20 pirq->lpi_vcpu_id =3D vcpu->vcpu_id; - /* - * Mark this LPI as new, so any older (now unmapped) LPI in any LR - * can be easily recognised as such. - */ - set_bit(GIC_IRQ_GUEST_PRISTINE_LPI, &pirq->status); - /* * Now insert the pending_irq into the domain's LPI tree, so that * it becomes live. @@ -824,6 +847,13 @@ static int its_handle_movi(struct virt_its *its, uint6= 4_t *cmdptr) if ( unlikely(!p) ) goto out_unlock; =20 + if ( pirq_is_tied_to_hw(p) ) + { + ret =3D gicv4_its_vlpi_move(p, nvcpu); + if ( ret ) + goto out_unlock; + } + /* * TODO: This relies on the VCPU being correct in the ITS tables. * This can be fixed by either using a per-IRQ lock or by using --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048913; cv=pass; d=zohomail.com; s=zohoarc; b=IWoA8lqBd5t0yfxjcYpq5HoqAHT+taFJgmEcIKNnxowL9OzP5CSySlJ7iohiXqdLpGognfRg5RHLKfIaum8Kax/4mc46mL0q944FwI5i8X98GY7qrFO5lVdWY6ntK+q7iK/UGQbTt6/vazsNDPxk3AxAhaH2PvPxUOEik8lqacs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048913; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WrajxwpLkTzUo5qZ0TpducYW59HMKLxEeoenAEYJQaI=; b=JVRU0QDGg8N7jmr5v7fm9UZ57YEe5o82ckMNv/0mxxoYr+NhxtCHowJjqCTLSI+4u5JI1vfaz+mtXH8odAmvZMUOuQBHPaWKSCYwRPAZxfznazT/JamfjceUa/snDHLlCnEj9Pr/WJU7zn24WwJnzTAAyAgDlobBtcY6AWd580M= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048913034412.1759652246053; Mon, 2 Feb 2026 08:15:13 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218797.1527708 (Exim 4.92) (envelope-from ) id 1vmwZc-000262-N4; Mon, 02 Feb 2026 16:14:48 +0000 Received: by outflank-mailman (output) from mailman id 1218797.1527708; Mon, 02 Feb 2026 16:14: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 1vmwZc-00025J-BF; Mon, 02 Feb 2026 16:14:48 +0000 Received: by outflank-mailman (input) for mailman id 1218797; Mon, 02 Feb 2026 16:14:47 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZb-0000fY-1a for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:47 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4889f7fa-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:42 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:40 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:40 +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" X-Inumbo-ID: 4889f7fa-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q450fKKkg4LSlSJSytyfbtUyZNCuCpzAS3FDSOJQjwX3vtU5qUJasUbho55zCwDeJkqB10zPe6JqDRj9q5dY9E33nJ1J/dhkcQLXP6HeuHXY2pM+hyUPHJY/cuO4w1Q35svkAiCSBLHCjjp2RubGPUyflEzw7C03vr4enF5Cro8vnI4dxEFzLP/bqIFEo+d7ztH7cm2jt7rhVrHY9SPJgSomcn/vLMVnjj6cLWF+7n26XnsUvzyW1Enh0M33ap7GQXy6s8owhYghV8WtoQcya9TRvzTrkk0FC/Om9VhiVu0vgLr4w01AU2g/oIt4pol0uAuVx+mxCL/d2cIc6kMo+g== 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=WrajxwpLkTzUo5qZ0TpducYW59HMKLxEeoenAEYJQaI=; b=JKK6VO/tulvUEQ0y6VVjTWSV1Z21Gci4+ZiPI/CDr4YSWQgxBFiRZa/CzLMoU6ZrzXJZgy4hxswI70tFb1PFo5O+wHSnjbdU2Cw5jwTZbuH5n4d2Aroa6Vu8Gzc2Sw3y2EJUejnEjihsDIUBuVP/Q3MwHxb18V1l6Y7E7vpvZCmStTUNin6IiTMl8XZAJGwmGsAuMOuBWq4Do3JlK6QCT5F5TBDFIAht1k8RIROUJ1Z0kDxFZoxGNyO0kGtjygCGwhJhTthtZ32UGqb4ds2JvawuQbozuj6gdImBT8j8IgY9wnswiFbdqEluEdl4EDY8wkunQNd+qj1TA60VMo1lSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WrajxwpLkTzUo5qZ0TpducYW59HMKLxEeoenAEYJQaI=; b=S7bpXBSla6IQIpe+8Mr9nx3S4H5jdhqK/NsrnPjhc3CYCZo9CRb6CgObiFn3gYQpgZCgAw91i9RUOQYjR/pDUtroN2lRVoJ44ThsU/R80+aIYRoxJwi0msRGjDEySDF27rNv6fMCgksOz59PgIza9ZQ8gXFSPk8oSutL9oXBgaDYmXt+CedVz59Db6E+hvHQhp2ITUpm0OikdVgEIx58zbxM6f06fvkpzfdeMwzPlsqggQECmCf4dXQThKBsJDiiv+TaIQmOr8SDDqwfEXrvkxYxZd6pBNYUtv76bC1yRvSZsZPjBbgTyIs8zDtKcNGtUWaf/ygRDT4EJIfHmjC7Pg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Stefano Stabellini Subject: [RFC PATCH 07/19] xen/domain: Alloc enough pages for VCPU struct Thread-Topic: [RFC PATCH 07/19] xen/domain: Alloc enough pages for VCPU struct Thread-Index: AQHclF8IVNXzRYHYv0KDWbwmI64RGA== Date: Mon, 2 Feb 2026 16:14:39 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: e2363123-0f4c-4f69-26b3-08de62762b05 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?HhRGTW30olY7AahcpalqXteC807MuCBY+FdTcAG6E2O9PQ2gtPZms0DIWZ?= =?iso-8859-1?Q?w1+PgfJJuKgliQLrR6wo5N8er479xZIXVGjeVbBQCaZxqG21caI2elHtq6?= =?iso-8859-1?Q?QT8cWtUo1gWgugFCfdfvMXmeZOYkOabcyjGzPoc08TumhhGZqTHbW7eMkc?= =?iso-8859-1?Q?JEFR2k2gqqgXIfGh3aiPaJ4oQxxDlVUtMGreJrAqqNUrEhC+YnEUUBy9KL?= =?iso-8859-1?Q?fNik5glgsh39uMcONECvlQQuzvU4at0YNFRx1AIwTFLuXMM63MWbLB75ih?= =?iso-8859-1?Q?zfWQM4IKkg1UeuBIDC9Jmw1yrqHGAezzkfzQnj5VJEcjiAu9LlvMdZYXVD?= =?iso-8859-1?Q?oCDvtHsOZYUygsK60MdXQ/FuyruttYhToYgB/f/qEQpdmatREFTZxRQcBX?= =?iso-8859-1?Q?YHT89uC+vl4S/zxQQcZC1tynztxq6QslzAtzczdgHRJEjc4xFQRiSuZR1d?= =?iso-8859-1?Q?MLbMNV4mxanqc8GJmblXd/g5gYbV3ffwayqbSVJLgRev0/PVVYtfb0UfL+?= =?iso-8859-1?Q?dKLx0kRRbLxMxU48+tbGQayRp7yoHxerc6MctbnToX2yw6bT4H47AQfpT/?= =?iso-8859-1?Q?Fedrz1jEKGhFRPBhj86Q40udDjXnWjcv9bhzft2tz+Zpi4i1WHSHpOSmlb?= =?iso-8859-1?Q?P7JQ4unc+YUgSJaLLSK7ox5KnsqGiel4Ysl91prvUsqKLcrjXNFXXMQN5F?= =?iso-8859-1?Q?iX7VgY45PFXK4OAlqHvqu9KkkR7X8FS4fXcIurbcsyS4FItuVIOGekdIBg?= =?iso-8859-1?Q?MZi0WFyHxsPhHkfbUB6g1Y0INpYst0r6f7Mh05qx/5I8q7IpcJ3hyHX/IK?= =?iso-8859-1?Q?znbqeCkSw8aq2lbfuiSvZkWYMrL2yOd4JiozLUMTmqkCL5NZyyXN7VLaIb?= =?iso-8859-1?Q?qGm5+PwdwJXty5s+O1Z9xytYsERszyMeM7Uns3S/KPZvdUJhiE5DDFC7Vx?= =?iso-8859-1?Q?I8tNvKRylVpWfHsPu+6r6zrhe4CUOuXNMRWRHafg6wdXKTccuxds/4bctL?= =?iso-8859-1?Q?0fo55bobKBl+qBOhiXZYYAKaEWfMHP9QoxkBnoVrOLF21AfrWDRCUpPwQq?= =?iso-8859-1?Q?Yz9sY+0kCmOob99vaXMWyGSRH9QGvt6DCnxTRSSPFYMTw26s7+M5BMp6No?= =?iso-8859-1?Q?QWqKuMKYTAp2jn2QOwlSnPXlwwkQr5h84arSQJSCOPex+j27o43hJ/YXfQ?= =?iso-8859-1?Q?6hZuzgl0WgJx3NP4WIcQTdOy24xIQWtopO87MSi18wURsK1b9lQ68fSIUX?= =?iso-8859-1?Q?w1pqglfLa8KwnBkV3EXVavjiG2G39bHrUqbnSOKWs87s8vXI+mt2f81+5V?= =?iso-8859-1?Q?Ol6Md+mN1Z+j+CFigdEXDbi9CWpKZP1JUAS9rS9s3OTVM1963FnAy/Qn86?= =?iso-8859-1?Q?9kKfYcId/+n7X7NjRMXG4KvCpwb+FqQlUM1sTKt3YfEYKNDO6J3SKjo98d?= =?iso-8859-1?Q?kKx5J5n/1jDe2AkkwFvN9p6JkNh0UJa1xh+bqJNe6haDTjIGwJ9x5qG0Gu?= =?iso-8859-1?Q?xWZqlBCEM5obWqeu0CN8vBVSMTb1lEaPjj2Ho6nENqjclPP92Z2YROxl0R?= =?iso-8859-1?Q?8YDaOinNjGNf2jdTUJcjB+xRhLao8I18pa4igmVVElzMLaG+DwThirmyi/?= =?iso-8859-1?Q?k/cH/EJGRUyJ9FOC2gJnX31dWMd04MA5Mmbdn4x98bYxQns+jQR80DY/Xh?= =?iso-8859-1?Q?SOhRSD23ZOkqkk8HxCI=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?tDp2khFUQNCp/cmexPs8VxIiN1S/bGFDG60Yp96AyDyGMZCTggMkl+9+1u?= =?iso-8859-1?Q?kiMpJPEvBsHgOYd+GYSgwxGHC8TgR9SwWu1LeTfek8nhCl5NzYMFXTDK6U?= =?iso-8859-1?Q?1zJ52nqOsJ5H4CBaLoRtIApGFPl5vXj7vVS+xhPotgt6fZyp7ORCeWSfIL?= =?iso-8859-1?Q?ekSnXS1xiM24ktf4awBzFIqApVXdpLf4B68GzwNWqb1/X/E7AmiXF+dwa/?= =?iso-8859-1?Q?7+LB4lnDkhxAPv13Ge9cFYHeZUikG+GgOuAVRIm/ZQ2GglybCf4zdDl2hp?= =?iso-8859-1?Q?Tg5lkJ7pQ9FESXbLR1HD9dx68rq/HlE+YMrUOZCC7ttKOroB8pWO58DCHh?= =?iso-8859-1?Q?YX9qi7AkMHqoX2E2VxqQQbKweZTjOze7DAHRlnqRtDaMTtt9SABQnqjKpv?= =?iso-8859-1?Q?auD9teJgc8w/GEVyuIhCgkTR4g0Pf+qcu/T5PvGHIFUEMU9sHchzZaPnOY?= =?iso-8859-1?Q?9VcfEzU9GSRahgBj5E1d8lHJOqrwXJLnDOZEytJrmBN7AxUTFOh2kWu58o?= =?iso-8859-1?Q?QhP8UeJRl+UQletthfklA0fO9Zc+kYt4zsNILYbCwMuChIm2dT7O3B4ePp?= =?iso-8859-1?Q?3ucaOYGdWeh6EQC7Ody4mnPpJBs6LDjBnutVWmr0Fv/HRYKMKXnc09suiZ?= =?iso-8859-1?Q?fEB7uuZeK7VD4LD+G7ESm0o6euTQQT/jeHbMkmg+1BajkU15+d5iIyIwSV?= =?iso-8859-1?Q?6OGNTgsQNieynhx2VWjIrDf+YP5Hlr4F7KEQ/nunEnhC3uHf2PT0gYHVTg?= =?iso-8859-1?Q?nYE25BUv4udFVF1TGHdXt455R6HInHoFepO7SbZTa6leih0TBaqyixq66R?= =?iso-8859-1?Q?NQNa8gw8raMJi0qLz47p5llNdpJf0vN98PpbnHszsgOkOUTzt52VG9Cx4A?= =?iso-8859-1?Q?jmV1CJ9zyJ7XDVmq6Koz18QfC8HpNVenTNSCKT9Sg1bl5J/0FOhx0/0ap+?= =?iso-8859-1?Q?l7hP0Bmk/muaAYXUEXyxaZliQMceH6JP/xrcxev5ZR7Y1QoF7lX0mDcP4x?= =?iso-8859-1?Q?i3rnRjp3UXusqyEWr/SSa964yRS7eKeyzQRVHh9IZ1r7vt5YmqUOfzZRoE?= =?iso-8859-1?Q?bE12/VS8qjGCswaaGqWLKSDZTifU0Qfn4uEbmDmGDkhpqLa32RCvr6p6XR?= =?iso-8859-1?Q?vpS9K3G5hSLimxuvc2xnsD4lVntCSmCZBlzjCcadVyxuZENRRx7rzxZU5M?= =?iso-8859-1?Q?YJ61MosZBrXa117pmd3kwzGXsRYkmm3Meo3+UqTwzc1KD2KkHAoXwSw8qB?= =?iso-8859-1?Q?j7ivutQZ0lwMUCKdriPxIkLynw5DAUMvBj77s4NHy3yjrZbgSvDaX0QoyX?= =?iso-8859-1?Q?OHb2phUbU5No1ZVAiz/x2hmWuGaX/4bOhSWY9KDMHLXeZnkV1Hs1RMvcg3?= =?iso-8859-1?Q?SapCWBa0zt3D6tFFEtJeMvTwwKyGasNx+ov2GLA4Vz+hYMgqPWB61sJM67?= =?iso-8859-1?Q?EXLKYm/yM6s3b10JMYMsEAf4U6TXmOrLY8WP0AhZKGQLSYuoMwMFQWb+OV?= =?iso-8859-1?Q?aHLc3jjXAplo3mBOt+NGi2YaSCDb7UrH9usBphvQzi0aRgCqnhiRc3dyXo?= =?iso-8859-1?Q?WKxMDaf9/qfS6efJ9FiHW20zaZbRafoHAlv7cZPemAF4AUeGMDh2G8k1e/?= =?iso-8859-1?Q?T8KHBGroEyTaq3KVaowoVVcFheDR4JMLSOmJnxt+g2wWGScBIy65MZgRQp?= =?iso-8859-1?Q?1zZfN5NeYKjn0O1vIgqH63aU5ID+KKgngA+c4b0gbgLyO1FHRgjvsaiGZA?= =?iso-8859-1?Q?ZipFiDXM4SV0sL6rdU2WQ0ZTTmHuyU1PhuaKSQIYQFeACL6MAocUMgakYj?= =?iso-8859-1?Q?vptP5a0/iw0pP7IExVJYJiG2m5WtfU0=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2363123-0f4c-4f69-26b3-08de62762b05 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:39.9917 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Wu0KAP3jH3N2OAa7PO/65z0iRG8jeTglU4fY1NIRD0BleoMcBljWSRwN0t879yB0ZPrD6o4x3v6/VbqHdfaHMA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048914677158500 Content-Type: text/plain; charset="utf-8" With introduction of GICv4 the size of struct vcpu can again be more than one page. Modify struct vcpu allocation to request enough pages again. Don't reintroduce the MAX_PAGES_PER_VCPU check. As per commit b77d774d8274183c2252f5fbc9fa3b3b7022ba06 > It turns out that beyond efficiency, maybe, there is no real technical > reason this struct has to fit in one page Since there is no technical reason to limit struct vcpu size to one page, there also seems to be little reason the fiddle with 1 or 2 page limits. Signed-off-by: Mykyta Poturai --- xen/common/domain.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 376351b528..c791fb5033 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -342,18 +342,24 @@ static struct vcpu *alloc_vcpu_struct(const struct do= main *d) # define arch_vcpu_struct_memflags(d) ((void)(d), 0) #endif struct vcpu *v; + unsigned int order =3D get_order_from_bytes(sizeof(*v)); =20 - BUILD_BUG_ON(sizeof(*v) > PAGE_SIZE); - v =3D alloc_xenheap_pages(0, arch_vcpu_struct_memflags(d)); + v =3D alloc_xenheap_pages(order, arch_vcpu_struct_memflags(d)); if ( v ) - clear_page(v); + { + unsigned int i; + + for ( i =3D 0; i < DIV_ROUND_UP(sizeof(*v), PAGE_SIZE); i++ ) + clear_page((void *)v + i * PAGE_SIZE); + } =20 return v; } =20 static void free_vcpu_struct(struct vcpu *v) { - free_xenheap_page(v); + unsigned int order =3D get_order_from_bytes(sizeof(*v)); + free_xenheap_pages(v, order); } =20 static void vmtrace_free_buffer(struct vcpu *v) --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048908; cv=pass; d=zohomail.com; s=zohoarc; b=b1jI4cO+cyGpI6x3JIbnvsmg2ACXEiyC2cRqoH7I7ZgvAphy53yCO8aLRd6Y1Sszqz8pyFXhmsVpBK2I9UBELvzujffNrtUkMD0cW8aMvrsjS5oao3ArxknjPQfGyR9uADAFa0tCwl6wnyTaAjIjx34ke7FUxx1iboLSTi98sJg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048908; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XldT1n09TO58+jhUJFrzUJPDw25FVJdFd1IJhQ1NS/o=; b=cZtaOB+AQmC8EMg55TLtEcDs+Zs+aerxHlEz1soyUFDxxgQBwxTPrA0ez3KPDvPB5TMbkNXpm8L2tcCyfFcUaIG2SozTk/slPg9VtYrtt9xQBJhDIh/otsM+3PCQXw3jQQN70QqgUFvWuTIuwqdg7s546TA3+1X1nr62fo2cJIc= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048908515193.1256662105967; Mon, 2 Feb 2026 08:15:08 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218798.1527723 (Exim 4.92) (envelope-from ) id 1vmwZe-0002Wr-Cw; Mon, 02 Feb 2026 16:14:50 +0000 Received: by outflank-mailman (output) from mailman id 1218798.1527723; Mon, 02 Feb 2026 16:14:50 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZe-0002VS-0w; Mon, 02 Feb 2026 16:14:50 +0000 Received: by outflank-mailman (input) for mailman id 1218798; Mon, 02 Feb 2026 16:14:48 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZc-0000fY-1t for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:48 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 48bf508a-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:43 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:40 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:40 +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" X-Inumbo-ID: 48bf508a-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ajqNt+LRKJEy4M1fbWTVJg6DbDonUK5eo3bBQLVvFYqCsBPh8KjC/kYV/nVlIMTDhFylWNmxwlW905P+TTh0xfucNDBGnQaUXmT2+q0cY/TQBUFOyUCZqJ18qgAedypA5VPDJS7lWUkigf1U2VaYRHiNQXOb60Et4EehQ/AfTl7ZJ4jqfBu/7Q897KKDazH/9gSdAnvAurCv+YWRkEziXljhPNEgBYF0T81cY79U59kDHgLWxFHHvHk0/5NsxdsIzZB/7Er0SMceKglEVzqUIclXIJwNhJegEAyQ4j/htoXxl5MjCHoN7M32q5eoGZM2/lWv1Jco7T9J+QaQNadvLg== 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=XldT1n09TO58+jhUJFrzUJPDw25FVJdFd1IJhQ1NS/o=; b=Mhyb8d1OM2NnXIPrQcebHV0QkOv1k4nx5JQslnvlKqg7OLWM8WTosCZ5DFWpc2jRGi8/WdibT+yNS456rg3p1WdKDM2+DWNkq4a9oKowk9KhmjC/Mohlz1YrVxgP9qjFa5iFCNhjWSqXcd6ACvMITVB+JBarU1C8T7zJzdVNegNDeWvj/6xubi3PGVD9LQ0MPRH/CAmDzNxd5VsRMij3y2EOrvJ1KWjFXOzQtlG8OIiQpHtJCBzF0qLXM3Rb93KxXH1lwe8zoPTXvTWwGhgOWs7gpEdzH6jS9CIKGO5L0azddNSxy5YK2EXJZeqsKGjpDHzCDLyxDwrvPVSfZQ4Ttg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XldT1n09TO58+jhUJFrzUJPDw25FVJdFd1IJhQ1NS/o=; b=AHiAP5YFAqbXL02DM71ubpfi1kHAdTSMIR6W8EqjKqNCb1BST+ftO8FqLvhFCtLIR7yZ4J8HBDvxK5XWMVbQB25n6CdZqcoFbT5W175y3Cu9aulmF8WsuMciSNGhLW6As7YRGqq/QzkaSYYZxFKJoX20yW5qTAeBNrZJDSqXe9laIw2Ofw1ioau4nWaJn/rL2eEVp2LCbbsApVmKcQTZjWpPCpHAezYx3IeC2MUQdm+yckuW91gDgMdNWDweMwH02hs1M4X1ksARqqua0lopol+u0Hv7Rrhv0VlCn0vYH2UCX2jKY1wtapRBFOToBkHlXqSGhv7qA4EBDr6C/8TbSg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 08/19] arm/gic: Keep track of GIC features Thread-Topic: [RFC PATCH 08/19] arm/gic: Keep track of GIC features Thread-Index: AQHclF8I5NEvxt05pU2Wk0lvwQAkCQ== Date: Mon, 2 Feb 2026 16:14:40 +0000 Message-ID: <2687fa1a798f002b3126cdc851812be86c4cd8f1.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: b9df5fb6-de93-4024-f2ad-08de62762b43 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?q4P/NetXVUwjQrbtmFVEWLEfBowtkmEGEuUh5AnPlK9sqeNOFAPLbIddME?= =?iso-8859-1?Q?BKvVzgqJnFsZ1S0MhtHmaE6LljN/Pq3keZUS03x23uMuwd965MeRIebzMH?= =?iso-8859-1?Q?G6GD1/bg3EOszF6/8rT9e1B18gB8f6J1sqaYJAkqJzR7z/ucX/YlUeqhHR?= =?iso-8859-1?Q?RWOMHGijz3ze2pDzzGTcf+p/C5PrT/X5BATW4ETrpyFEyK3ROgIY9djJXw?= =?iso-8859-1?Q?P92ovwYhVs7SSkfKp6y0jHThLJf3xlSosGzMz6L60OX/gk3AUhp5CfpdPD?= =?iso-8859-1?Q?QGpLoyhudJ05MCrnYdIS9swHObe/mqIVYh0kFV87ag9N4tm8451CBJc4cm?= =?iso-8859-1?Q?i5WNjYMusJ0xCYmOn3IiRUpeWq32Ff9wSv2URkox1EoEOzCmOFq76jGT8c?= =?iso-8859-1?Q?KFv4LvjEBSdn8lj4owfqv3/L6pQk8NymNdFLBtfIKkN/iEXeI5v/MpXuOP?= =?iso-8859-1?Q?DFxlyCNyJAAGFmu+fO9fgDdMQnNrlnymxRxBKJcKlLjBCgmQS2RjpbpWbp?= =?iso-8859-1?Q?fPw5p+soQ60Dy+pvAZ9bI73TqpygjrmoSz5ATY5h8GFx3EC1UrBU1dcEC/?= =?iso-8859-1?Q?YUJuz/if9mT4ST4cw+i217QoE0SsP5EzLU7Hqm+occsAKnBDTeKOhY9aYX?= =?iso-8859-1?Q?1gUPFVXu/rm/qRUaRvD9HHxD6cpPB1IJYjs25ue/u49zp3q97Oi9//KJP+?= =?iso-8859-1?Q?2HUbanTWOCbs8V3JPyuM/Ux4VezgR35aOSFoi9nXj8fVdubv8w0jVKbPqv?= =?iso-8859-1?Q?g4jtjnQ+HbhLuEk1ismStpXijiBQ9jrcRmR0BVp1lXnmRxt92EXKJ3lZIH?= =?iso-8859-1?Q?e+JQuODuehnhUAKu8ElvaGO8p44EI39mHw50eUBbglyj23THZO8RIihgld?= =?iso-8859-1?Q?ReYXAmZa7oIWZm1U8+qsEpSjxvL6Wl1u5ai1uVZ/iBjbPzu8n7MWiC/8Y3?= =?iso-8859-1?Q?FKOU+TsAnD4E89xYieby4jzRU9EJOTyJJMAldOF8qqrPhnwp9XAYp70NmI?= =?iso-8859-1?Q?F1PLK8Yv+neJkZAJ04NYIMp5CltNQS8ClmatFuq62bmqir7HEKRSKDUmzT?= =?iso-8859-1?Q?Isx20Wl7S6JXp8SrlGPN9z2pNwYpb9+AY3Y/3sSntF5SwUWFPNHgQNkBnB?= =?iso-8859-1?Q?+J02ldCDr7nBimg/BlsxtT8CUJzSArUS7HRaqYiUKhwsYaYZ/o2zX04oPW?= =?iso-8859-1?Q?/05qPr9CNjKs9HPyiGiPt5Yg31IVuWtDnKvvzc/n24DlN/ZWCGpVIGiWOA?= =?iso-8859-1?Q?ZBxRjMK7An7S96L1kyYE0J3uXeTcgs/ONDOdzaCFUCHWkY5PS/0mDJYzD8?= =?iso-8859-1?Q?4ugOEYqDjXDcjiIPXTtAhbxXGG5qmmDPE2FVjbksY+I5FANZwmi/AIDXZy?= =?iso-8859-1?Q?rDMjVbcX2acSp5YVwlxXIkqKquZfiICSD3QdALYU5qAwRT/c+fyLtWkPlR?= =?iso-8859-1?Q?ozsXyQSQ/jVBUc23NO4qRRrY/fg6Tv5UmY3k+Z+vMJbQGSzXF/ntpZMIXW?= =?iso-8859-1?Q?L9pDmo2Gyt3FvlrlmMeNOOfhHvfjcPfCICzUN1XK2LTAYjonOz7GsSTMrN?= =?iso-8859-1?Q?4ArTH0owAZQhKMm4phiFTjPeRRvbqDfsp8EXmlnPXSt0yN7OPDi5PZHDwk?= =?iso-8859-1?Q?UYVqfaCZbrjs+dNdaOiQAx7cv1839z5RrCiotXVdJH1rGmb8Ovmx27m0Gj?= =?iso-8859-1?Q?hCbgtxqAIYoQPCYQTBE=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ExlSQa8cMwoeHWNcNfSB5ObzOcMO+wqvAhgrUmDkj6WxkCuywaKjWSlJHe?= =?iso-8859-1?Q?iI3bxlYqdjDiqk3lMtwbL+rWOKVk4aGdonEOf5A4scxEfNdPcOahPxsrSD?= =?iso-8859-1?Q?oJmLQCTCHwdw0WisASCwShGXGP+vsbumAnFFCQKiPH312nNL/unvdOs8wp?= =?iso-8859-1?Q?vcy33kVHwUVxyyCUHukeQk84yZ5gnojiGY7SsF2zQ2LwTkJEsAwhxj1eUO?= =?iso-8859-1?Q?EUolznrjlSgquj1NXXmHBsNHYB+OlGwnTxVddgt66mJasObVDr15Jaq5ZO?= =?iso-8859-1?Q?imlmXtwCzDHCpnKxXBhHYoV53zvoeLOhDM10x5tmqImgsTIRD0EV+UdDAq?= =?iso-8859-1?Q?oQDFEZCcTsdNZ7G9F8u5zlE6CAl0ITOWSefBR3DhxkDlT3JVRj24BnuUSN?= =?iso-8859-1?Q?OVy0d4dh7j5+MFGMXpQ9csP51pKiz1G9OmFgRagEyZF8Z4P05155Nqzrrj?= =?iso-8859-1?Q?eqXtuj4xJ8lQMGd+bBYIkRGUdTih0GD8MAAOsQI9z/Yf3O3duyXAhROD4k?= =?iso-8859-1?Q?janlo59cScwMA0Rk/JC39WyOK/9DAaslDlcipQy6PScPKQrQim9b3oKBM5?= =?iso-8859-1?Q?ypqaE7hJK0JiDS8yHdMqx6lN32dKh6JMYQvEt5n8jQUQWx43wdPp8PJsrg?= =?iso-8859-1?Q?52NDRjMWvPi+4cQ5u26LtNURZmZExbGNgwNsKrbZwp87/tqCKnI5yPmsiT?= =?iso-8859-1?Q?7Xjd+g6JawQiB3RXqJ5Dl/KQvlh3nWXoN92vCaFGH6HvX4sYIMfO0UPwOO?= =?iso-8859-1?Q?c7F7k9CvoeQsllChDLAU+TCf5pPH4Anenig6mdtz59tpC1bjntm+Kmdph/?= =?iso-8859-1?Q?ynmnB6bGDsNGfjcYxKEhOg7u5S5Ypk39QEKTvjXvEuyiT8XPeLVylZwAlr?= =?iso-8859-1?Q?GyjOh3l+N8+K14onGVCzOgV04ngD7N0+rD4kBWNMo82p3AU4cgc2x5yJ1K?= =?iso-8859-1?Q?GSLNjoCfDsJCE5zaPCP7ac0Qbobkd92EHsrnwiRqu+u/2ElmcvaiKgAm+r?= =?iso-8859-1?Q?H9bAT3GfmIPQ5OAnuNUM8V82bevaxdEkOPspzU24d5inJ+e/a+a6aDB8xt?= =?iso-8859-1?Q?w2XfkXrUgx9m5cDntIRN5frIl5Qzsm0xm4Z7p+Goy9vbG9aqf61mRrq91j?= =?iso-8859-1?Q?p1YPUfwVlI1WEfjpIVnunvZbXa9oc0QvSVcp384okPRqAjgzL0QMJ4Rv1M?= =?iso-8859-1?Q?rwlxfuk0hiNJBC4fhR6nAOl36AIvHxiRZgNP8UJ3pHKma3AUxRTM/+FNNw?= =?iso-8859-1?Q?pf46E2fTHpJklUXIYMuGB1lnOza9WzINJg0gd1XTdo8II9RNF0EidEIg1d?= =?iso-8859-1?Q?ZoL8r8EqRCkQNd40nBqadmYZ1SBnD0AnXIKKmgrZG+M6BpFsNthZv5ZwoG?= =?iso-8859-1?Q?dgzNnFavLeSTcrBDENn24ZD6fTXy494M/Bji/urLW++WPOKYAw6ionkSxn?= =?iso-8859-1?Q?naHTyy2kAKt9WmR3cgCyp3Q2EX/ARtBWdzoSQqp3RTosClMkWWjPKFMSze?= =?iso-8859-1?Q?3irGy0m6nlqfX9DhQ9x3GH89oFYGKuZ/Mu/nSZd5ERpQh52XkuIza7F2HF?= =?iso-8859-1?Q?3CZCp3WfylI82SrLJHgjvaOhsjN2StwNV9aSOrLoTRJVsGAHw2XhyJSHRu?= =?iso-8859-1?Q?3C9t1fhV/1l6lVtILr5jdpOPsZWGIS944mhNIjPC8QqGtV93Q1y+8gozJM?= =?iso-8859-1?Q?lSNf05HgZpjya4xqTzNncEoeoSg++IM4zqnYm4BweRsJ9qDiB0pp0mQ4xz?= =?iso-8859-1?Q?zdjREax2eeCxz8IObbJ7dlSfVM/2sDE+Gb9mXq098hU4OfqCcPmHEDlsGa?= =?iso-8859-1?Q?dI+/SSHf+/sC9hGOtspDlm1Hzpx4Rz4=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9df5fb6-de93-4024-f2ad-08de62762b43 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:40.4282 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: tzbzrhqxzY+EPLmK2jCadG0fRhBwUf+pSu8KsLb/yd4Lga8gjoFcUYvHz8H+l+7pMFsPUY/YopJbogvztkZN1A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048908718158500 Content-Type: text/plain; charset="utf-8" Different versions of GICv4 may support different features. Record them and provide functions to check for their availability. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3.c | 175 ++++++++++++++++++++----- xen/arch/arm/include/asm/gic.h | 2 + xen/arch/arm/include/asm/gic_v3_defs.h | 9 ++ xen/arch/arm/include/asm/vgic.h | 9 ++ 4 files changed, 162 insertions(+), 33 deletions(-) diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 9b8b87078b..14852d18c2 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -100,6 +100,38 @@ static struct { =20 static struct gic_info gicv3_info; =20 +#ifdef CONFIG_GICV4 +/* Global state */ +static struct { + bool has_vlpis; + bool has_direct_lpi; + bool has_vpend_valid_dirty; + bool has_rvpeid; +} gicv4 =3D { .has_vlpis =3D true, .has_direct_lpi =3D true, + .has_vpend_valid_dirty =3D true, .has_rvpeid =3D true, }; + + +bool gic_support_directLPI(void) +{ + return gicv4.has_direct_lpi; +} + +bool gic_support_vptValidDirty(void) +{ + return gicv4.has_vpend_valid_dirty; +} + +bool gic_has_v4_1_extension(void) +{ + return gicv4.has_rvpeid; +} + +bool gic_is_gicv4(void) +{ + return gicv4.has_vlpis; +} +#endif + /* per-cpu re-distributor base */ static DEFINE_PER_CPU(void __iomem*, rbase); =20 @@ -914,7 +946,8 @@ static bool gicv3_enable_lpis(void) return true; } =20 -static int __init gicv3_populate_rdist(void) +static int __init gic_iterate_rdists(int (*fn)(struct rdist_region *, + void __iomem *)) { int i; uint32_t aff; @@ -958,40 +991,16 @@ static int __init gicv3_populate_rdist(void) =20 if ( (typer >> 32) =3D=3D aff ) { + int ret; + this_cpu(rbase) =3D ptr; =20 - if ( typer & GICR_TYPER_PLPIS ) - { - paddr_t rdist_addr; - unsigned int procnum; - int ret; - - /* - * The ITS refers to redistributors either by their ph= ysical - * address or by their ID. Which one to use is an ITS - * choice. So determine those two values here (which we - * can do only here in GICv3 code) and tell the - * ITS code about it, so it can use them later to be a= ble - * to address those redistributors accordingly. - */ - rdist_addr =3D gicv3.rdist_regions[i].base; - rdist_addr +=3D ptr - gicv3.rdist_regions[i].map_base; - procnum =3D (typer & GICR_TYPER_PROC_NUM_MASK); - procnum >>=3D GICR_TYPER_PROC_NUM_SHIFT; - - gicv3_set_redist_address(rdist_addr, procnum); - - ret =3D gicv3_lpi_init_rdist(ptr); - if ( ret && ret !=3D -ENODEV ) - { - printk("GICv3: CPU%d: Cannot initialize LPIs: %u\n= ", - smp_processor_id(), ret); - break; - } - } - - printk("GICv3: CPU%d: Found redistributor in region %d @%p= \n", - smp_processor_id(), i, ptr); + ret =3D fn(gicv3.rdist_regions + i, ptr); + if ( ret ) + return ret; + + printk("GICv3: CPU%d: Found redistributor @%p\n", + smp_processor_id(), ptr); return 0; } =20 @@ -1010,11 +1019,107 @@ static int __init gicv3_populate_rdist(void) } while ( !(typer & GICR_TYPER_LAST) ); } =20 + return -ENODEV; +} + +static int __init __gicv3_populate_rdist(struct rdist_region *region, + void __iomem *ptr) +{ + uint64_t typer; + + typer =3D readq_relaxed(ptr + GICR_TYPER); + if ( typer & GICR_TYPER_PLPIS ) + { + paddr_t rdist_addr; + unsigned int procnum; + int ret; + + /* + * The ITS refers to redistributors either by their physical + * address or by their ID. Which one to use is an ITS + * choice. So determine those two values here (which we + * can do only here in GICv3 code) and tell the + * ITS code about it, so it can use them later to be able + * to address those redistributors accordingly. + */ + rdist_addr =3D region->base; + rdist_addr +=3D ptr - region->map_base; + procnum =3D (typer & GICR_TYPER_PROC_NUM_MASK); + procnum >>=3D GICR_TYPER_PROC_NUM_SHIFT; + + gicv3_set_redist_address(rdist_addr, procnum); + + ret =3D gicv3_lpi_init_rdist(ptr); + if ( ret && ret !=3D -ENODEV ) + { + printk("GICv3: CPU%d: Cannot initialize LPIs: %d\n", + smp_processor_id(), ret); + printk("%s %d\n", __func__, __LINE__); + return ret; + } + } + + return 0; +} + +static int __init gicv3_populate_rdist(void) +{ + int ret =3D gic_iterate_rdists(__gicv3_populate_rdist); + if ( ret =3D=3D 0) + return 0; + dprintk(XENLOG_ERR, "GICv3: CPU%d: mpidr 0x%"PRIregister" has no re-di= stributor!\n", smp_processor_id(), cpu_logical_map(smp_processor_id())); + return -ENODEV; +} + +#ifdef CONFIG_GICV4 +static int __init __gicv4_update_vlpi_properties(struct rdist_region *regi= on, + void __iomem *ptr) +{ + uint64_t typer; + + typer =3D readq_relaxed(ptr + GICR_TYPER); + gicv4.has_vlpis &=3D !!(typer & GICR_TYPER_VLPIS); + gicv4.has_rvpeid &=3D !!(typer & GICR_TYPER_RVPEID); + /* RVPEID implies some form of DirectLPI. */ + gicv4.has_direct_lpi &=3D (!!(typer & GICR_TYPER_DirectLPIS) || + !!(typer & GICR_TYPER_RVPEID)); + gicv4.has_vpend_valid_dirty &=3D !!(typer & GICR_TYPER_DIRTY); + + /* Detect non-sensical configurations */ + if ( gicv4.has_rvpeid && !gicv4.has_vlpis ) + { + gicv4.has_direct_lpi =3D false; + gicv4.has_vlpis =3D false; + gicv4.has_rvpeid =3D false; + } + + printk("GICv4: CPU%d: %sVLPI support, %sdirect LPI support, %sValid+Di= rty support, %sRVPEID support\n", + smp_processor_id(), !!(typer & GICR_TYPER_VLPIS) ? "" : "no ", + (!!(typer & GICR_TYPER_DirectLPIS) || + !!(typer & GICR_TYPER_RVPEID)) ? "" : "no ", + !!(typer & GICR_TYPER_DIRTY) ? "" : "no ", + !!(typer & GICR_TYPER_RVPEID) ? "" : "no "); + + return 0; +} + +static int __init gicv4_update_vlpi_properties(void) +{ + int ret =3D gic_iterate_rdists(__gicv4_update_vlpi_properties); + + if ( ret =3D=3D 0 ) + return 0; =20 return -ENODEV; } +#else +static int __init gicv4_update_vlpi_properties(void) +{ + return 0; +} +#endif =20 static int gicv3_cpu_init(void) { @@ -1024,6 +1129,10 @@ static int gicv3_cpu_init(void) if ( gicv3_populate_rdist() ) return -ENODEV; =20 + ret =3D gicv4_update_vlpi_properties(); + if ( ret ) + return ret; + if ( gicv3_enable_redist() ) return -ENODEV; =20 diff --git a/xen/arch/arm/include/asm/gic.h b/xen/arch/arm/include/asm/gic.h index 8e713aa477..afb1cc3751 100644 --- a/xen/arch/arm/include/asm/gic.h +++ b/xen/arch/arm/include/asm/gic.h @@ -235,6 +235,8 @@ enum gic_version { GIC_INVALID =3D 0, /* the default until explicitly set up */ GIC_V2, GIC_V3, + GIC_V4, + GIC_V4_1, }; =20 DECLARE_PER_CPU(uint64_t, lr_mask); diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index c373b94d19..3a7d18ef59 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -93,6 +93,12 @@ =20 #define GICD_TYPE_LPIS (1U << 17) =20 +#define GICD_TYPER2 0x000c + +#define GICD_TYPER2_VIL (1U << 7) +#define GICD_TYPER2_VID GENMASK(4, 0) +#define GICD_TYPER2_nASSGIcap (1U << 8) + #define GICD_CTLR_RWP (1UL << 31) #define GICD_CTLR_ARE_NS (1U << 4) #define GICD_CTLR_ENABLE_G1A (1U << 1) @@ -149,7 +155,10 @@ =20 #define GICR_TYPER_PLPIS (1U << 0) #define GICR_TYPER_VLPIS (1U << 1) +#define GICR_TYPER_DIRTY (1U << 2) +#define GICR_TYPER_DirectLPIS (1U << 3) #define GICR_TYPER_LAST (1U << 4) +#define GICR_TYPER_RVPEID (1U << 7) #define GICR_TYPER_PROC_NUM_SHIFT 8 #define GICR_TYPER_PROC_NUM_MASK (0xffff << GICR_TYPER_PROC_NUM_SHIFT) =20 diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index 360f8a968e..f12d736808 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -405,6 +405,15 @@ extern bool vgic_migrate_irq(struct vcpu *old, struct = vcpu *new, unsigned int ir extern void vgic_check_inflight_irqs_pending(struct vcpu *v, unsigned int rank, uint32_t r= ); =20 +/* GICV4 functions */ +#ifdef CONFIG_GICV4 +bool gic_support_vptValidDirty(void); +bool gic_is_gicv4(void); +#else +#define gic_support_vptValidDirty() (false) +#define gic_is_gicv4() (false) +#endif + #endif /* !CONFIG_NEW_VGIC */ =20 /*** Common VGIC functions used by Xen arch code ****/ --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770048912; cv=pass; d=zohomail.com; s=zohoarc; b=VyCiyANTqMM0N1GN/VfKoTLX/8nOMq7VgLadPx0Rm04KyFP1zjb4dmZdX6rTS6jxJYL62fJ9E7px22q1fYXtNjvS+4kVHLRHDczhMnza7H2bo6CimkW9iJQ00cTB381Vdw91xaVzylTIA03R0QCygSp0e9vOsuV56BVie7YGUaE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770048912; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Fg8OEojnUM8CObLxhY04E59bfbesTSuUDg9HarbRfsg=; b=D+yRaXye4KjnFium+qA+Hb0kSNCxne7JNUR0I2WkU2+mRm95sYruHQv/Ur+feq77PtM8WN5XX63LsBie5+Zim4xGyaKEOF9KmTp+LhOEq5l3pZ2M3lLUqxYfFJmYNSd0iqyNAN+c6dQ8H7RnWZBdsXhOQVcv1XuQbxYRDiaviUo= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770048912778958.0052576539363; Mon, 2 Feb 2026 08:15:12 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218799.1527728 (Exim 4.92) (envelope-from ) id 1vmwZe-0002dQ-SM; Mon, 02 Feb 2026 16:14:50 +0000 Received: by outflank-mailman (output) from mailman id 1218799.1527728; Mon, 02 Feb 2026 16:14:50 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZe-0002aF-HS; Mon, 02 Feb 2026 16:14:50 +0000 Received: by outflank-mailman (input) for mailman id 1218799; Mon, 02 Feb 2026 16:14:49 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZd-0000fY-1t for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:49 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 49125299-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:43 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:41 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:41 +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" X-Inumbo-ID: 49125299-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O7AFB2EXmZwlfkDnOEU48M0PgyHZMLikUNlBjTgX+8XxbQDGoQsw+OCPAiUGPPH97G5QhGRmCPo6v7+eEvXGREiZUbEvqYlLNfiHSIOumByvAw1gCRRirMSGofFriE1+dQSfFMBDNUxjTuyFIV67HXzy5ho03v+8Nc3Z3iJxX/MleDODTFsUWbrGIGZxcEvkL/viOmWvEiKGbCwpVGy2uvxBquIIIqHs5MhjuFAQXqC6Ocusqh278ey/Q1R4hkjOMwCCrMylYZO/zO2CHZiyLkXbpGzMrHC2CpEAr6HbZKUi0/g4lUeC5WkjOzfCYQ7KCpj1df7YVhYkDfoZ+HT+UA== 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=Fg8OEojnUM8CObLxhY04E59bfbesTSuUDg9HarbRfsg=; b=oJX7evKguxWVRLj7e5JzUErHxJnnehgmFB6jI/jt6nGowYFf6RDPeDpKolVm1u7Dp1yyKIUGer2LSE6ZlvnXKT1kygzQUcj0vUbB3aTYWhrS6J63qJf9bUm1MiGvrsgh3tEjCC8jL2lYoHzYDdddXkgjNNiUkGlbRVFS3dlZU/Blez972U+WSfqu1s5lH+2Yt8ve2BD4EeVr43gEgqRSHHjwlx/VAHwW/Qg2WrBCO9ViqOZj0DYnbWHKAH4CBenafIzhp7TEVvF6e+wZB9fIpA/9zej6WwynH0AUqTghUin6f6aB2g9UMMVEWFTwYE9Ta61KDbDoEPKuXbxNJK2KwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fg8OEojnUM8CObLxhY04E59bfbesTSuUDg9HarbRfsg=; b=tRSXn26CEPpQTd7C1dNo91Bp1JzMwpXv3Udml7z/DNBgYzD9gMmG2zM8fdmW74P8mua+0LE3yLCYee0tUqY0YDsB5WPlCWJ/GvotOBrFS61Qr6pnmKGjwUxhGMsvJJyheNxqazT5uYjYpUTSuN8WmsrogTjPULxOlK0B0r+8YmePAPoTuMxMLciBLKWEw3dJDRPdiiYIJnzKr0+W1PAYYr7YwfLSw6YcHRuJE5wfrpmB0VlE7BenjQ/HnSO3g7bIe/SWW/VSHkYTf+Qy9Pbe72VTrX8Xup2Yy5zIoNF4F+l03B7VJn3p2tnOrIaKIjsT2mPXOVQb6lG2GqWfjkx9jQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 09/19] arm/its: Implement LPI invalidation Thread-Topic: [RFC PATCH 09/19] arm/its: Implement LPI invalidation Thread-Index: AQHclF8IgoXxoZafSki7XLKILtwKow== Date: Mon, 2 Feb 2026 16:14:40 +0000 Message-ID: <60272047f4da8cb962f1bde7074992fc2053ecf3.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 5b51ea9f-7cae-4c1f-99b6-08de62762ba4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?B9jfEjvv0u7AbFU+XA9CoA2qBOBTbqVKvCMfU9HRK/l6Zi+NpUzKKMjsWl?= =?iso-8859-1?Q?OwlZiXmZLKxTixwDIepYEtBy/FE5p4yzHLf9Gev7PitiI7WpwsiCJpNiAF?= =?iso-8859-1?Q?07fo+wr6hbhQBAXkcC+DSTT5nrurRjwZJqPzMmInbS0dSF9kDQOEeUEDFS?= =?iso-8859-1?Q?n19zePRZvRBHc24pt50kk4v5YC9KeMGaNsxIfbNh7PmQE+ATorDxWanHP4?= =?iso-8859-1?Q?/5+wrRICDfWv5YZQr2JYtPU7e4iEQ+NSdeALK566JAeASgwWyw2KjKj4PD?= =?iso-8859-1?Q?d4qu+BE7RA58hU4wy0lvwJvA4fo/e7+vCXNra2GgtoNgq6ioWY9FEQkHCA?= =?iso-8859-1?Q?G9NDj2wxyj01GmoyfBgGAt4fZGOPirbWzHlv9Q8IIFMXgKMfZGCny1VnUQ?= =?iso-8859-1?Q?NUFnb4FhYjUCrJL6aI+E8MlGOqYTgOdytwNTBiSKRYNlS3NLoU11d7tsvU?= =?iso-8859-1?Q?szxfqBpd1YpjEQo/6F90XN4ukPjH+Gme70HtipSxr0R71cuOP2HqtwuVpw?= =?iso-8859-1?Q?R1i0IIJZqHHYxgC0LVSQEWjmymUn5kGsYo38P1rbuvh6Jhn0GJhHxnqz1w?= =?iso-8859-1?Q?4fF8VmF/40WtB3ECn6XQy5hzbxmhUBSjcG5KA2u0NoOFyMa9lekP09t8IO?= =?iso-8859-1?Q?WC5fAg0VrKUyR9SP4XV8lZdgs/dUMK4B3VLPbPYaHoAnFA7dTw2oDeKxqz?= =?iso-8859-1?Q?F3MLyQxIpodrNA1MM7VCXb0Sj+XcwZjRT/iJZsf0x/bSyJ6GTdtVVRNlAb?= =?iso-8859-1?Q?Ii5gdaMfOdlIy9qpXv5YH0NzL9YbiZlOqQ7Cc5UZEnOKtCMGY1Ku2C8map?= =?iso-8859-1?Q?f2s1hmTnvw4UO1c6d5NqtLSLF78Gplgq06UU3h2ZFWtP0Dq06O7zRqzs3a?= =?iso-8859-1?Q?O/WmGvXgwLqSdjOrcxjnhkrWcwegwxlfW3kanR3pL4InrmaB59eC3dv1Sf?= =?iso-8859-1?Q?Wd0EVIYDnXAiSr6TyflgrjH/XVhmckvDt1NXdXKsC5ceLLAiFhkRTq5uXq?= =?iso-8859-1?Q?B3+Vxvezuuna+cFRlTECiNASnF4ShfCZdGl192SSbm6ovGdGBZvSsjfWGL?= =?iso-8859-1?Q?+jA6J1MfjvY0qC16Dg44I2m+7FXDsHOO4O1n/O8xt04Vxaf7LWsDS+Y6RK?= =?iso-8859-1?Q?OdTBK2lB8wt4z/YFwqsFZDzBnneFmwOXXYbQaossplpeZ23S5HMopKxbGg?= =?iso-8859-1?Q?X7pOScaCMFtjfBKYM3xojVDzKhtl7bqFaQc3tvmuSFibnmHdgj6YoGP3vB?= =?iso-8859-1?Q?cGh7L47Uq5r2VzjaiasTypKxjBNQEwR+qwHaRhwQhZ4Px2QJCGk2gRPYrf?= =?iso-8859-1?Q?+yZJbqqLeWbZ27eGZS2APWi5jh7Ro57lUX6D0qf37KrIhYx7RVXY/U0ktW?= =?iso-8859-1?Q?z8YG4nUlERJL8+EXMZZQrY0vo8ou08kCKjMeFkHdmkVfHBiepd0PHsIGe0?= =?iso-8859-1?Q?Sqki/iJGkHxQYu+vNWzRBvDRf2/gxKAMHYBde99WUKBqxw6Sk6Fh5n/0TD?= =?iso-8859-1?Q?E6L27wXdpdrh2PGyqbdEemJiV5HtxhGOGtSgpl8rXg4BwEwmzJ83bGFHwr?= =?iso-8859-1?Q?su8/KZsuwM+7PkEAVWSiKJMYvZ5ZE/ApAei4j71GXXm9Fbv/5IUH50U37s?= =?iso-8859-1?Q?LiH5mPFozir+1yauP9BZCQmbjXE0obo3FVRWa7p6lBvJgBXH96e/G+WGHJ?= =?iso-8859-1?Q?pXJd2GZdspGLBYWaT1E=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ndHFpPPUwIU/5tx3K958UkzEGfpSVHMx5ukHvb9FbDW5Q6r+pt2th7RJjw?= =?iso-8859-1?Q?gLTlRcDWfYorXtCdC2zSMhcHfLr0rkuIu7VV5cSjpDc8I091k5z6I7RWCl?= =?iso-8859-1?Q?u3Ywau+KVCehGT1odBC0gQHQS+g62q3mPs1VojE/mIl3+ba1ODmk6msshb?= =?iso-8859-1?Q?gmRxG/LiBYx1QkEPXh1HW0xRMyKUKZdD/a4Oq3CCv45uyz3HY270aDXwgu?= =?iso-8859-1?Q?a8QabV4P3cK0qtmy6PVMuGhbLyiPduPkgqPwMTLN0uGySjowTMxxtKdLrg?= =?iso-8859-1?Q?aFTE40ixT8f/+ZP0cbX7V4F5rwgF98IPQ+9FxZlq1QcpYBykPfmD2zpZ17?= =?iso-8859-1?Q?9RNZ+n6kL6iaLBoF09wAmIU/EdCJJ2OJ0wJdUJzOxksGak06+M2Eklgo5k?= =?iso-8859-1?Q?pyquCG8wiUMaeaqoTWOiCUyH1d5n/pv8VH6WeG2PASXUcw/z7dcNoINkjG?= =?iso-8859-1?Q?aEhDPyrhhMUI2RwJQk0luLArjgwuNXVKr0b5qZgKiNZ07g2h0sr1Qngqh5?= =?iso-8859-1?Q?S6JcYGM2JwpmqXqVb3wSGU7OdSdj6lKwd/BS10h3OdcCjT0g+PQ4FeSVz/?= =?iso-8859-1?Q?he5nuYRvPIBYh3EHwXFy//UK2iMfWajNg86MJt4SJkCLpDNMotQ8m1dELY?= =?iso-8859-1?Q?bFv1Oae37+c7PAjaGPHn2kYh9ErNLgqrmkWrHyct9ubZ/sj7hpmC7NHkDc?= =?iso-8859-1?Q?gnyie3Z8tz6v/SePxcwG5HvW4dD0JD0yItNFP0UFbqV00ChELFonXb5VtY?= =?iso-8859-1?Q?8sFFbzOgLkUUCqvCPl1oDltGXhVxEEBBTX4Gb8NsPuRbdsLOqKvsxNhUdK?= =?iso-8859-1?Q?SF4Yaq1v/H5zxJB/7x2gH7EGBOA+UePS0w2LsJgMhEfr4LLtzsQje8gQi6?= =?iso-8859-1?Q?zVW1pAWZ6ClblvmPZVNiqU2+C+b3KL3mfNEN1aYzD5Iz1trQRAeA6TITji?= =?iso-8859-1?Q?emKzEbDBBqT2aqXtCiB5/1ejLf48S3APcOZXvLhh4pc15p+fooRaad9NKm?= =?iso-8859-1?Q?02Qy4vCCFFb4awnDXKwhUBdRjhI/9vUSjXufNO2qKFbe1ByVAtW37pxb1z?= =?iso-8859-1?Q?AYcjSG3ziZQ7zrb/wqnwIitiDGmcqWX1OCKBCbbdx9aH+5WFqhpA+bZRDR?= =?iso-8859-1?Q?StN3LkanFnN9HeMgK5lnCukQ+t/+cC/rYnaDnCVbkqFEHG8KJXA8YO8opV?= =?iso-8859-1?Q?aAip3hj5iU8TELmvmxv7jvVd3fcpHu8z1QCcA8EcjW5JvXRsMCsADaq7IB?= =?iso-8859-1?Q?cgbJ+HGHCD0X6LCBQllYZWs8Xo2zenwlgNe3aY4lNkC8tQXaW5UZBoHWm0?= =?iso-8859-1?Q?h+p28samKifyrFxiFLqDfjvyMBtIyxlIyL0Mql5Q+dvD+71AZ4vd1filq7?= =?iso-8859-1?Q?iiprhttIY0W/bXQbC0YqeLTjDdMGAzOFworLW1TmPCLxdm6rBayiaT3XNs?= =?iso-8859-1?Q?4JpnZ0Y4bqRpJrzxi4opgDeRbAC/zqYISaxmoGQdIpHRuq/WrSxctrUYJu?= =?iso-8859-1?Q?9uIogiETEvILXzT8u2NJWKf3nLf2xuUMRtDBJl1KEHq/rVSIGuLGiDu4bI?= =?iso-8859-1?Q?QgFLAMwgr6RKcA/3lEynJ5Z2zUZcgj6mr6SyT+fFiGEe0aPQ3ynLmtbzlF?= =?iso-8859-1?Q?08TUmkQyHNb7tGZ6Jd2i+HPCt2a1SA59l6p4METgggei6wdSNPXzYQPfg5?= =?iso-8859-1?Q?XDfBFExLmeqimS26hlniEo5ipx8AGDI6ic8fy+eJbPgm1EwuJw0CMmReWV?= =?iso-8859-1?Q?rznTmKKNsN2oyHMRwJFE9qsOCPrAgea14oc0/9ZNedJi2XY2oLKQEtYP7u?= =?iso-8859-1?Q?Stkb+Hgp+siKsurMnE+nEVg+pvgdq5M=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b51ea9f-7cae-4c1f-99b6-08de62762ba4 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:40.7526 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: uoPhKKZ4BWUM6fIiB/9xPnzM3sjD78IfmmIV7gf2qB/qCDZD7TRkllHOHkzWOyT4d4jryFMsq/ducCxZznQD3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770048914706158500 Content-Type: text/plain; charset="utf-8" Add helpers for LPI invalidation. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 21 ++++++++++++++++++++- xen/arch/arm/gic-v4-its.c | 22 ++++++++++++++++++++++ xen/arch/arm/include/asm/gic_v3_its.h | 5 +++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 25889445f5..c628959f42 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -201,7 +201,7 @@ int its_send_command(struct host_its *hw_its, const voi= d *its_cmd) } =20 /* Wait for an ITS to finish processing all commands. */ -static int gicv3_its_wait_commands(struct host_its *hw_its) +int gicv3_its_wait_commands(struct host_its *hw_its) { /* * As there could be quite a number of commands in a queue, we will @@ -672,6 +672,25 @@ static int compare_its_guest_devices(struct its_device= *dev, return 0; } =20 +int its_inv_lpi(struct host_its *its, struct its_device *dev, + uint32_t eventid, unsigned int cpu) +{ + int ret; + + if ( event_is_forwarded_to_vcpu(dev, eventid) ) + return its_send_cmd_vinv(its, dev, eventid); + + ret =3D its_send_cmd_inv(its, dev->host_devid, eventid); + if ( ret ) + return ret; + + ret =3D its_send_cmd_sync(its, cpu); + if ( ret ) + return ret; + + return gicv3_its_wait_commands(its); +} + /* * On the host ITS @its, map @nr_events consecutive LPIs. * The mapping connects a device @devid and event @eventid pair to LPI @lp= i, diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c index 9bbd0d96b7..358d0bffb9 100644 --- a/xen/arch/arm/gic-v4-its.c +++ b/xen/arch/arm/gic-v4-its.c @@ -290,3 +290,25 @@ int gicv4_its_vlpi_move(struct pending_irq *pirq, stru= ct vcpu *vcpu) map->vpe_idx =3D vcpu->vcpu_id; return gicv4_its_vlpi_map(map); } + +/* + * There is no real VINV command. + * We do a normal INV, with a VSYNC instead of a SYNC. + */ +int its_send_cmd_vinv(struct host_its *its, struct its_device *dev, + uint32_t eventid) +{ + int ret; + struct its_vlpi_map *map =3D &dev->event_map.vlpi_maps[eventid]; + uint16_t vpeid =3D map->vm->vpes[map->vpe_idx]->vpe_id; + + ret =3D its_send_cmd_inv(its, dev->host_devid, eventid); + if ( ret ) + return ret; + + ret =3D its_send_cmd_vsync(its, vpeid); + if ( ret ) + return ret; + + return gicv3_its_wait_commands(its); +} diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index 75c91c0426..973ca6acdd 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -194,6 +194,9 @@ int its_send_cmd_discard(struct host_its *its, struct i= ts_device *dev, uint32_t eventid); int its_send_cmd_inv(struct host_its *its, uint32_t deviceid, uint32_t eve= ntid); int its_send_cmd_clear(struct host_its *its, uint32_t deviceid, uint32_t e= ventid); +int gicv3_its_wait_commands(struct host_its *hw_its); +int its_inv_lpi(struct host_its *its, struct its_device *dev, + uint32_t eventid, unsigned int cpu); int its_send_cmd_mapti(struct host_its *its, uint32_t deviceid, uint32_t eventid, uint32_t pintid, uint16_t icid); #ifdef CONFIG_ACPI @@ -267,6 +270,8 @@ int gicv4_assign_guest_event(struct domain *d, paddr_t = vdoorbell_address, uint32_t vdevid, uint32_t eventid, struct pending_irq *pirq); int gicv4_its_vlpi_move(struct pending_irq *pirq, struct vcpu *vcpu); +int its_send_cmd_vinv(struct host_its *its, struct its_device *dev, + uint32_t eventid); #ifndef CONFIG_GICV4 #define event_is_forwarded_to_vcpu(dev, eventid) ((void)dev, (void)eventid= , false) #else --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049098; cv=pass; d=zohomail.com; s=zohoarc; b=cPcyArSHPb63/UNlJbbjxprLuZt8c5MZ2AEpj3KF3xbX4QqFK4UoJBhc6PAaJN1LJ91N6vd2W7pXp/vTynSUnBK1Fy1j13IqWX80WwEolF52JsKSLQleEPu2HRthksHB/fuby7fHJACsfYHdVXEPCcJEK15zOUC8WhzYu36CE4U= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049098; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=olsFIyBVeLiR6nsQyL/e906KT3F+OOjXT7MGVYg6uvs=; b=D7YxsML0zohAcsqqhIMNNctHKo8VYQC6revWB/TrLjU/ymdWqTwagMyC78lLem6dxY4b3FGS8SUHXBK+hBNlDegPJLLedIL/NrV8dvQ566devNDPuhiulsI5db7AcLaag2AAJWWYXwRBZVheHYa5XVz8S9aWhsf8zlLA96eSVp0= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049098818662.7770105359707; Mon, 2 Feb 2026 08:18:18 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218890.1527776 (Exim 4.92) (envelope-from ) id 1vmwcc-0007J0-I8; Mon, 02 Feb 2026 16:17:54 +0000 Received: by outflank-mailman (output) from mailman id 1218890.1527776; Mon, 02 Feb 2026 16:17:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcc-0007In-FC; Mon, 02 Feb 2026 16:17:54 +0000 Received: by outflank-mailman (input) for mailman id 1218890; Mon, 02 Feb 2026 16:17:53 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZe-0000fY-2A for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:50 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 49517d05-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:44 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:41 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:41 +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" X-Inumbo-ID: 49517d05-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WjbFB36uqNnz4+cCSgWre7UswXJt80exl8Cl2XcbPXcLSv9PaWMEZV7464+80fsB5hvMYB3BYT2cLS0X57R1/ITnJ/WN8xSmLAg61booc/6PgzpV0hzQpWKmEgSQ4vOYiDBuNh7bzdnP0I3OHE52OEJ9YiwWNe1GBePZAM4Dp3EavbazUvl71UQqORVI8GSfs5oDa8dACsPlbxYNEzgtpu5C1d9ZeCQgMvuTiSeSqfghG6+o+EyLY8xPNvH1tVGoGRtlsiMHVgU4ENLTAOV8qvYXmCn2ZJipkGmaJxO+X/M8TWR9SBPVyIsVEsN72HF25MdplDN89iXlX+1xLSRlEg== 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=olsFIyBVeLiR6nsQyL/e906KT3F+OOjXT7MGVYg6uvs=; b=h7jsw1wW+mooTomcR6r8Q2tYOuwysounXOj+Y5/gGXmcSL97fzFo+I8yZcfxwUfSSaiq16/cEIre7Fw5vRvmbkyPup+ysXIErXVBxivfnPFKg1osBuC5pdEQQDLanAr6FrT9UG8V14yEdStqPNn8R0f0OTS/5j4uzbNWfp4gXNLryLhyXDIw2lODjZgtJP0pGpZCf1MyxE042pH29/qwqgYQUOD5E0FnjjiCSkXzfIE2Va7Pl3KDMMwbyrWGg8225lPQ7fvCUr2HCHQIoteDbe/VQynsfWR63FRSxfoq0TXfInt76lMg3KSp0Ta98UHNJ+SXQ/a+ykjbCxVay4YidQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=olsFIyBVeLiR6nsQyL/e906KT3F+OOjXT7MGVYg6uvs=; b=cEwaliimkHmd6fU1eaWHTycyEH+vAyRtwwhf7it50ph0oCalmMCS903Hr2qIqjdLsrgqpv+dqe+PyFoBbkxD8WFawi8cc113JUsQ1xq2rGFYDMsW8idECIoC5LqqSTflMQX0v1HyDb/It6J6RJYy7JFhA+qyJjTzzCN3PAzUQw55+RWTeEdVIfTDMjasKdkR5jtS/QOSzaz68pt9CnqBcH3f9eEpXevuiifKq1ed3bHqOOLQ73YgQgFeO2SWWJl6MS5Utx+1jDLmDHOEpjJjBaFR5aaVBK4kzK2tI0VrUL/LgNv5uim9UNzHr2/wnJvLIqKyGsaj1uu0FyrBmDT6Wg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 10/19] arm/its: Keep track of BASER regs Thread-Topic: [RFC PATCH 10/19] arm/its: Keep track of BASER regs Thread-Index: AQHclF8JFZGLM6XvwkqSrOpYWYBhLQ== Date: Mon, 2 Feb 2026 16:14:41 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 3dcea2b8-59b8-4cc9-542f-08de62762bd7 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?mZFQSYdtNd/5iY3xzaBdD8FF0Ffh6crOg/6fDXq89TgW4rcBDX6ny79bH3?= =?iso-8859-1?Q?WYOoktzKWNr/Tu6TrfelHeOYHkSuRp1PEl37+22+eD+yR4uEZTOy7TPz2m?= =?iso-8859-1?Q?WToxoGWuyF5Q4IgyMqGsOFD9KpcGxB4PaVooytCVeQcqJPadj4kaBM+hJG?= =?iso-8859-1?Q?/zGBqzssjrwndlvy6luxPj4/9oRn6RjwZzTSqmJ4dBonQKwy3WAAORwHXp?= =?iso-8859-1?Q?VO3k9oMugjV07W5CMHczLwmQuKanPjDzTuYGQm94EGuOdzZzhXOW8t+as7?= =?iso-8859-1?Q?j1OtvR3I5973RwwCVNV0wU5xfZkNRs5SIfIuZoVHTr7vOxZFmFe4q2VzVM?= =?iso-8859-1?Q?klNXK5zGkMO7if3p5ngd34MKRYhTn0OQvNmHDBMRjgXUfnszyDFJAffewR?= =?iso-8859-1?Q?DSWKfiHWTJ5rH6OdFUtWd2cMpua5Iu+eE9aDmSeC6QAxwvqM6UZbTiIiCL?= =?iso-8859-1?Q?ry9gpX4VyJA9hnFgJo1It4LIsVNO7+SyY2sEvTOr7rXdHBzVZDXmhjDzzh?= =?iso-8859-1?Q?R3oTfude8nm1nENUHUXiJPREyYJ4x3rMzVa70JdCtZLlKHgPKfpMpycT82?= =?iso-8859-1?Q?d9WFtyQNvKyHaYzv65SWJj6bq7aO8jFtKJel2vakC4ATaMZYxkTYwSSEST?= =?iso-8859-1?Q?Lkc2Ci2vy3MsMl/CaxtJGFkz8Us/t1YhSP/x2GOzZ83/XoaJ0uYOTOpslu?= =?iso-8859-1?Q?z2QwxJRow6DBlUbUzyk0wLVDpecTEsfL64t3aYk9BuOIApxxJ5i6t7ks/x?= =?iso-8859-1?Q?9R+6lrcG7Dsvc8S2GsgvVRYC42QwLsogSyRKVFtdhQ/TVnvxIcYPM3Bt4h?= =?iso-8859-1?Q?QWUA28wXW6SXeM5z6q8Lo9euDhr4yT8YvYm4F+/7p8ZLe47S4g2LHHg4tU?= =?iso-8859-1?Q?yoJR/b2FD/OZBgTE45RjiMUCLJdT/Kinn3IDMWZS6Xa1OoUuZRdH7mx8g5?= =?iso-8859-1?Q?A+FbEJeMYHkCyh9LwY1CZgXeKSreFDySYH9OVtUpdATmucnU7OZKJnlibq?= =?iso-8859-1?Q?lH/BdqKZZ0MLOnUz6TTaX6s+2jHPm50cVI6lL0JvUYRGpH/8LZshqy7FGn?= =?iso-8859-1?Q?xLxjLGpSQzM1n4iC05vubQjg6kjY44S/i/8PnF+1HAap/v98r0TRkO2B0h?= =?iso-8859-1?Q?hqGvxcAVI4PaUiHxutXPpxl9EFj0VM4s5AX7rcL4PjsDu7OQRZDuGl44NH?= =?iso-8859-1?Q?oZTHqtlbkamLjkybdFL7PrY8/axq+0mz1lLXYCMfKUllF2IDhrFyfgIUVL?= =?iso-8859-1?Q?eYOZtR+YmNdHuVKSZ9pqR3w4VXLUOq212h0TzSsGcZgBpRSwUQJZ7llqG/?= =?iso-8859-1?Q?fJu1XFN076Xctb/am1azdRMZBCTYEeUk1Ytw5TfJ/qwFlzabzY3+Ap5tgb?= =?iso-8859-1?Q?ADDxS2AH1KghKD4dS8MQPMUBt0kHzmP12a0GXSRe94RLtQIEIn+UEsU8At?= =?iso-8859-1?Q?8/t6IExEAG4Z2uRP3SM7TVgfj03tara/5iJOyUrwji2yNJNz3/v/2FefAH?= =?iso-8859-1?Q?J0q3cR7VdJ1ZoLAt/JVLpPibPIBWalS2WITm6coJq8pA9FQEVRhGNa8QFs?= =?iso-8859-1?Q?C/4v/U22+wu9kv48sHlHvsWXuUuTcJezFPNF4S9PntZnP/Ozicx4wMpD9W?= =?iso-8859-1?Q?GsLwfDR6002pprdVfY9axbivzf9vRhOTREKxXVdDnNf9EnEVEF5GfUjPqk?= =?iso-8859-1?Q?kfiErBLlJ6axzfdDiqE=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?uZTt9gWN6NI9v7TQxxypeIv+GIjyqU4L+llV9X48jJEeLna6GssF9RqUjf?= =?iso-8859-1?Q?rYngJCC2bwmoQgtXXc1UxlHd4VdW/hZ7umrnSbR8mFiuVCn7vkTmUEBJ0W?= =?iso-8859-1?Q?Z+zVlulOP/6UhuqSM6OOdT6/CWW6sFrvXDP38alM1iJe3SC5BWqLKFqTL5?= =?iso-8859-1?Q?AvTj5KPwi3nLA15a9Zd28cyVMiGygFYnH7iyrP+E/EK8wFEeAhHifL5Cni?= =?iso-8859-1?Q?NrmQCgq6OqUgxCLUb5lX7vei+jOBDhDoBTY+XTwtk/ssEi4fupo/UpKuJg?= =?iso-8859-1?Q?DA8UoSwgxODJbc2cC4K7JU3NRWx/Oi+/yn5zRWTqPg/2I1VdqKdxtXKooG?= =?iso-8859-1?Q?N5Yrf5qZHcb17vW12EDjfeiSH54VfJPGZVZy+oZ+CwGHTOosCQ+iusJiaT?= =?iso-8859-1?Q?M9JTt5hKOf5sdoTBd7M4fpd9i24wSMoBxui1N1QvOPSKs2qVLgJzkijX19?= =?iso-8859-1?Q?x5OSWrhlt04zE18R7P06JDK/Cru+aFr3cvOJ3vjozPrGyWR5lzen1/YrWN?= =?iso-8859-1?Q?d/pjyJDA8QJj42HBihpx+6zepe1hDGJXI/36T7NAJhqxlOrN7mg5JD2YVq?= =?iso-8859-1?Q?DaWJTTS4KaN9cEfkrI4OIEaxW8Z4dxB3u7p7I3It2mP4TXeGw2Fm5DAwSO?= =?iso-8859-1?Q?E7rJQCa0mT/tomr+mXKYkQ+TeiYVQWyyQtCMMUGsg7Pzn8LKOTLxIBEuak?= =?iso-8859-1?Q?RZzNV+nPR9hIWSUY1v//yUcQoPKpgo334UC8aTynb1Ng2WToEF8F2p9BHv?= =?iso-8859-1?Q?WrbxZQqGTtPAI6wwYLP8QXfh5TPvBtC1TjVKhcRnOk4lexMJ0j/HSQifXF?= =?iso-8859-1?Q?RPTY8wSxU2kEn/xUd6L3HZgGjhALltA1dcSpzysRYQljm5spwf10MlclOx?= =?iso-8859-1?Q?meruApF5IUMIYXGtwNhQpYQCY3Dnk3sMYLj1ms1BlveVPVGNimM4cNwpzT?= =?iso-8859-1?Q?n1La67UEkPYF26ONeP2JhY+1zBgDcXfTjvpbE2Mt7ckL6fSKYI7/o70IVv?= =?iso-8859-1?Q?Z934ajROlxSrC6j34PEr39wXSknCoAsVUYaiHbRsjHFhnIjBJfEopSWfQ6?= =?iso-8859-1?Q?Yt58KkPAK60Y8q9viB16jZ87RoTJEVem5+80SvkKrtPcQLDFcsPzqXU97G?= =?iso-8859-1?Q?WiQXG5pFiZJrKic4wO/Y23Wgjto9bzdyqvH37hXY2RncUt29d9H0b7RMoV?= =?iso-8859-1?Q?cgheD52bKwNTS+n8yVRWp7GNNJdb9YaXCawV+0GEufdIaaCG5oCqqMz4NX?= =?iso-8859-1?Q?uNb5blWu1pAjQwX0RzU5h1cXQi2zZ31rNWCOAKPsv1bl5zFZ693iJ/oCsA?= =?iso-8859-1?Q?7VlxXKSI3u95TKh7oOIUwljFROMmiiJvsyUD/15PyQAtOSnSync3LPz8zN?= =?iso-8859-1?Q?UqepOTQ6pUcsa2vSI5f1ykatiOfHaVQoRfGE8+SbLYwETNsu8NY9t2rkLG?= =?iso-8859-1?Q?Wt6oLC4ZKzJFio9qf8WDasuYwRnWlBUXFUCxTxGvK4VQH19UhcvOeNMlRU?= =?iso-8859-1?Q?TaIFjDu2LxA1LtFDIVMTgigSliq0Y6ZbltqiXDgrnptpN94hMsckEgDyXn?= =?iso-8859-1?Q?TiKKdaKCET7FGfU4biMJKUTZ+fGw7MBl8MZGg4UxiBQ5kwXScKLZeEcNuZ?= =?iso-8859-1?Q?0CoMWb/fqDhcRIHA8FF6pawtHVjE+wwnCYUTEFVEJ5gssEuJ91K43M7kTj?= =?iso-8859-1?Q?A/ExLI1ZvKfA1cuWeh0Z4G4jYLxSV//m73kEgzTJieFQJ8sojgP4bHfxqs?= =?iso-8859-1?Q?1v95ABprD07Hd5viAaEBJ9c98HrjPoBrALWz9aXW5LaHRJqkTQWS8njmJk?= =?iso-8859-1?Q?l/diRt3x4ZqnkKQQzCSyfrhNnWZXg50=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3dcea2b8-59b8-4cc9-542f-08de62762bd7 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:41.1902 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: NdnESA2f/BYACB1dRnAj+VCY3ps1gKaun/AHMrfF8jmc6T3ljNCxb2+CuzKFEA8Y4SJA+LGy1nrJNk8wUpJF3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049099742158500 Content-Type: text/plain; charset="utf-8" Keep all the info about BASER regs in host_its structure to be able to easi= ly access it later. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 36 +++++++++++++++++++++------ xen/arch/arm/include/asm/gic_v3_its.h | 14 +++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index c628959f42..2328595a85 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -430,16 +430,32 @@ static void *its_map_cbaser(struct host_its *its) /* The ITS BASE registers work with page sizes of 4K, 16K or 64K. */ #define BASER_PAGE_BITS(sz) ((sz) * 2 + 12) =20 +struct its_baser *its_get_baser(struct host_its *hw_its, uint32_t type) +{ + unsigned int i; + + for ( i =3D 0; i < GITS_BASER_NR_REGS; i++ ) + { + if (GITS_BASER_TYPE(hw_its->tables[i].val) =3D=3D type) + return &hw_its->tables[i]; + } + + return NULL; +} + static int its_map_baser(void __iomem *basereg, uint64_t regc, - unsigned int nr_items) + unsigned int nr_items, struct its_baser *baser) { uint64_t attr, reg; unsigned int entry_size =3D GITS_BASER_ENTRY_SIZE(regc); - unsigned int pagesz =3D 2; /* try 64K pages first, then go down. */ + unsigned int page_size[4] =3D {SZ_4K, SZ_16K, SZ_64K, SZ_64K}; + unsigned int pagesz =3D 0; /* try 64K pages first, then go down. */ unsigned int table_size; unsigned int order; void *buffer; + uint32_t type; =20 + type =3D GITS_BASER_TYPE(regc); attr =3D gicv3_its_get_shareability() << GITS_BASER_SHAREABILITY_SHIF= T; attr |=3D GIC_BASER_CACHE_SameAsInner << GITS_BASER_OUTER_CACHEABILITY= _SHIFT; attr |=3D gicv3_its_get_cacheability() << GITS_BASER_INNER_CACHEABILIT= Y_SHIFT; @@ -479,6 +495,11 @@ retry: writeq_relaxed(reg, basereg); regc =3D readq_relaxed(basereg); =20 + baser->val =3D regc; + baser->base =3D buffer; + baser->table_size =3D table_size; + baser->pagesz =3D page_size[pagesz]; + /* The host didn't like our attributes, just use what it returned. */ if ( (regc & BASER_ATTR_MASK) !=3D attr ) { @@ -490,7 +511,7 @@ retry: } attr =3D regc & BASER_ATTR_MASK; } - if ( (regc & GITS_BASER_INNER_CACHEABILITY_MASK) <=3D GIC_BASER_CACHE_= nC ) + if ( gicv3_its_get_cacheability() <=3D GIC_BASER_CACHE_nC ) clean_and_invalidate_dcache_va_range(buffer, table_size); =20 /* If the host accepted our page size, we are done. */ @@ -568,26 +589,27 @@ static int gicv3_its_init_single_its(struct host_its = *hw_its) { void __iomem *basereg =3D hw_its->its_base + GITS_BASER0 + i * 8; unsigned int type; + struct its_baser *baser =3D hw_its->tables + i; =20 reg =3D readq_relaxed(basereg); - type =3D (reg & GITS_BASER_TYPE_MASK) >> GITS_BASER_TYPE_SHIFT; + type =3D GITS_BASER_TYPE(reg); switch ( type ) { case GITS_BASER_TYPE_NONE: continue; case GITS_BASER_TYPE_DEVICE: - ret =3D its_map_baser(basereg, reg, BIT(hw_its->devid_bits, UL= )); + ret =3D its_map_baser(basereg, reg, BIT(hw_its->devid_bits, UL= ), baser); if ( ret ) return ret; break; case GITS_BASER_TYPE_COLLECTION: - ret =3D its_map_baser(basereg, reg, num_possible_cpus()); + ret =3D its_map_baser(basereg, reg, num_possible_cpus(), baser= ); if ( ret ) return ret; break; /* In case this is a GICv4, provide a (dummy) vPE table as well. */ case GITS_BASER_TYPE_VCPU: - ret =3D its_map_baser(basereg, reg, 1); + ret =3D its_map_baser(basereg, reg, 32, baser); if ( ret ) return ret; break; diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index 973ca6acdd..bd2696f354 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -64,6 +64,7 @@ #define GITS_BASER_INNER_CACHEABILITY_SHIFT 59 #define GITS_BASER_TYPE_SHIFT 56 #define GITS_BASER_TYPE_MASK (7ULL << GITS_BASER_TYPE_SHIFT) +#define GITS_BASER_TYPE(reg) ((reg & GITS_BASER_TYPE_MASK) >> G= ITS_BASER_TYPE_SHIFT) #define GITS_BASER_OUTER_CACHEABILITY_SHIFT 53 #define GITS_BASER_TYPE_NONE 0UL #define GITS_BASER_TYPE_DEVICE 1UL @@ -143,6 +144,17 @@ struct its_device { #endif }; =20 +/* + * The ITS_BASER structure - contains memory information, cached + * value of BASER register configuration. + */ +struct its_baser { + void *base; + uint64_t val; + unsigned int table_size; + unsigned int pagesz; +}; + /* data structure for each hardware ITS */ struct host_its { struct list_head entry; @@ -156,6 +168,7 @@ struct host_its { spinlock_t cmd_lock; void *cmd_buf; unsigned int flags; + struct its_baser tables[GITS_BASER_NR_REGS]; }; =20 /* Map a collection for this host CPU to each host ITS. */ @@ -259,6 +272,7 @@ struct pending_irq *gicv3_assign_guest_event(struct dom= ain *d, uint32_t virt_lpi); void gicv3_lpi_update_host_entry(uint32_t host_lpi, int domain_id, uint32_t virt_lpi); +struct its_baser *its_get_baser(struct host_its *hw_its, uint32_t type); void lpi_write_config(uint8_t *prop_table, uint32_t lpi, uint8_t clr, uint8_t set); int its_send_command(struct host_its *hw_its, const void *its_cmd); --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049094; cv=pass; d=zohomail.com; s=zohoarc; b=SqJ6uVX8pPUwPxNZDYievHVC28GKdvuvMzAUbBXaW704I85LdF/VmIsJ92E/P6+I4BKMwqedvFhart+cGT68PwDgGp/nGoMRkcb+Xb5h0IRvjz+6t2FAc2OjUqGDp4JxPrqQG6SVAY7/H2AQH1Lmklcde+iiEM6tYY8rJ8W9+/M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049094; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EiKSNne18UWCuoczCD+vbXEKSctptfC3w3ZIUBjkJqc=; b=fzTfgMJIp5OfJPYbAM6PKJcaoMGOxOh19alwpowrcXINqo/jlLpfort2ZoVpRMyIZBV98uMfIWVRF7tYFi45wfSL97jaxDplIYv3c3JRixhdHw+1nYCXE8V22/ej//TyTthoUzOPt+mDXwGYN+0ElL82F9tbU+ou/H2i4+tZkt8= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049094820713.2901615223525; Mon, 2 Feb 2026 08:18:14 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218897.1527804 (Exim 4.92) (envelope-from ) id 1vmwce-0007tE-Ki; Mon, 02 Feb 2026 16:17:56 +0000 Received: by outflank-mailman (output) from mailman id 1218897.1527804; Mon, 02 Feb 2026 16:17:56 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwce-0007rW-BV; Mon, 02 Feb 2026 16:17:56 +0000 Received: by outflank-mailman (input) for mailman id 1218897; Mon, 02 Feb 2026 16:17:54 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZf-0000fY-2J for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:51 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 499c134f-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:44 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:41 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:41 +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" X-Inumbo-ID: 499c134f-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U0673Q9MTmiXXfpRNi/WdDz7uMw5aGbiFgS/4twnzt53AYJjsJ23lHkKlVUwk1MDyosnRIpUhCgy/R4lwaV0Ag/FEZedGS+n1OmG4ea52u/YrE/iaQXvQbFRNZNmr+BPwHQW9aK6+sAtYAESbyn4Ea3jv2lFhEf9OUMcIdrEuFn8sVlxJX+QnFKkNY3pA6bm1bXOlkg4fbbB9WpI20uLCcFJ77FkO+gW6+MU7RBp/BYfRoi3yLpD2QwogiW2PuvDEVAwqoyKCWGR176RBarpTbF/wxdTG8en2msnLJtVrJLvri8Bmr344RymM+CUUY+pVDyxczmKQK+inkRMDlPBdw== 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=EiKSNne18UWCuoczCD+vbXEKSctptfC3w3ZIUBjkJqc=; b=gQEAXDgW4g5uqz200kuP4hvCeJrNnpeOkAKJxpVmgshbi0eEQSBJ+PsSF6VkvKav/CXmpA/BNW5CrID8RsL4ZjwTYUNAWf8YuBS6NGh8LsNdsjPqnYRHJsotUdD/AXRrVOL4NDhq+xVGh2FeRhCswCJMB+8y779cVKXwUSobBfJeOHWY8dL3CXqRxk1SXkh2PM1cvzp6Pt43f4KWECqZxJU+IIUsxaJOQzyKdbZkVFzWHqzKRhCT/vh3LK/yeNyn+jYYqA8VNjjq9TswzVhHpfx92ir1BXuXiUDXTTHNochXlmBPDxhriuovaIFJUK3Gz9YuRKZges1YLjYjyAW4lQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EiKSNne18UWCuoczCD+vbXEKSctptfC3w3ZIUBjkJqc=; b=FXYZ+vd7pXkKRBMnnIbD47GfnVa0e2zqAXXlJsynMMR9cCEKL9IFkCKURwD9HH1JUBmTGya4YlELs7tfJAFA9VkpCwgcDrH/W+v2K5SF1mvBmlOn2Tp/3Od0U/nWI9tsw8uxPXbvQPe81+1FmiF8jBxKnbmpdp0sGjsftjRt3RpKccA9nOh1kUQ1tDjaIzXUHpSg5WXyHl1hbg7NKpgFes7K0Y7KRBLEzDxsSdLjZiVSRqvhiA3ok6wV9cUWiObHAjThUQDmjc71hO6gdqpPmhmSo9LB5XbzaR2YCj/92JSOCn3vFbtGxyZ4ZUSUC223XcICBX9ewWItZQrUJiQVtw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 11/19] arm/its: Add ITS VM and VPE allocation/teardown Thread-Topic: [RFC PATCH 11/19] arm/its: Add ITS VM and VPE allocation/teardown Thread-Index: AQHclF8JuufVuCvm00eonduwsvAd6g== Date: Mon, 2 Feb 2026 16:14:41 +0000 Message-ID: <1e37aecc73c38669c1f3d41a4a829a5a5b54f836.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: 075950dc-5880-4d24-e1ce-08de62762c00 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?apyP8ifJKHpoFZuyuJFQ9rf9KdbTsh0jc2/xV1E+OOcTIAqSWuyk5yXc3f?= =?iso-8859-1?Q?BmcjhLfg3y8AuOO1joh82SNXFeu66eLCIVUUYIyoDkfLYAfLVz61sZKuEg?= =?iso-8859-1?Q?qDynrGIY7TFlaQrcQkzFNkWnTcNH3nky5MqNYsXHK9X45bywQ+XIKIX2OQ?= =?iso-8859-1?Q?QBSbBzeORgF/hz90QJOWWTZDpx/PWb655QSX5kXCXPmeO2Edb2ENpLqFAR?= =?iso-8859-1?Q?BZYEB5LmVJeloN1SGnKjUlm5SDhUIJ+ZRq0WvyJoKWowL/ZTI1jWeKYZvP?= =?iso-8859-1?Q?/RRPo0dDn/4e6WPpZJwzdF8LnUYfVrJCbZhJc2nO59IECKONZw6VJd9Bue?= =?iso-8859-1?Q?gjUhRwWj29KJsKm2HBpxIN2XS1EglQsVOX61MWx+OY4xKP0do8trU87G/w?= =?iso-8859-1?Q?rVPpQ6m0kMfdRBE15F6+eMJOpD4sA9hd8rvduezp7S55KXQzARlFN2O2Sv?= =?iso-8859-1?Q?UEPcVG9FFU0zUrgCnmdchCfNRUfMSFStj+S2MNyPuosPE+WVHR9QTWTJQM?= =?iso-8859-1?Q?RDsEYkqagbN1A+FTIk7/WPVqIQkBDR2est2Pwnal9SaARLP2LNhJpoY7xA?= =?iso-8859-1?Q?uRdCiaPcPIauiX4tkkynxrHADyyl3cRkXjFQQhHiwmSquZU0CHhnTchbBL?= =?iso-8859-1?Q?ok0sG/LFJZJDWLow+EzT9b2mHq26xkH1jL4RwwGLwenbMgGHqrFkBdPAMs?= =?iso-8859-1?Q?IYXtLtw6pG7kerr8kIZta1JCB44ZQBVrmVZrmDZiOUsSQDbF7rdZlDSndS?= =?iso-8859-1?Q?3bsO9pkX0XbOkXY0nLwY3d21cyJ3K6uLfv6oYu+OlquSpdAEi89P77/LxE?= =?iso-8859-1?Q?XngzrUE8hfEBY4YUygKXGtMvWibrYPv3uP61cDChlOmgh97yY8asdY1m75?= =?iso-8859-1?Q?OR4YncyrKa++mhCMODidElE0SbCSvkoSYxRvcJ1MhXJQzN3pTxI6DuXtK4?= =?iso-8859-1?Q?QR71mdNzc9Iqg/9/Enn42gc48qmWAaF0asC9+dUhU4D7yKwWoI8hxRtcpN?= =?iso-8859-1?Q?G8LUM7jCzqs8JiPMGnTodOyI4JJOgO+cjBwhSasECefmBkQTWlAoPzZ0wb?= =?iso-8859-1?Q?3vs6HJg1xk+AcREK1I2UJeXZQ7jEhL+AxY+tV2t4TVMriDh17/w7lZMfmC?= =?iso-8859-1?Q?ljrYj1MaWclZBawsxO3wKPBli0CLfaz0jTlc/0WDdg+yaaJdTs6nJqGlHc?= =?iso-8859-1?Q?/DTMMCwAFB9YyEJYPvmkrI6ErMcgaCFjqh8wYwWHcIPEY/Y7qQVNxyTZT5?= =?iso-8859-1?Q?GdIqObzOOvt5bgLO002e8l7mPpJi7y8QINinsQAYXqo9yOgFh0TbyOgZxk?= =?iso-8859-1?Q?64cFziItp8UlfPDs8TXKP20iYsw/1sXMCE5zAGwS2QI2SXcUZjqYioUYNS?= =?iso-8859-1?Q?fUrew9Exw9IQcG3TEpT4R/oAIEKZyb6ug6zcAoguXIVeIlGJbu9u9Lhd0+?= =?iso-8859-1?Q?9e1f2us231yDjhD9yy3BfNtnzJBfVetQiq99BCbgeMkFpYvjMdnFNycJsZ?= =?iso-8859-1?Q?gy2epFSURjOzIy64DAyVxq2FoUOL6DVBBq5QtKJr7waev6MxIlgoKR93ID?= =?iso-8859-1?Q?TBFp/CyZpI4QLJDQL0k9nM7Pl+UrBmGR0Aklh+uj54CMiv2imGiFJ/Zcuz?= =?iso-8859-1?Q?aiNZVAM4FICaYwkWJ6RoRp3UCgdhqQbcCOfpEvzTTKEHDiRsaWWj8u+9ro?= =?iso-8859-1?Q?xRWhwy6Fe/MaUR9bSS8=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?6W+lyePzZevrleYjf5ye+6fFTikxtpVxoMUT8Sy8ozEq9hZE7pmQwRJZ+C?= =?iso-8859-1?Q?2/kNA5yPGt9T8u48Mf+v5Vk35DXcdVpbCt8+kBy0urTVO0M2jA4bD14F2v?= =?iso-8859-1?Q?p9yaZohR99esFhfqHDS7e6oCQeKW97OofZDAh4ZCOR+GCcyKfgGpAa4zzR?= =?iso-8859-1?Q?K16FGcGeKrWWAXQzD0cExREWjAAqFNVQg6t1nCT5bl2AEv6slvu6iBTWKW?= =?iso-8859-1?Q?nc/ukt7UiH8/CzMe7KPjxnB4zFYIHUWT2erSNdKIaRbwJ93/ZgnS3/pCqx?= =?iso-8859-1?Q?T6zxuaEOcmc+TvjArzta1QB56HTTdO/GpJceRRwmEZGcc9IwB7/0PWZrGu?= =?iso-8859-1?Q?QWLfH0s5KMop+8E5prstKaTpvxD4ObsB6YQSLXh6SFeCfY58k0Hu8hULik?= =?iso-8859-1?Q?AyG4xQ0nKk4bP2COXHNFGrECtPVAaQvGCS/k4lXNIm7JIDkwzMsXWBIE5Y?= =?iso-8859-1?Q?+3mpNMMKuotDA2gpArf0AEABOonc3v1p+Ra4nnPlzsewD1SsCDCXxp/K6E?= =?iso-8859-1?Q?GVo2OQXyTnousOV+uuUEqtnU65q4P0Pd8j6GU/7n/5XgoymAzNDqOeKEKP?= =?iso-8859-1?Q?4fawjUITsHayqrZaZFvNTn9PyRDFWc/WSI/1Z9oMD04Fxb9Nni+FQREnUT?= =?iso-8859-1?Q?1IQ5zrZB+uErWP1Oj/R76Gg7NsbGcNKwC74QDxmkBlAhqmP6eiQyFPn2OF?= =?iso-8859-1?Q?KgIAawpsqBz57w1U3niQ3S19p6xo9vyYsSSOkNGgnOvypgvNBJwiEmAXc1?= =?iso-8859-1?Q?XKMxI1dE5QYas2rGk8x5C3ahH+j4WhGpjuKQufOEbzp3xztougXyqC90cN?= =?iso-8859-1?Q?h4Xoix1ZDiA4gXkhuR9I5AuNpbp01j28jASpf8zkE3PfjML2zezinZIWVn?= =?iso-8859-1?Q?M8n5ET8h+kY95E/zs44Tgbay92E2ECOLXfL47ngUDu6NT1+ihcoZ5rcYTH?= =?iso-8859-1?Q?PtjcWRVyy/j9/q06awROzX5rNTx2TW9SxLRD4WUqchp1eQsr9Ku+gO9RoM?= =?iso-8859-1?Q?+5PLoDDsqtGeVKpvN3t8FxrFqkOMqSSJUuscNlIViUHW1mVra3lIGcG9XH?= =?iso-8859-1?Q?hLU52L0BHjFs7ORQLdlB6w86radmP5UDwm8jnxZvw0nq6IjIm+/ns5Hor3?= =?iso-8859-1?Q?C4g0Q2LEI+CVUFPEJezr7jp7sfrAQBl3m6FLllzrZ5/yHug3dLHj4G2C0G?= =?iso-8859-1?Q?HuGrH5tNRYnqDLNp8ZNdf+6MazXmSQySy7nseGVbNTbXp1xBFj+7yBnCmt?= =?iso-8859-1?Q?/zaXdVFL4yX5Q77DrSGePmVyuird9Rbnvx+FvUf7tNxRAXnRrpXFF0B29w?= =?iso-8859-1?Q?IUZpWZVTrolwpnrn0P1k2prG8Q/+fl3OWScQGcANKDgKvujuf5PWjutgv8?= =?iso-8859-1?Q?upqyTV1GTjBjz0Sp83EkZjLP/UN2pSOB1uNSYQtfQ5xnL69PwXrTduKhAR?= =?iso-8859-1?Q?bBhPaXMIAx1TmrFmdA01CY5gVzpofDUxO3vTQ/CNBcX+2UXEbr0qhsjnep?= =?iso-8859-1?Q?70/cnrANOvfwidOfyZPdzAzGft9cGCmsiZjk/zxe3QzCv+no0VoWdhbi0b?= =?iso-8859-1?Q?ZFj4xEMCiDf4hbhYC/AnsfWRBhi81vNWTp61+Mi2PlqHmEZHHpwU0VOSz3?= =?iso-8859-1?Q?qyG1LjbotH504B5L7mcf6/XUdHR6OqV9aa3j6kbJEEr/1jPCX2M3GCo09X?= =?iso-8859-1?Q?fuofnaikFIwiO9Cw6CEpB0LEkZMJs8tt5jlYUCUCS2cxrIgqOrcGIgr0yf?= =?iso-8859-1?Q?jNWoxwM9nbX1+HbdT0f3HrVyibM7hEzXtFY7mZpEZFpyfwl1++wBRSnTzG?= =?iso-8859-1?Q?3KrxL3Xo/V2H5iLo+gum3Lac4W00Rrk=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 075950dc-5880-4d24-e1ce-08de62762c00 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:41.6618 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: y7u24g0Ke3qQoGWBInZ4xP5waUsn/dG/0q2QQBMhra+iFQtcTiGyIUe2dmQgP49LKy/JPqVPl989KEvE5bwung== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049095966154100 Content-Type: text/plain; charset="utf-8" Do necessary allocations for GICv4 VLPI injection. When creating a domain allocate its_vm and property tables. For each VCPU allocate a VPe with a unique vpe id and separate pending tabl= e. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 157 ++++++++++++---- xen/arch/arm/gic-v3-lpi.c | 61 +++++- xen/arch/arm/gic-v3.c | 18 ++ xen/arch/arm/gic-v4-its.c | 259 ++++++++++++++++++++++++++ xen/arch/arm/include/asm/gic_v3_its.h | 17 ++ xen/arch/arm/include/asm/gic_v4_its.h | 1 + xen/arch/arm/include/asm/vgic.h | 3 + xen/arch/arm/vgic.c | 25 ++- 8 files changed, 496 insertions(+), 45 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 2328595a85..fb1d2709be 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -31,6 +31,8 @@ LIST_HEAD(host_its_list); =20 =20 +unsigned int nvpeid =3D 16; + /* * It is unlikely that a platform implements ITSes with different quirks, * so assume they all share the same. @@ -228,7 +230,7 @@ int gicv3_its_wait_commands(struct host_its *hw_its) return -ETIMEDOUT; } =20 -static uint64_t encode_rdbase(struct host_its *hw_its, unsigned int cpu, +uint64_t encode_rdbase(struct host_its *hw_its, unsigned int cpu, uint64_t reg) { reg &=3D ~GENMASK(51, 16); @@ -443,6 +445,54 @@ struct its_baser *its_get_baser(struct host_its *hw_it= s, uint32_t type) return NULL; } =20 +bool its_alloc_table_entry(struct its_baser *baser, uint32_t id) +{ + uint64_t reg =3D baser->val; + bool indirect =3D reg & GITS_BASER_INDIRECT; + unsigned int idx; + __le64 *table; + unsigned int entry_size =3D GITS_BASER_ENTRY_SIZE(reg); + + /* Don't allow id that exceeds single, flat table limit */ + if ( !indirect ) + return (id < (baser->table_size / entry_size)); + + /* Compute 1st level table index & check if that exceeds table limit */ + idx =3D id / (baser->pagesz / entry_size); + if ( idx >=3D (baser->pagesz / GITS_LVL1_ENTRY_SIZE) ) + return false; + + table =3D baser->base; + + /* Allocate memory for 2nd level table */ + if (!table[idx]) + { + unsigned int page_size =3D baser->pagesz; + void *buffer; + + buffer =3D alloc_xenheap_pages(get_order_from_bytes(page_size), + gicv3_its_get_memflags()); + if ( !buffer ) + return -ENOMEM; + + /* Flush Lvl2 table to PoC if hw doesn't support coherency */ + if ( gicv3_its_get_cacheability() <=3D GIC_BASER_CACHE_nC ) + clean_and_invalidate_dcache_va_range(buffer, page_size); + + table[idx] =3D cpu_to_le64(virt_to_maddr(buffer) | GITS_VALID_BIT); + + /* Flush Lvl1 entry to PoC if hw doesn't support coherency */ + if ( gicv3_its_get_cacheability() <=3D GIC_BASER_CACHE_nC ) + clean_and_invalidate_dcache_va_range(table + idx, + GITS_LVL1_ENTRY_SIZE); + + /* Ensure updated table contents are visible to ITS hardware */ + dsb(sy); + } + + return true; +} + static int its_map_baser(void __iomem *basereg, uint64_t regc, unsigned int nr_items, struct its_baser *baser) { @@ -737,13 +787,75 @@ static int gicv3_its_map_host_events(struct host_its = *its, return ret; } =20 - /* TODO: Consider using INVALL here. Didn't work on the model, though.= */ + return 0; +} + +static bool its_alloc_device_table(struct host_its *hw_its, uint32_t dev_i= d) +{ + struct its_baser *baser; + + baser =3D its_get_baser(hw_its, GITS_BASER_TYPE_DEVICE); + if ( !baser ) + return false; + + return its_alloc_table_entry(baser, dev_id); +} + +struct its_device *its_create_device(struct host_its *hw_its, + uint32_t host_devid, uint64_t nr_even= ts) +{ + void *itt_addr =3D NULL; + struct its_device *dev =3D NULL; + int ret; + + /* Sanitise the provided hardware values against the host ITS. */ + if ( host_devid >=3D BIT(hw_its->devid_bits, UL) ) + return NULL; + + dev =3D xzalloc(struct its_device); + if ( !dev ) + return NULL; + + /* An Interrupt Translation Table needs to be 256-byte aligned. */ + dev->itt_order =3D get_order_from_bytes(nr_events * hw_its->itte_size); + itt_addr =3D alloc_xenheap_pages(dev->itt_order, gicv3_its_get_memflag= s()); + if ( !itt_addr ) + goto fail_dev; + + clean_and_invalidate_dcache_va_range(itt_addr, + nr_events * hw_its->itte_size); + =20 - ret =3D its_send_cmd_sync(its, 0); + if ( !its_alloc_device_table(hw_its, host_devid) ) + goto fail_itt; + + ret =3D its_send_cmd_mapd(hw_its, host_devid, max(fls(nr_events - 1), = 1U), + virt_to_maddr(itt_addr), true); if ( ret ) - return ret; + goto fail_itt; =20 - return gicv3_its_wait_commands(its); + dev->itt_addr =3D itt_addr; + dev->hw_its =3D hw_its; + dev->host_devid =3D host_devid; + dev->eventids =3D nr_events; + + return dev; + +fail_itt: + free_xenheap_pages(itt_addr, dev->itt_order); +fail_dev: + xfree(dev); + + return NULL; +} + +static void its_free_device(struct its_device *dev) +{ + xfree(dev->host_lpi_blocks); + xfree(dev->itt_addr); + if ( dev->pend_irqs ) + xfree(dev->pend_irqs); + xfree(dev); } =20 /* @@ -758,12 +870,10 @@ int gicv3_its_map_guest_device(struct domain *d, paddr_t guest_doorbell, uint32_t guest_devi= d, uint64_t nr_events, bool valid) { - void *itt_addr =3D NULL; struct host_its *hw_its; struct its_device *dev =3D NULL; struct rb_node **new =3D &d->arch.vgic.its_devices.rb_node, *parent = =3D NULL; int i, ret =3D -ENOENT; /* "i" must be signed to check for >=3D 0= below. */ - unsigned int order; =20 hw_its =3D gicv3_its_find_by_doorbell(host_doorbell); if ( !hw_its ) @@ -823,23 +933,12 @@ int gicv3_its_map_guest_device(struct domain *d, if ( !valid ) goto out_unlock; =20 - ret =3D -ENOMEM; - - /* An Interrupt Translation Table needs to be 256-byte aligned. */ - order =3D get_order_from_bytes(max(nr_events * hw_its->itte_size, 256U= L)); - itt_addr =3D alloc_xenheap_pages(order, gicv3_its_get_memflags()); - if ( !itt_addr ) - goto out_unlock; - - memset(itt_addr, 0, PAGE_SIZE << order); - - clean_and_invalidate_dcache_va_range(itt_addr, - nr_events * hw_its->itte_size); - - dev =3D xzalloc(struct its_device); + dev =3D its_create_device(hw_its, host_devid, nr_events); if ( !dev ) goto out_unlock; =20 + ret =3D -ENOMEM; + /* * Allocate the pending_irqs for each virtual LPI. They will be put * into the domain's radix tree upon the guest's MAPTI command. @@ -860,14 +959,6 @@ int gicv3_its_map_guest_device(struct domain *d, if ( !dev->host_lpi_blocks ) goto out_unlock; =20 - ret =3D its_send_cmd_mapd(hw_its, host_devid, fls(nr_events - 1), - virt_to_maddr(itt_addr), true); - if ( ret ) - goto out_unlock; - - dev->itt_addr =3D itt_addr; - dev->itt_order =3D order; - dev->hw_its =3D hw_its; dev->guest_doorbell =3D guest_doorbell; dev->guest_devid =3D guest_devid; dev->host_devid =3D host_devid; @@ -920,13 +1011,7 @@ out_unlock: =20 out: if ( dev ) - { - xfree(dev->pend_irqs); - xfree(dev->host_lpi_blocks); - } - if ( itt_addr ) - free_xenheap_pages(itt_addr, order); - xfree(dev); + its_free_device(dev); =20 return ret; } diff --git a/xen/arch/arm/gic-v3-lpi.c b/xen/arch/arm/gic-v3-lpi.c index c029d5d7a4..3c2649b695 100644 --- a/xen/arch/arm/gic-v3-lpi.c +++ b/xen/arch/arm/gic-v3-lpi.c @@ -58,6 +58,7 @@ static DEFINE_PER_CPU(struct lpi_redist_data, lpi_redist); =20 #define MAX_NR_HOST_LPIS (lpi_data.max_host_lpi_ids - LPI_OFFSET) #define HOST_LPIS_PER_PAGE (PAGE_SIZE / sizeof(union host_lpi)) +uint32_t lpi_id_bits; =20 static union host_lpi *gic_get_host_lpi(uint32_t plpi) { @@ -202,14 +203,11 @@ void gicv3_lpi_update_host_entry(uint32_t host_lpi, i= nt domain_id, write_u64_atomic(&hlpip->data, hlpi.data); } =20 -static int gicv3_lpi_allocate_pendtable(unsigned int cpu) +struct page_info *lpi_allocate_pendtable(void) { void *pendtable; unsigned int order; =20 - if ( per_cpu(lpi_redist, cpu).pending_table ) - return -EBUSY; - /* * The pending table holds one bit per LPI and even covers bits for * interrupt IDs below 8192, so we allocate the full range. @@ -219,20 +217,34 @@ static int gicv3_lpi_allocate_pendtable(unsigned int = cpu) order =3D get_order_from_bytes(max(lpi_data.max_host_lpi_ids / 8, (uns= igned long)SZ_64K)); pendtable =3D alloc_xenheap_pages(order, gicv3_its_get_memflags()); if ( !pendtable ) - return -ENOMEM; + return NULL; =20 memset(pendtable, 0, PAGE_SIZE << order); /* Make sure the physical address can be encoded in the register. */ if ( virt_to_maddr(pendtable) & ~GENMASK(51, 16) ) { free_xenheap_pages(pendtable, order); - return -ERANGE; + return NULL; } clean_and_invalidate_dcache_va_range(pendtable, lpi_data.max_host_lpi_ids / 8); =20 - per_cpu(lpi_redist, cpu).pending_table =3D pendtable; + return virt_to_page(pendtable); +} + +static int gicv3_lpi_allocate_pendtable(unsigned int cpu) +{ + struct page_info *pendtable; + + if ( per_cpu(lpi_redist, cpu).pending_table ) + return -EBUSY; + + pendtable =3D lpi_allocate_pendtable(); + if ( !pendtable ) + return -EINVAL; =20 + per_cpu(lpi_redist, cpu).pending_table =3D page_to_virt(pendtable); +=20 return 0; } =20 @@ -274,6 +286,38 @@ static int gicv3_lpi_set_pendtable(void __iomem *rdist= _base) return 0; } =20 +void *lpi_allocate_proptable(void) +{ + void *table; + int order; + + /* The property table holds one byte per LPI. */ + order =3D get_order_from_bytes(lpi_data.max_host_lpi_ids); + table =3D alloc_xenheap_pages(order, gicv3_its_get_memflags()); + if ( !table ) + return NULL; + + /* Make sure the physical address can be encoded in the register. */ + if ( (virt_to_maddr(table) & ~GENMASK(51, 12)) ) + { + free_xenheap_pages(table, order); + return NULL; + } + memset(table, GIC_PRI_IRQ | LPI_PROP_RES1, MAX_NR_HOST_LPIS); + clean_and_invalidate_dcache_va_range(table, MAX_NR_HOST_LPIS); + + return table; +} + +void lpi_free_proptable(void *vproptable) +{ + int order; + + /* The property table holds one byte per LPI. */ + order =3D get_order_from_bytes(lpi_data.max_host_lpi_ids); + free_xenheap_pages(vproptable, order); +} + /* * Tell a redistributor about the (shared) property table, allocating one * if not already done. @@ -314,7 +358,8 @@ static int gicv3_lpi_set_proptable(void __iomem * rdist= _base) } =20 /* Encode the number of bits needed, minus one */ - reg |=3D fls(lpi_data.max_host_lpi_ids - 1) - 1; + lpi_id_bits =3D fls(lpi_data.max_host_lpi_ids - 1); + reg |=3D lpi_id_bits - 1; =20 reg |=3D virt_to_maddr(lpi_data.lpi_property); =20 diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 14852d18c2..d4af332b0e 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -2083,6 +2083,22 @@ static bool gic_dist_supports_lpis(void) return (readl_relaxed(GICD + GICD_TYPER) & GICD_TYPE_LPIS); } =20 +#ifdef CONFIG_GICV4 +static void __init gicv4_init(void) +{ + gicv3_info.hw_version =3D GIC_V4; + + + gicv4_its_vpeid_allocator_init(); + +} +#else +static void __init gicv4_init(void) +{ + ASSERT_UNREACHABLE(); +} +#endif + /* Set up the GIC */ static int __init gicv3_init(void) { @@ -2157,6 +2173,8 @@ static int __init gicv3_init(void) =20 gicv3_hyp_init(); =20 + if ( gic_is_gicv4() ) + gicv4_init(); out: spin_unlock(&gicv3.lock); =20 diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c index 358d0bffb9..fac3b44a94 100644 --- a/xen/arch/arm/gic-v4-its.c +++ b/xen/arch/arm/gic-v4-its.c @@ -27,6 +27,83 @@ #include =20 =20 +/* + * VPE ID is at most 16 bits. + * Using a bitmap here limits us to 65536 concurrent VPEs. + */ +static unsigned long *vpeid_mask; + +static spinlock_t vpeid_alloc_lock =3D SPIN_LOCK_UNLOCKED; + +void __init gicv4_its_vpeid_allocator_init(void) +{ + /* Allocate space for vpeid_mask based on MAX_VPEID */ + vpeid_mask =3D xzalloc_array(unsigned long, BITS_TO_LONGS(MAX_VPEID)); + + if ( !vpeid_mask ) + panic("Could not allocate VPEID bitmap space\n"); +} + +static int __init its_alloc_vpeid(struct its_vpe *vpe) +{ + int id; + + spin_lock(&vpeid_alloc_lock); + + id =3D find_first_zero_bit(vpeid_mask, MAX_VPEID); + + if ( id =3D=3D MAX_VPEID ) + { + id =3D -EBUSY; + printk(XENLOG_ERR "VPEID pool exhausted\n"); + goto out; + } + + set_bit(id, vpeid_mask); + +out: + spin_unlock(&vpeid_alloc_lock); + + return id; +} + +static void __init its_free_vpeid(uint32_t vpe_id) +{ + spin_lock(&vpeid_alloc_lock); + + clear_bit(vpe_id, vpeid_mask); + + spin_unlock(&vpeid_alloc_lock); +} + +static bool __init its_alloc_vpe_entry(uint32_t vpe_id) +{ + struct host_its *hw_its; + + /* + * Make sure the L2 tables are allocated on *all* v4 ITSs. We + * could try and only do it on ITSs corresponding to devices + * that have interrupts targeted at this VPE, but the + * complexity becomes crazy. + */ + list_for_each_entry(hw_its, &host_its_list, entry) + { + struct its_baser *baser; + + if ( !hw_its->is_v4 ) + continue; + + baser =3D its_get_baser(hw_its, GITS_BASER_TYPE_VCPU); + if ( !baser ) + return false; + + if ( !its_alloc_table_entry(baser, vpe_id) ) + return false; + } + + return true; +} + static int its_send_cmd_vsync(struct host_its *its, uint16_t vpeid) { uint64_t cmd[4]; @@ -39,6 +116,188 @@ static int its_send_cmd_vsync(struct host_its *its, ui= nt16_t vpeid) return its_send_command(its, cmd); } =20 +static int its_send_cmd_vmapp(struct host_its *its, struct its_vpe *vpe, + bool valid) +{ + uint64_t cmd[4]; + uint16_t vpeid =3D vpe->vpe_id; + uint64_t vpt_addr; + int ret; + + cmd[0] =3D GITS_CMD_VMAPP; + cmd[1] =3D (uint64_t)vpeid << 32; + cmd[2] =3D valid ? GITS_VALID_BIT : 0; + + /* Unmap command */ + if ( !valid ) + goto out; + + /* Target redistributor */ + cmd[2] |=3D encode_rdbase(its, vpe->col_idx, 0x0); + vpt_addr =3D virt_to_maddr(vpe->vpendtable); + cmd[3] =3D (vpt_addr & GENMASK(51, 16)) | + ((HOST_LPIS_NRBITS - 1) & GENMASK(4, 0)); + + out: + ret =3D its_send_command(its, cmd); + + return ret; +} + +static int its_send_cmd_vinvall(struct host_its *its, struct its_vpe *vpe) +{ + uint64_t cmd[4]; + uint16_t vpeid =3D vpe->vpe_id; + + cmd[0] =3D GITS_CMD_VINVALL; + cmd[1] =3D (uint64_t)vpeid << 32; + cmd[2] =3D 0x00; + cmd[3] =3D 0x00; + + return its_send_command(its, cmd); +} + +static int its_map_vpe(struct host_its *its, struct its_vpe *vpe) +{ + int ret; + + /* + * VMAPP command maps the vPE to the target RDbase, including an + * associated virtual LPI Pending table. + */ + ret =3D its_send_cmd_vmapp(its, vpe, true); + if ( ret ) + return ret; + + ret =3D its_send_cmd_vinvall(its, vpe); + if ( ret ) + return ret; + + ret =3D its_send_cmd_vsync(its, vpe->vpe_id); + if ( ret ) + return ret; + + return 0; +} +static int __init its_vpe_init(struct its_vpe *vpe) +{ + int vpe_id, rc =3D -ENOMEM; + struct page_info *vpendtable; + struct host_its *hw_its; + + /* Allocate vpe id */ + vpe_id =3D its_alloc_vpeid(vpe); + if ( vpe_id < 0 ) + return rc; + + /* Allocate VPT */ + vpendtable =3D lpi_allocate_pendtable(); + + if ( !vpendtable ) + goto fail_vpt; + + if ( !its_alloc_vpe_entry(vpe_id) ) + goto fail_entry; + + rwlock_init(&vpe->lock); + vpe->vpe_id =3D vpe_id; + vpe->vpendtable =3D page_to_virt(vpendtable); + /* + * We eagerly inform all the v4 ITS and map vPE to the first + * possible CPU + */ + vpe->col_idx =3D cpumask_first(&cpu_online_map); + list_for_each_entry(hw_its, &host_its_list, entry) + { + if ( !hw_its->is_v4 ) + continue; + + if ( its_map_vpe(hw_its, vpe) ) + goto fail_entry; + } + + return 0; + + fail_entry: + xfree(page_to_virt(vpendtable)); + fail_vpt: + its_free_vpeid(vpe_id); + + return rc; +} + +static void __init its_vpe_teardown(struct its_vpe *vpe) +{ + unsigned int order; + + order =3D get_order_from_bytes(max(lpi_data.max_host_lpi_ids / 8, (uns= igned long)SZ_64K)); + its_free_vpeid(vpe->vpe_id); + free_xenheap_pages(vpe->vpendtable, order); + xfree(vpe); +} + +int vgic_v4_its_vm_init(struct domain *d) +{ + unsigned int nr_vcpus =3D d->max_vcpus; + int ret =3D -ENOMEM; + + if ( !gicv3_its_host_has_its() ) + return 0; + + d->arch.vgic.its_vm =3D xzalloc(struct its_vm); + if ( !d->arch.vgic.its_vm ) + return ret; + + d->arch.vgic.its_vm->vpes =3D xzalloc_array(struct its_vpe *, nr_vcpus= ); + if ( !d->arch.vgic.its_vm->vpes ) + goto fail_vpes; + d->arch.vgic.its_vm->nr_vpes =3D nr_vcpus; + + d->arch.vgic.its_vm->vproptable =3D lpi_allocate_proptable(); + if ( !d->arch.vgic.its_vm->vproptable ) + goto fail_vprop; + + return 0; + +fail_vprop: + xfree(d->arch.vgic.its_vm->vpes); + fail_vpes: + xfree(d->arch.vgic.its_vm); + + return ret; +} + +void vgic_v4_free_its_vm(struct domain *d) +{ + struct its_vm *its_vm =3D d->arch.vgic.its_vm; + if ( its_vm->vpes ) + xfree(its_vm->vpes); + if ( its_vm->vproptable ) + lpi_free_proptable(its_vm); +} + +int vgic_v4_its_vpe_init(struct vcpu *vcpu) +{ + int ret; + struct its_vm *its_vm =3D vcpu->domain->arch.vgic.its_vm; + unsigned int vcpuid =3D vcpu->vcpu_id; + + vcpu->arch.vgic.its_vpe =3D xzalloc(struct its_vpe); + if ( !vcpu->arch.vgic.its_vpe ) + return -ENOMEM; + + its_vm->vpes[vcpuid] =3D vcpu->arch.vgic.its_vpe; + vcpu->arch.vgic.its_vpe->its_vm =3D its_vm; + + ret =3D its_vpe_init(vcpu->arch.vgic.its_vpe); + if ( ret ) + { + its_vpe_teardown(vcpu->arch.vgic.its_vpe); + return ret; + } + return 0; +} + static int its_send_cmd_vmapti(struct host_its *its, struct its_device *de= v, uint32_t eventid) { diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index bd2696f354..411beb81c8 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -77,6 +77,7 @@ #define GITS_BASER_ENTRY_SIZE_SHIFT 48 #define GITS_BASER_ENTRY_SIZE(reg) \ ((((reg) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) += 1) +#define GITS_LVL1_ENTRY_SIZE 8UL #define GITS_BASER_SHAREABILITY_SHIFT 10 #define GITS_BASER_PAGE_SIZE_SHIFT 8 #define GITS_BASER_SIZE_MASK 0xff @@ -117,9 +118,19 @@ /* We allocate LPIs on the hosts in chunks of 32 to reduce handling overhe= ad. */ #define LPI_BLOCK 32U =20 +extern unsigned int nvpeid; +/* The maximum number of VPEID bits supported by VLPI commands */ +#define ITS_MAX_VPEID_BITS nvpeid +#define MAX_VPEID (1UL << ITS_MAX_VPEID_BITS) + #ifdef CONFIG_GICV4 #include #endif + +extern uint32_t lpi_id_bits; +#define HOST_LPIS_NRBITS lpi_id_bits +#define MAX_HOST_LPIS BIT(lpi_id_bits, UL) + /* * Describes a device which is using the ITS and is used by a guest. * Since device IDs are per ITS (in contrast to vLPIs, which are per @@ -169,6 +180,7 @@ struct host_its { void *cmd_buf; unsigned int flags; struct its_baser tables[GITS_BASER_NR_REGS]; + bool is_v4; }; =20 /* Map a collection for this host CPU to each host ITS. */ @@ -273,8 +285,13 @@ struct pending_irq *gicv3_assign_guest_event(struct do= main *d, void gicv3_lpi_update_host_entry(uint32_t host_lpi, int domain_id, uint32_t virt_lpi); struct its_baser *its_get_baser(struct host_its *hw_its, uint32_t type); +bool its_alloc_table_entry(struct its_baser *baser, uint32_t id); +struct page_info *lpi_allocate_pendtable(void); +void *lpi_allocate_proptable(void); +void lpi_free_proptable(void *vproptable); void lpi_write_config(uint8_t *prop_table, uint32_t lpi, uint8_t clr, uint8_t set); +uint64_t encode_rdbase(struct host_its *hw_its, unsigned int cpu, uint64_t= reg); int its_send_command(struct host_its *hw_its, const void *its_cmd); =20 struct its_device *get_its_device(struct domain *d, paddr_t vdoorbell, diff --git a/xen/arch/arm/include/asm/gic_v4_its.h b/xen/arch/arm/include/a= sm/gic_v4_its.h index 722247ec60..fb0ef37bbe 100644 --- a/xen/arch/arm/include/asm/gic_v4_its.h +++ b/xen/arch/arm/include/asm/gic_v4_its.h @@ -49,6 +49,7 @@ struct event_vlpi_map { unsigned int nr_vlpis; }; =20 +void gicv4_its_vpeid_allocator_init(void); #endif =20 /* diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index f12d736808..580310fec4 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -414,6 +414,9 @@ bool gic_is_gicv4(void); #define gic_is_gicv4() (false) #endif =20 +int vgic_v4_its_vm_init(struct domain *d); +void vgic_v4_free_its_vm(struct domain *d); +int vgic_v4_its_vpe_init(struct vcpu *vcpu); #endif /* !CONFIG_NEW_VGIC */ =20 /*** Common VGIC functions used by Xen arch code ****/ diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index 0da8c1a425..6baf870ad5 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -22,6 +22,7 @@ =20 #include #include +#include #include =20 =20 @@ -329,6 +330,15 @@ int domain_vgic_init(struct domain *d, unsigned int nr= _spis) for ( i =3D 0; i < NR_GIC_SGI; i++ ) set_bit(i, d->arch.vgic.allocated_irqs); =20 + if ( gic_is_gicv4() ) + { + ret =3D vgic_v4_its_vm_init(d); + if ( ret ) + { + printk(XENLOG_ERR "GICv4 its vm allocation failed\n"); + return ret; + } + } return 0; } =20 @@ -366,11 +376,14 @@ void domain_vgic_free(struct domain *d) #endif xfree(d->arch.vgic.pending_irqs); xfree(d->arch.vgic.allocated_irqs); + + if ( gic_is_gicv4() ) + vgic_v4_free_its_vm(d); } =20 int vcpu_vgic_init(struct vcpu *v) { - int i; + int i, ret; =20 v->arch.vgic.private_irqs =3D xzalloc(struct vgic_irq_rank); if ( v->arch.vgic.private_irqs =3D=3D NULL ) @@ -389,6 +402,16 @@ int vcpu_vgic_init(struct vcpu *v) INIT_LIST_HEAD(&v->arch.vgic.lr_pending); spin_lock_init(&v->arch.vgic.lock); =20 + if ( gic_is_gicv4() && gicv3_its_host_has_its()) + { + ret =3D vgic_v4_its_vpe_init(v); + if ( ret ) + { + printk(XENLOG_ERR "GICv4 its vpe allocation failed\n"); + return ret; + } + } + return 0; } =20 --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049164; cv=pass; d=zohomail.com; s=zohoarc; b=IOf3+Gkc3NVczcwEmtr3kMVyqmk8/kswtX3680C27Idyc9vd2jUlTZY8MZFwy9yHfUHou9fFlWtd5OuXimWOQL+7Z/phJn0T4SYpcw3SVeun5vD2/1KlMSdO9j5FJz8tQToIZ1w6C8QelfojMuvT/OnYw84En6ZBTCGQrPU6GjI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049164; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uSB60wtIseXpEOBJ7I2DHvvHn5SQhFmvHE/+vrRCLY4=; b=e2IUtlTNk66EvbVR/FBCxiKA0+Cjy2P14HQHo/qxIk3lBWoBUs7ROgCuazbJIJdjwP2s9PK7tHPD8dRpbMZ40Jg0N6f7KyekMry5ukEkvzTRve+wEF9UBFB+XU6xRT9uRBP2bmxStWfIe+3D35IA5hdXYjRNn6GK5Kfl8dPnMfI= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049164696318.48343627992983; Mon, 2 Feb 2026 08:19:24 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218944.1527836 (Exim 4.92) (envelope-from ) id 1vmwdd-0002d4-Gb; Mon, 02 Feb 2026 16:18:57 +0000 Received: by outflank-mailman (output) from mailman id 1218944.1527836; Mon, 02 Feb 2026 16:18:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwdd-0002cx-Dc; Mon, 02 Feb 2026 16:18:57 +0000 Received: by outflank-mailman (input) for mailman id 1218944; Mon, 02 Feb 2026 16:18:56 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZg-0000fY-2R for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:52 +0000 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c201::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4a3211a8-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:45 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AMBPR03MB11643.eurprd03.prod.outlook.com (2603:10a6:20b:731::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Mon, 2 Feb 2026 16:14:42 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:42 +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" X-Inumbo-ID: 4a3211a8-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fpz7bDgc4WpWayg0CN6YFq+dyCiQcmhU36F7t0G/HB+04OdgZHXfPZ1BjqQ200TCTX6OYYTucD4yzW//VspSvB33k7B/PX3RDkopgJKtwECqL0Ja4k856n9PZTDdb4xUw5xGGQfHNXneD4WC7/yMcdWh96ymmGlX2k3kfMF/J2niTUJwByroidVIdZ1PGcuThYPz02sPGH3AZ4YmcbGEoLOrCwp0oSHwGG2tLJHE2Gxc1HyLYGC9oX6zhosZJRrm9v61Ptf8j8v9ZfXWg+mtiBwEyuiyW0+Tba6icvNqHUv07TBW0p4OMhD64LHq8eSL7al1MGhvy2IaxXumF/HtUg== 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=uSB60wtIseXpEOBJ7I2DHvvHn5SQhFmvHE/+vrRCLY4=; b=dimiqiAOYns2b3Ua02S2KFdewYepAPlTHMHXFuIHbDTGeJLrEUzqkb3J3qmwrm63PUb/UNXwZZ2tigA1c3CaDyqpgpoYbdS880+UEiWtSJ0sGWwrLfgoiiDUhmAIn0GR5J7oI3TK7w6bQQF1G0+St7sW+j15L6eDCFE9mryT1WEhC9yK4Q7jTv4GbldTO+zc3DK+JZslJSdiG3vNtFakCKeYtr+9nRVmtLw72d3MldY2rglVErNpNiZt3ODQRkbO1Scd7F8S5LDfkEwWMXxGsab2Y9bTjwL5hSDzYTSFM4EF/1CQWpxo3ccQ9ew9+Ye21iVSUkR1IdQp06uyl3gH0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uSB60wtIseXpEOBJ7I2DHvvHn5SQhFmvHE/+vrRCLY4=; b=nFyi0S8S1eE2zuzV0NnC18eZOpaEIKmUzX+Njr5bRTjxXc8VK15HJhHnyF9M1GtXrHgMeZjF6/tzAqiS2lZ/Rf1sNSmM1+jI/J8kTntA25tY4Xo4zhNOtG4Oy/FZpTRbe8rUUiQp/tcxyy+iqz4kzhIxv0XqriwfRgFWt10oh7oZP900oHAAyRGLDDGG6m+nzHcos6+JZz9UVDgjc3AhkeBNDYkq6QvYv9mVDJ4cm9zI+FypXTitn2vteNUP6w3frmXhcJkx/gxsGKHnvqt8v3R5WUTUI4lJ2qBmnQoQMxVGO0Fm/BVfH9pxm+0BlI7sYJpLiDq1/qOoZcdhVhtpuA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 12/19] arm/gic: Add VPENDBASER/VPROPBASER accessors Thread-Topic: [RFC PATCH 12/19] arm/gic: Add VPENDBASER/VPROPBASER accessors Thread-Index: AQHclF8JYkeRiWQD1Em9PXuDXFnTeQ== Date: Mon, 2 Feb 2026 16:14:42 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AMBPR03MB11643:EE_ x-ms-office365-filtering-correlation-id: bbca65a2-2351-4be3-25fa-08de62762c37 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?GiO84A7sCEuKmQteepO07iqxVNrjKBASy1P5OdS+VxaFy3uCRaFR+VcXDZ?= =?iso-8859-1?Q?w7JjEIlXAyTseuJjbdpqCnGdR+MgXCe/hb8ckyN2203cFdLycIgA+b8bkq?= =?iso-8859-1?Q?tdr9dj1R9ceo1ZG/bgMuMH3VCPAdj+YDe62UF5uR14l0GgyVKvs9Wd6V7+?= =?iso-8859-1?Q?V3xAl+9sEaynp7A2vc+appmiv+ccupx4hjCtau0CYHbGrtuupEUoamk9l4?= =?iso-8859-1?Q?b4Zv6Z+iTLDfpQAW9JgPCGCWL//aPYwuoyr/FKZzMDAy0dtQTUGamoMgjt?= =?iso-8859-1?Q?SPVXHjZQ0JRjVrN6lNP0nfT7MS9+Ird+VGDHjisvDTyDVM0jp0OM9r8EBE?= =?iso-8859-1?Q?G34FubRi+Vv2dDzBPe69OlhKluZGJDha4sOlr6SUHAJ5b0oI84/rGVuSvO?= =?iso-8859-1?Q?BtIkLouznljS6P/rF4GD8Kw3u/KARbowSNs0BfXb8jiy5P45zYfgS2Tu97?= =?iso-8859-1?Q?abQE7e/Xgtm3YNvw/2Crio2b0d7AFnSIezHX7DI+6GA37uBynWoexdqHZZ?= =?iso-8859-1?Q?wdoiAG/nBnM+2HFfemRVgBvwiNEclNs1cgJ8sJcuqVb3iyJkDyAacQkHgY?= =?iso-8859-1?Q?N/cQsSHmS/bBnsJehezmUhZkeWz+U64PRzgS2dqizwDbzEMuP3VkOO422f?= =?iso-8859-1?Q?TVa3L2GaSnsTPkMHiCV7bvcmvPSAbidXMVikJiy9tBy1uvI4Zh8wHL3A2H?= =?iso-8859-1?Q?TqMrilMRG+3xMgTpmd8KtXlRI5pDNhYb9uPPWoFbpYT2UMNuGQeghPzFGo?= =?iso-8859-1?Q?gBW+/BTc+0re0nd7hOPXv8Lw2XtCjrp8Q+0gwg1Bhlkt87lshlMYpbEGYo?= =?iso-8859-1?Q?HCV0AZNLy/5kViSooLicr58sjoM4rt4345pOuQuEkclC/5qqojvIGkw5tS?= =?iso-8859-1?Q?EZU3uSlodDUVsCRpvRBvB8zSL7923fcYu3H84gotYRr+e2u3Yu1kEWpmlR?= =?iso-8859-1?Q?Dlfp3MUP8NZ/AHAFkvq47Yuc2+9nlEa1SkrxliSfOU0zTIyKSmkNQv5RnY?= =?iso-8859-1?Q?Jhb8FAuJ+yqrqVYokxSK7VDl0XB2pOlzel6DPjmnGaWzwFhX165zvrrPOE?= =?iso-8859-1?Q?NC1s/NYiLtw+SvvhNHyHbOB75p8QpymcdIbyl/MNVT731HgopmOGjmeXFv?= =?iso-8859-1?Q?gFQQMfKNSzoGMD1Q8WBWmtrgQk9m97CAtvL7uioWSFy/vbt9GHNTA+PbB0?= =?iso-8859-1?Q?xpwBXkPZtiLEdhqgB/yzQfhvK2WEmIYofb9jkgMaPRgKDq58xkie2moYIB?= =?iso-8859-1?Q?hogxQlSzTpqKqbEU+HdWHT9eDV3zwaEPDgpzY5Taja63wlHjuYxYewESNg?= =?iso-8859-1?Q?8pvAeqznvmqSuryraDvb4wyQ/9uaXUfk7s5NsH22fH8h58zdPaOf/ATVPq?= =?iso-8859-1?Q?nFmRjquvnY/Yg/QQGSyOn4q5oH5ji+zc4RcB9lwESpyoeqVdV6c/Tta276?= =?iso-8859-1?Q?nT5ITRM14AVmAcq43PLMNSe1ZKfC6OnR2+HE4riN+DI1Uux/Y4scGviE8k?= =?iso-8859-1?Q?ABsaBjBc+DbRvYHWKrugshz5XUw2ku9zcWjjEarDx2j8hG7BBtu/Nxd856?= =?iso-8859-1?Q?FLB3stECS5FASfzlf5Y7Lk2230sHAHRM03ZaniWAvkhIg9CqE8r+G3fNku?= =?iso-8859-1?Q?KDsoTXAIX7CIUdMQvP6t/TR7v0OLVN0IogpYkPiJr/eNbsoqiEY6W/gBFI?= =?iso-8859-1?Q?SGEQLt5VD8EVSLsC0VM=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?aGYKjMAljCyl/sqS506FdNk3f8xekyglwAol9TrH1lD92Taekfhe8IGuAS?= =?iso-8859-1?Q?FAZN/WoBt9/ZzS4CpgLyyG04/zV5ZP4aOI5HPqNmlItpC0ixefaawCtmRy?= =?iso-8859-1?Q?I2DRIdorIiOxiHCdsSbRiGn+3cNJay9pJEV3L1dmVDEfsKyr1IWj77PndC?= =?iso-8859-1?Q?WtzWAgofq7dFg/bGtneFmgPYZeLkVt2+/cTT7iBReYqaUHtIQJNsb73bMa?= =?iso-8859-1?Q?xXZAqu//DIx1T6f3vARYJnKYIKsA9KwCk7LYghfXFVU1fEVXhY4rqeWlnG?= =?iso-8859-1?Q?6qwIjcvI3K62XPVdrTceJBos1uWMfimnEbWlcCbA7/Cp9bzNtmch4cdRXE?= =?iso-8859-1?Q?EV4Wr9RCd2j6cE36b6N0+kn5GnOz45Vr6VBziLB4EakdSoenYPfV8TlvjH?= =?iso-8859-1?Q?/8t0YjIF9ouHJ1coIM0E+SxLxZPSe8Y8MevmpKWANss+7SNbpMl1aX8FlQ?= =?iso-8859-1?Q?H2SgOi0UTmiryfclY8KiV/TosBVcGpbXRxUv+pE5MkAhX2de2W1knkEiub?= =?iso-8859-1?Q?TssUCUZmnz4cdW3806KvWw91yPX/F7EmDGJXVZce18mWmrVpnjCDzVa1FC?= =?iso-8859-1?Q?XwKg15xBw0uS8Gb2XMwFG1PlKhCXiiHD+Hk8t1Av4U6TNec70q1zX0c24p?= =?iso-8859-1?Q?uJ0lP6I+L6K08kqZQCuu6tJ0owzerjg9cWGo9ykiEALdo+ynIHoxv84285?= =?iso-8859-1?Q?rbnpv85Bhp5AfCLOOsFr1WPwqJHMTytuTkhedNorU8QgEWz5ZvG8FXQC3B?= =?iso-8859-1?Q?oi8EdzxJ5O3c8FW26TACXl2hUv5pNCopsl2YlnD9EJg3pnqGdZdebSq96z?= =?iso-8859-1?Q?payKap6Q/MPIJLSbjDIz3KWSLdX9T6WKUJ89vvkZC6u0IKmTynyNtpe27t?= =?iso-8859-1?Q?J1kPsA/KlfGVEEz+NraZD59i73H1XOBuzEiMyrx8NaKfla7R66S3T6UIix?= =?iso-8859-1?Q?0oqw7/O9L9fX4zOAjeK0X+9qKRyoSbygjFvXdjYKXURIFrbW40JFD7hqsc?= =?iso-8859-1?Q?F1a0cL3LnuO791bakKvbl3DAqyBWovUQzEKMtiUeoKp1ANmSTtKl8riivg?= =?iso-8859-1?Q?bljdeVUdCmiZxCXrX2/nJBqV439KP2FqSM++FdHjtjoZeE5PTXkxzc24H3?= =?iso-8859-1?Q?KdYWaGQ2Mqi/YUF+5X7U+8sy+1pKVNIfFJKYNu3VwZcxBdjhXN/KoSUWDg?= =?iso-8859-1?Q?fQcEPi1qr2+pegR3YEONO+IRc91fwhjKliB4Guraxd8inQYGxislcY5n8t?= =?iso-8859-1?Q?edJfE3S9HKnpkwdpahsSmFzZ9nqdOZ1NClrffI3XQh99foz5iCWQ6GLNKz?= =?iso-8859-1?Q?Otcl8GWbxqm9yOVBnkno3A/vV7Q3iEYbuQmx54ji5LZvOYDyCxp87gq5N7?= =?iso-8859-1?Q?jbZG8FecLVF1N6+LcgmT8i8AzhKaeRqh98697DGOU11m40ftI3lBcxTy5j?= =?iso-8859-1?Q?fm6UbllRibCHJMnyLl9j2p9djkKTAtarv/Yf3Q6C1aSrunIl9NRmPMjkBQ?= =?iso-8859-1?Q?ZFNSiZ0Xh9/HMUUeIfRvJ5uqz/AeIPQtNEowPu9qQsKZn+LrD4uxILh/m3?= =?iso-8859-1?Q?tQfwHes/+AIbSdE8QpNkzKypjVfUig4n49UI2gWAR6Jrix7Ry+QUKmkPjk?= =?iso-8859-1?Q?MtHWkSjq7Q4vKwI4JAIraL7wHMB210JEzacpzoVR3uEeQxZClXIfqWX+wc?= =?iso-8859-1?Q?1tU35I/G/HxTmavMmzTfmZbu62n/YdKytbMSHLP5rH6U/tzfgF/CGiKij4?= =?iso-8859-1?Q?AwjK2zzAE91Z+FePzEYpQG0pbCY+IwVmrtHYUnaIV/C0dmeEEQ74rk/FXR?= =?iso-8859-1?Q?RcM3TE2QBsZAiJXiahlma2X7VoIsyNw=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bbca65a2-2351-4be3-25fa-08de62762c37 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:42.0533 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: nXocrPXq/w2x2PyglV+fh8ncdKOYZ5IUoWaxcBR09ifZliZ4z5eK4c+Vk7JKqy4Q/DkCSLOvIPQfh5/vNpTBAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR03MB11643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049166072158500 Content-Type: text/plain; charset="utf-8" Implement accessors for GICv4 registers VPENDBASER and VPROPBASER. VPENDBASER access needs special handling to clear the Valid bit before writing a new value. Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v4_its.h | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/xen/arch/arm/include/asm/gic_v4_its.h b/xen/arch/arm/include/a= sm/gic_v4_its.h index fb0ef37bbe..ba81b25bde 100644 --- a/xen/arch/arm/include/asm/gic_v4_its.h +++ b/xen/arch/arm/include/asm/gic_v4_its.h @@ -17,6 +17,8 @@ * along with this program; If not, see . */ =20 +#include + #ifndef __ASM_ARM_GICV4_ITS_H__ #define __ASM_ARM_GICV4_ITS_H__ =20 @@ -50,6 +52,42 @@ struct event_vlpi_map { }; =20 void gicv4_its_vpeid_allocator_init(void); + +#define GICR_VPROPBASER 0x0070 +#define GICR_VPENDBASER 0x0078 + +#define GICR_VPENDBASER_Dirty (1UL << 60) +#define GICR_VPENDBASER_PendingLast (1UL << 61) +#define GICR_VPENDBASER_IDAI (1UL << 62) +#define GICR_VPENDBASER_Valid (1UL << 63) + +#define GICR_VPENDBASER_OUTER_CACHEABILITY_SHIFT 56 +#define GICR_VPENDBASER_SHAREABILITY_SHIFT 10 +#define GICR_VPENDBASER_INNER_CACHEABILITY_SHIFT 7 + +#define gits_read_vpropbaser(c) readq_relaxed(c) +#define gits_write_vpropbaser(v, c) {writeq_relaxed(v, c);} + +/* + * GICR_VPENDBASER - the Valid bit must be cleared before changing + * anything else. + */ +static inline void gits_write_vpendbaser(uint64_t val, void __iomem *addr) +{ + uint64_t tmp; + + tmp =3D readq_relaxed(addr); + while ( tmp & GICR_VPENDBASER_Valid ) + { + tmp &=3D ~GICR_VPENDBASER_Valid; + writeq_relaxed(tmp, addr); + tmp =3D readq_relaxed(addr); + } + + writeq_relaxed(val, addr); +} +#define gits_read_vpendbaser(c) readq_relaxed(c) + #endif =20 /* --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049102; cv=pass; d=zohomail.com; s=zohoarc; b=bmf0ppyGro5CaW4geDG184DdWyXZtM1rRJ29YSAbofbeVUc9GLcKubQBgUonr1RjDljnRishr3bLF1eyvEq6UNCOQqfTuvaXgq1pqdVsOv27fIoogDCQ5uyipcDysAiUZX3lCsZs6CVRtShMx0IA9x0UolLpNILoVI/IblCcGvQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049102; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rGDkX3OwjMwisG4lxnwiN45k91l7748k1bwBYZp04Ys=; b=XfSnB4k2p2AkbDRF4AqCLGEKZii6ipqQWmvzXEM9HPD+l64c7UbrzIgxuwBXwYb513rF4y2guC1xXyfE5hBYXOe8nMbg+5OVhVLiBAFsD5befbmHJb/0ymsmfS5Hqlt1xTyNZfK9FUloWRC+678T8e54aiYsBqiu6FpI0Z6guqQ= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 177004910220343.483084234243165; Mon, 2 Feb 2026 08:18:22 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218895.1527795 (Exim 4.92) (envelope-from ) id 1vmwcd-0007Yx-N7; Mon, 02 Feb 2026 16:17:55 +0000 Received: by outflank-mailman (output) from mailman id 1218895.1527795; Mon, 02 Feb 2026 16:17:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcd-0007XF-F5; Mon, 02 Feb 2026 16:17:55 +0000 Received: by outflank-mailman (input) for mailman id 1218895; Mon, 02 Feb 2026 16:17:53 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZh-0000fY-2d for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:53 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4a754571-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:46 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:43 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:42 +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" X-Inumbo-ID: 4a754571-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lBoLQHC3GmYHXpy2o7gFwP6RIqdYg6eftQ6MsOneBvd5di1qospcAb2J/PK5J1pzeffeGPQDlcTt9xPhONLCUod5Fb10HQ0EX4y3w/jUjF7xhC1w1rTSWL2dcxbngcQ8iJTGgELUuma451/f+DvaJ8zSH4xNt7nOQfb6vAd4S0jd6bm+izq5VQWWb9YWa9OI/u+QaO1kYp/SGh0GXi3HZ+xy4Wx/P3AbH2gipXlBMYJD8y9cdqfYwUW/slytC00O5ksFjrLDL/+pLnrQCwF7IVaRBPs8BiJg3EirXFfhZluE6H/TWV1VsvqhMuQLeM2w5XYma/NGyp8sGJKkNdc1EA== 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=rGDkX3OwjMwisG4lxnwiN45k91l7748k1bwBYZp04Ys=; b=AuJvJohR+DFk9TkIiqqBgUTaH/vYjvjj3GU63B9F8Rugt2eoCA2oKNtSU0xZDO41lrw83O1pby+qQM17ggZhUHBEU01Uo7zPOkjsnfgEKMrCG/2nGm297P3M9bilqmMpnV33nuK62VdRKJwdODNy2jHrshf/qwfXFE7O/E50o6swWd1kjyQRJllp+fyPqOk6vr5bcpt5HH7dIfgP+NwaiHfviQ483ekPw5JHYJ95NnYE0Q8lT5PPfbe9OhlwP3S4tv5I3rtxQ4FAdmRUhwL3giEQwTorBx9bCu5POpIssMUMS0awD4Z5AWk+Ogk++pHhjqf57XLWIcv0b69gEnRksw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rGDkX3OwjMwisG4lxnwiN45k91l7748k1bwBYZp04Ys=; b=IiEvd/d5e+mvNPSYblaNgPl92Sdercb6Jh3BPqhR2fcsCjv85a0ejJWmD/aSYhQmaPd1ownL4ukVbnJ17DD4Xrmrc5CQMZGDlIa7KOzyZIxwVstXhEa7jSb8LOMmI2vjPPkyaSXraDqsqoPK66caOwvZ9RGCONRR40a80MZlH1RqzjrnoiCcecRBalDH24m9iKkupDngODpuCfq1fMG6Q7KDa/USA+t9dRbcNlCyexwNE+ojhU4ki2KyXVT5K5KR/OynwJdTKJ0C2oGWlrNkyMHyLH0zSgXw4IyZiz+FPzcw/Q9ivFSiftaazasztz3He0P6zChHJjCxu1m+lEHljw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 13/19] arm/gic: VPE scheduling Thread-Topic: [RFC PATCH 13/19] arm/gic: VPE scheduling Thread-Index: AQHclF8KXPFV5VVY2Umd/wd7Gk/+fQ== Date: Mon, 2 Feb 2026 16:14:42 +0000 Message-ID: <6eee1cbcbfc221b0a6af00f7ec5ccc52f8bd5b75.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: 45f50c92-6743-42d1-e590-08de62762c86 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?7inYCXsZEmCYFQQUv8E3DiITGmX3tgJAmlP6Elt5NiUxwAgTWZaBb5QVp4?= =?iso-8859-1?Q?PUwzGNA7Jiz0MHd4sp60GdL1WQcIoJowQU1Rq9d302xayKfEygopAodFe2?= =?iso-8859-1?Q?NAvQeyez2JxX+vcA+iriTuFno+w/4rUZeER/CMIiUE7aQelYwq04jwMOo2?= =?iso-8859-1?Q?Eo6cVu8wYxWUmqyCBjM49HhxnknAbyUpwsPSou8f94ZgW5f2xumRwrEIu8?= =?iso-8859-1?Q?ZjOhhi+crJN7UpakCtKu62elKFnrYKfV422dAjTTSO7gS/zCne+FP0onEk?= =?iso-8859-1?Q?m+jxQ7RE4iQAz2Otz1cxpLzjlOHJOpxvpwQNnC7h18a1lP7YWyDY5N3ZnY?= =?iso-8859-1?Q?yAXH2fIa47g0Y2se/9BTri2HtWjU81l/kZP6Tp0cW3+SZCAmVKWinas+we?= =?iso-8859-1?Q?xM3eoMqABfTk6P3yZjJfSs++rxPp1Uybp/urDRDGXRnpYgROmElstFMkGK?= =?iso-8859-1?Q?w00MOiboK/g86H8MiaZV9H1TwkA0DCyTBP4WXli0AdS0TtPUCBWF7Z5+fB?= =?iso-8859-1?Q?wEhmFRegENRivi57DZy0VomZL8Szs5AY6/Ht/u/8okyC0wnlNZM8ISuRKL?= =?iso-8859-1?Q?/k2uw6mkskesaPqhjml0L12tln6pup3rTLIOuuNMVJc2b1fY9R2phSzI3M?= =?iso-8859-1?Q?eXuH9JVV6iTLLNm3Qr32k8IeQiWIHZNjI7E4YdrdSoBhzvBi6EAzdsFV2F?= =?iso-8859-1?Q?MexLrNpBS6dtKYAg/iU4KxieWNYzdRw3h/sAON4sYP9vBdmz4l87lUzczV?= =?iso-8859-1?Q?TzkKxV87Ew8p3v7Ga+slkvDkpErPsxkruczf4skxHx5l37FmTJZkNfDI49?= =?iso-8859-1?Q?4WLkeQWU0UiTtjsWR0HoXW8j/ENtNoI2BvGSTRECGlVxbzRwglBCc3PS/3?= =?iso-8859-1?Q?fVgKg4zSoZcBCw5NBsbFDo5K0WVr3d85P3/geiDuWp+pwUXoYLaNXuQEvO?= =?iso-8859-1?Q?EgjqnEdy3J055TW0tEz7uUfP1pAyPX1TznMJz9q0lvRrFvoH8xsX6cMhRv?= =?iso-8859-1?Q?Z21YIHDoLGDg922G2VI1tIvx11I9SfdT2WRC+HiCstFtNMOu/kYk60R6jY?= =?iso-8859-1?Q?tFXrlxp+H0owGeoAKwjfC1iTkTN31fgkzaFVVQCwbf6mgusD9SsQe24QAw?= =?iso-8859-1?Q?2OuQd/cJrcHw7mUnWWrVTP7yftXXFJ4QjdkhMe1t39dRaUPuVfdkQP8ZHc?= =?iso-8859-1?Q?v7Mp+xb/SjSw8OKrzWi6CigwxkxJ37h45+0LCBG/JADQmobMGgW7l4uqL+?= =?iso-8859-1?Q?kC1SGJKzz1XdfMHGWg++6A+XaBCcaV2pjEAbY9wCN0MzNdN3wD2Z67Wl35?= =?iso-8859-1?Q?3zCzh7mvpSc7xw0J9AGqk4ijiWgoEGNgbp12qAibPO6hH/9446gw8ML3CI?= =?iso-8859-1?Q?F2U/XJb0cCoAJYnKRigUUGKx7bf2I/RaEudyzehGlmvOnahh3fe28ii4lO?= =?iso-8859-1?Q?WylFGkuRn09Cxtbi0rhe7+V0PqiXWoJS4y4SjZHSVbAwoyHlqx0LaHOG+e?= =?iso-8859-1?Q?Gn6gAkk2qzGu6H8sumzekk85I3Ed1tCGxxx/v/X2TSbW7SLjaFWt3AV1DB?= =?iso-8859-1?Q?FbkENutD8gKCugBuLaouVryAktc2ql39ZugKrducGStmSlSrqcRwtAW/hb?= =?iso-8859-1?Q?jGO3Hosyt/ZKZWxe4BGIRVIvzhAM4ycCqPWG8lOapa2Vdn1I5rBrrFIU+t?= =?iso-8859-1?Q?IhZbQtzZ61XRTKwo+TQ=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?fv6E9r5lbv32caG22jW5y9LtU/wHEVHF/uEL9epY7qC12k/NIm69DOL9gO?= =?iso-8859-1?Q?5xHz6JLdpZZQ0BDIgFDT2IM1lxVTFJRgJ7+u9XnxgE+kh5xkOAL5IkbhPo?= =?iso-8859-1?Q?6z/8uGSlipRQhXFzjh2bldSUCCF+lt9IOb5L843ekO92VKYWsspm4nlzZy?= =?iso-8859-1?Q?MgzRVyzC7VgRf24uNheRBs4LQrx6oJ7MyoFP7/cYH3rsCyZFRYNMXBKcNs?= =?iso-8859-1?Q?hEVjyIBd0YqWqo75gRqbKVFObURH0+FvcdtnxUJR27PMENd2f/a2fBo5QQ?= =?iso-8859-1?Q?d38brDiOiUAr80lEyZtih/CzK7W92Eldb6D2SW7bfg12yUfnhuFKRJ1tMT?= =?iso-8859-1?Q?t7h7HH/4JY4+GWcseawiK+TiQRBajK1FD3hlUsQou/OiFTP0qKDJXS5Dg2?= =?iso-8859-1?Q?aNHBkhHGd+LsJKTKPeP29n5yMfl6U0jM2y4QHeCV5kTjh5YxFPnyudoiME?= =?iso-8859-1?Q?rVhkGt75x3T/Q6CP5yTJFll42UoyCpuf+P+qzPyLeqVP2eeUrOiYVk8z3z?= =?iso-8859-1?Q?0o4gfcQIWRlTRSQdBY2Jd6AvDDgoYVgsOo7zCyPK1ETIO2EEvRbWF0WB9J?= =?iso-8859-1?Q?HhHVgWzSdf4GbgdDuSPv4Dm52nPuv9VwdMC4gA8Jwz1o0a4PPLVD7vlXxn?= =?iso-8859-1?Q?nbdE6KHxtYklgupoG4VDKBaKb4PAhI3k8K+fl8QMwN+vgWQKhyauNTf7Qj?= =?iso-8859-1?Q?XRnwmIF0rXrKFAMREFzozzhZF7R4gOt9xVAs369RK8t7ZZrCa6ziR+YEja?= =?iso-8859-1?Q?j5Sgys+vfppzog5QfPlFZLjf2STmDmBt4gW854JRtqBosXwKvh1Af9yhgI?= =?iso-8859-1?Q?xru4hSctFSqg7XhuD0EtEhhnFmfsq88Lgr4jZEXb9+ogUefZcYoYjem8P6?= =?iso-8859-1?Q?vp+96+uqxON2ThLDfYgwYVPz8pfqzR7ceJknAHcqXohI1+39CO6bsBuWvD?= =?iso-8859-1?Q?mLZcPR0F7mCi6Qar2sQLLb86n4flJosa981YUny+RVUoO4Z6K5Hk0GcCNj?= =?iso-8859-1?Q?9iliFHRohEk6NAxubuDf0O65NftvDOtsGukoA3bZK2r7+q/ooLfsXokE8k?= =?iso-8859-1?Q?4teawiNywGdke2/w2Ieu3Nt+YZlcLxP3kTBNyZzXD1z9ycfB6ywtJu4Ukg?= =?iso-8859-1?Q?qYt9rkbYSh+8eBdEZqlJmgqm6510T4qNZQnKM6VHKu30unKg24gix6Zwjx?= =?iso-8859-1?Q?c21wpb9S7rYNyDTZvBoClAdcvr9B/sGNvHjNCQIdLc4+UPikF2smz7zjey?= =?iso-8859-1?Q?wcqggnzIcVpx0jYanLPz6WJSxMC1zCM+1FCn15uY81GvOfA2nQFbB5wZru?= =?iso-8859-1?Q?NryegbNikRy1glro4ReTsJuRoxOfilhArzhKI5U9Old9Bf7F7zKx9g6W/1?= =?iso-8859-1?Q?5Xhh521k66ZxlrPYvuqKjDJEBE0ZT+T4+NDWIIGaCkOjEcJ+2S+Wg6B47l?= =?iso-8859-1?Q?UmtfvX+zGR2v2Npjp+XaLSMHZlgR+AwI/dFpfxbk76zidoF+3L7be9/6D2?= =?iso-8859-1?Q?gaDlnlhfM9/G423lA7gFysLSRDFmE+WIjsDfjkuxTuKXNTxMO6fA56w9m7?= =?iso-8859-1?Q?9k9wJHnYwULd/EIoG79cfaY+I+XHnXcn5jY1E5OcmGz+DsyscTNcJkzkAH?= =?iso-8859-1?Q?zBw6RQPO6YdjfIgIXcFfIN+3+Sjej3nD6IGyPwwnAr9Q6R4NKhc4ej8rBY?= =?iso-8859-1?Q?KmNXfFxwKHVMZYAPHLMzRKb6Ad5yYhpw0tBW/KRytFnAv8ehlc1Caj4yRg?= =?iso-8859-1?Q?Ytu4+PYntxNHptkWtf5j/DQkst/D9qwLxLGELBCbC6G+KVaynq3t7lUEto?= =?iso-8859-1?Q?jCwxbPmW9lT8I2BFEuDG/UXDjSAQoiU=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45f50c92-6743-42d1-e590-08de62762c86 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:42.5831 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 3yppVIHYBl4L73U/JPqGlIP7DCVJbEmChT6/T+yHaU2EV7nWjzKbHBP44Sl8X7XJrfqXcxAtYmhz31Rf5GFrKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049104079154100 Content-Type: text/plain; charset="utf-8" GICv4 needs to know which VCPU is currently scheduled to be able to deliver VLPIs. Implement switching of VPEs on VCPU context switch by extending the existing save/restore mechanism used for GICv2 and GICv3. Scheduling a VPE is done by setting up the VPENDBASER and VPROPBASER registers to the appropriate tables for the currently running VCPU. When scheduling out, preserve the IDAI and PendingLast bits from VPENDBASER. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v2.c | 2 +- xen/arch/arm/gic-v3.c | 9 +- xen/arch/arm/gic-v4-its.c | 138 +++++++++++++++++++++++++ xen/arch/arm/gic-vgic.c | 6 ++ xen/arch/arm/include/asm/gic.h | 2 +- xen/arch/arm/include/asm/gic_v3_defs.h | 6 ++ xen/arch/arm/include/asm/gic_v4_its.h | 9 ++ xen/arch/arm/include/asm/vgic.h | 2 + 8 files changed, 170 insertions(+), 4 deletions(-) diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index 0cd41eac12..c16fa5d67e 100644 --- a/xen/arch/arm/gic-v2.c +++ b/xen/arch/arm/gic-v2.c @@ -181,7 +181,7 @@ static void gicv2_save_state(struct vcpu *v) writel_gich(0, GICH_HCR); } =20 -static void gicv2_restore_state(const struct vcpu *v) +static void gicv2_restore_state(struct vcpu *v) { int i; =20 diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index d4af332b0e..07736179db 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -133,7 +133,7 @@ bool gic_is_gicv4(void) #endif =20 /* per-cpu re-distributor base */ -static DEFINE_PER_CPU(void __iomem*, rbase); +DEFINE_PER_CPU(void __iomem*, rbase); =20 #define GICD (gicv3.map_dbase) #define GICD_RDIST_BASE (this_cpu(rbase)) @@ -475,13 +475,15 @@ static void gicv3_save_state(struct vcpu *v) * are now visible to the system register interface */ dsb(sy); + if ( gic_is_gicv4() ) + vgic_v4_put(v, false); gicv3_save_lrs(v); save_aprn_regs(&v->arch.gic); v->arch.gic.v3.vmcr =3D READ_SYSREG(ICH_VMCR_EL2); v->arch.gic.v3.sre_el1 =3D READ_SYSREG(ICC_SRE_EL1); } =20 -static void gicv3_restore_state(const struct vcpu *v) +static void gicv3_restore_state(struct vcpu *v) { register_t val; =20 @@ -510,6 +512,9 @@ static void gicv3_restore_state(const struct vcpu *v) restore_aprn_regs(&v->arch.gic); gicv3_restore_lrs(v); =20 + if ( gic_is_gicv4() ) + vgic_v4_load(v); + /* * Make sure all stores are visible the GIC */ diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c index fac3b44a94..6a550a65b2 100644 --- a/xen/arch/arm/gic-v4-its.c +++ b/xen/arch/arm/gic-v4-its.c @@ -18,6 +18,7 @@ * GNU General Public License for more details. */ =20 +#include #include #include #include @@ -44,6 +45,21 @@ void __init gicv4_its_vpeid_allocator_init(void) panic("Could not allocate VPEID bitmap space\n"); } =20 +static void __iomem *gic_data_rdist_vlpi_base(unsigned int cpu) +{ + /* + * Each Redistributor defines two 64KB frames in the physical address = map. + * In GICv4, there are two additional 64KB frames. + * The frames for each Redistributor must be contiguous and must be + * ordered as follows: + * 1. RD_base + * 2. SGI_base + * 3. VLPI_base + * 4. Reserved + */ + return GICD_RDIST_BASE_CPU(cpu) + SZ_128K; +} + static int __init its_alloc_vpeid(struct its_vpe *vpe) { int id; @@ -571,3 +587,125 @@ int its_send_cmd_vinv(struct host_its *its, struct it= s_device *dev, =20 return gicv3_its_wait_commands(its); } + +static uint64_t read_vpend_dirty_clean(void __iomem *vlpi_base, + unsigned int count) +{ + uint64_t val; + bool clean; + + do { + val =3D gits_read_vpendbaser(vlpi_base + GICR_VPENDBASER); + /* Poll GICR_VPENDBASER.Dirty until it reads 0. */ + clean =3D !(val & GICR_VPENDBASER_Dirty); + if ( !clean ) + { + count--; + cpu_relax(); + udelay(1); + } + } while ( !clean && count ); + + if ( !clean ) + { + printk(XENLOG_WARNING "ITS virtual pending table not totally parse= d\n"); + val |=3D GICR_VPENDBASER_PendingLast; + } + + return val; +} + +/* + * When a vPE is made resident, the GIC starts parsing the virtual pending + * table to deliver pending interrupts. This takes place asynchronously, + * and can at times take a long while. + */ +static void its_wait_vpt_parse_complete(void __iomem *vlpi_base) +{ + if ( !gic_support_vptValidDirty() ) + return; + + read_vpend_dirty_clean(vlpi_base, 500); +} + +static uint64_t its_clear_vpend_valid(void __iomem *vlpi_base, uint64_t cl= r, + uint64_t set) +{ + unsigned int count =3D 1000000; /* 1s! */ + uint64_t val; + + /* + * Clearing the Valid bit informs the Redistributor that a context + * switch is taking place. + */ + val =3D gits_read_vpendbaser(vlpi_base + GICR_VPENDBASER); + val &=3D ~GICR_VPENDBASER_Valid; + val &=3D ~clr; + val |=3D set; + gits_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER); + + return read_vpend_dirty_clean(vlpi_base, count); +} + +static void its_make_vpe_resident(struct its_vpe *vpe, unsigned int cpu) +{ + void __iomem *vlpi_base =3D gic_data_rdist_vlpi_base(cpu); + uint64_t val; + + /* Switch in this VM's virtual property table. */ + val =3D virt_to_maddr(vpe->its_vm->vproptable) & GENMASK(51, 12); + val |=3D gicv3_its_get_cacheability() << GICR_VPROPBASER_INNER_CACHEAB= ILITY_SHIFT; + val |=3D gicv3_its_get_shareability() << GICR_VPROPBASER_SHAREABILITY_= SHIFT; + val |=3D GIC_BASER_CACHE_SameAsInner << GICR_VPROPBASER_OUTER_CACHEABI= LITY_SHIFT; + val |=3D (HOST_LPIS_NRBITS - 1) & GICR_VPROPBASER_IDBITS_MASK; + gits_write_vpropbaser(val, vlpi_base + GICR_VPROPBASER); + + /* Switch in this VCPU's VPT. */ + val =3D virt_to_maddr(vpe->vpendtable) & GENMASK(51, 16); + val |=3D gicv3_its_get_cacheability() << GICR_VPENDBASER_INNER_CACHEAB= ILITY_SHIFT; + val |=3D gicv3_its_get_shareability() << GICR_VPENDBASER_SHAREABILITY_= SHIFT; + val |=3D GIC_BASER_CACHE_SameAsInner << GICR_VPENDBASER_OUTER_CACHEABI= LITY_SHIFT; + /* + * When the GICR_VPENDBASER.Valid bit is written from 0 to 1, + * this bit is RES1. + */ + val |=3D GICR_VPENDBASER_PendingLast; + val |=3D vpe->idai ? GICR_VPENDBASER_IDAI : 0; + val |=3D GICR_VPENDBASER_Valid; + gits_write_vpendbaser(val, vlpi_base + GICR_VPENDBASER); + + its_wait_vpt_parse_complete(vlpi_base); +} + +static void its_make_vpe_non_resident(struct its_vpe *vpe, unsigned int cp= u) +{ + void __iomem *vlpi_base =3D gic_data_rdist_vlpi_base(cpu); + uint64_t val; + + val =3D its_clear_vpend_valid(vlpi_base, 0, 0); + vpe->idai =3D val & GICR_VPENDBASER_IDAI; + vpe->pending_last =3D val & GICR_VPENDBASER_PendingLast; +} + +void vgic_v4_load(struct vcpu *vcpu) +{ + struct its_vpe *vpe =3D vcpu->arch.vgic.its_vpe; + + + if ( vpe->resident ) + return; + + its_make_vpe_resident(vpe, vcpu->processor); + vpe->resident =3D true; +} + +void vgic_v4_put(struct vcpu *vcpu, bool need_db) +{ + struct its_vpe *vpe =3D vcpu->arch.vgic.its_vpe; + + if ( !vpe->resident ) + return; + + its_make_vpe_non_resident(vpe, vcpu->processor); + vpe->resident =3D false; +} diff --git a/xen/arch/arm/gic-vgic.c b/xen/arch/arm/gic-vgic.c index ea48c5375a..44db142dbd 100644 --- a/xen/arch/arm/gic-vgic.c +++ b/xen/arch/arm/gic-vgic.c @@ -377,6 +377,12 @@ int vgic_vcpu_pending_irq(struct vcpu *v) } } =20 +#ifdef CONFIG_GICV4 + if ( gic_is_gicv4() ) + if ( v->arch.vgic.its_vpe->pending_last ) + rc =3D 1; +#endif + out: spin_unlock_irqrestore(&v->arch.vgic.lock, flags); return rc; diff --git a/xen/arch/arm/include/asm/gic.h b/xen/arch/arm/include/asm/gic.h index afb1cc3751..04a20bdca5 100644 --- a/xen/arch/arm/include/asm/gic.h +++ b/xen/arch/arm/include/asm/gic.h @@ -362,7 +362,7 @@ struct gic_hw_operations { /* Save GIC registers */ void (*save_state)(struct vcpu *v); /* Restore GIC registers */ - void (*restore_state)(const struct vcpu *v); + void (*restore_state)(struct vcpu *v); /* Dump GIC LR register information */ void (*dump_state)(const struct vcpu *v); =20 diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index 3a7d18ef59..0db75309cf 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -257,6 +257,12 @@ struct rdist_region { bool single_rdist; }; =20 +/* per-cpu re-distributor base */ +DECLARE_PER_CPU(void __iomem*, rbase); + +#define GICD_RDIST_BASE (this_cpu(rbase)) +#define GICD_RDIST_BASE_CPU(cpu) (per_cpu(rbase, cpu)) + #endif /* __ASM_ARM_GIC_V3_DEFS_H__ */ =20 /* diff --git a/xen/arch/arm/include/asm/gic_v4_its.h b/xen/arch/arm/include/a= sm/gic_v4_its.h index ba81b25bde..37b6b92f0c 100644 --- a/xen/arch/arm/include/asm/gic_v4_its.h +++ b/xen/arch/arm/include/asm/gic_v4_its.h @@ -56,6 +56,15 @@ void gicv4_its_vpeid_allocator_init(void); #define GICR_VPROPBASER 0x0070 #define GICR_VPENDBASER 0x0078 =20 +#define GICR_VPROPBASER_OUTER_CACHEABILITY_SHIFT 56 +#define GICR_VPROPBASER_SHAREABILITY_SHIFT 10 +#define GICR_VPROPBASER_SHAREABILITY_MASK \ + (3UL << GICR_VPROPBASER_SHAREABILITY_SHIFT) +#define GICR_VPROPBASER_INNER_CACHEABILITY_SHIFT 7 +#define GICR_VPROPBASER_INNER_CACHEABILITY_MASK \ + (7UL << GICR_VPROPBASER_INNER_CACHEABILITY_SHIFT) +#define GICR_VPROPBASER_IDBITS_MASK 0x1f + #define GICR_VPENDBASER_Dirty (1UL << 60) #define GICR_VPENDBASER_PendingLast (1UL << 61) #define GICR_VPENDBASER_IDAI (1UL << 62) diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index 580310fec4..9ef667decb 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -417,6 +417,8 @@ bool gic_is_gicv4(void); int vgic_v4_its_vm_init(struct domain *d); void vgic_v4_free_its_vm(struct domain *d); int vgic_v4_its_vpe_init(struct vcpu *vcpu); +void vgic_v4_load(struct vcpu *vcpu); +void vgic_v4_put(struct vcpu *vcpu, bool need_db); #endif /* !CONFIG_NEW_VGIC */ =20 /*** Common VGIC functions used by Xen arch code ****/ --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049075; cv=pass; d=zohomail.com; s=zohoarc; b=ZPHCu12BauSOrrqTnau8GWs4wXbOh/5UNzw92E4ORtS2dDb2q7UflXpywWue9F/q/KPlxkzX/I+b2jWqSbp10zRFyhDn1f779ZJhHf6S47yycDERa6Ovi7Dju29TjgjVWTwemjYOc3byZiMSaYvTQXVXslXF9PnKwZSnFndRsXk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049075; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WRSDgXVxXnkwAo7J3b+c0zIiiSWvTsWTE54wMalFVxM=; b=S3FiId8HV5+gnGIEKfbWUOFAQvZcM0CVhza2xaFiAiFFWU7zXgk38I5FIVoEtPhhXAbYT2Zl8NJwvPUUdo1o/s65/ENP7lD4dX5MuOF6u2EVI8fYjiy9lGlGi6L1KrwVf8jBWGax+YHklSEOgMsXb9qZR/od9+GPoPGkx7MHlHo= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049075889428.9601886688622; Mon, 2 Feb 2026 08:17:55 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218877.1527761 (Exim 4.92) (envelope-from ) id 1vmwcR-0006cG-6I; Mon, 02 Feb 2026 16:17:43 +0000 Received: by outflank-mailman (output) from mailman id 1218877.1527761; Mon, 02 Feb 2026 16:17:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcR-0006bo-1A; Mon, 02 Feb 2026 16:17:43 +0000 Received: by outflank-mailman (input) for mailman id 1218877; Mon, 02 Feb 2026 16:17:41 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZi-0000fY-2q for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:54 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4b61fbbc-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:47 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:44 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14: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" X-Inumbo-ID: 4b61fbbc-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G6nuLztQ/wdM36eWAmOnG1il8adpcVEBSaTxxCyQPXRPvvw3S/Rma870p33t8xzNZ74XazSDMObLjDatNjuSKkWCCGDcntzYLpPN2Lf1Hqa0NQEo/p7pRKvGB0kMp4qdv3SStlNkkzN8lfABg4BWN43AXeWy2toarZSw5aEy+sXbwKCWaUhMKK1m3rfnD7x2/UmBw+4KSk0A6fsFdL2o1sWSPvGlrvRfSr30kas0Gf5tBxaJ2jWTDUflSEG5kcC4f31n3+mFONtGjzelGnQz/vqoIqEqbDK+Wtl84zBRVQhv8E9OWnZxSuzfItQ84vq5EMlAi3RggyUL4Sp5uLn2IQ== 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=WRSDgXVxXnkwAo7J3b+c0zIiiSWvTsWTE54wMalFVxM=; b=hRmt9VygD8ZUhkssAqlvZWTT3Gb3HQGSXL1xZYeB4eVQqoZHrP9OOGsW8GsIZLb9XC/TOIXwtxRxq+4JNse06TDVPsdqqjRhwTxUIEEC6jEgEI3PCm6GkzviFcNXHbnzCE/Ha7lg5XTqUF2bM90AGnEvuZBW4/AT792IRHhd0gerBfG8IPVX0HoU8w0QtFHSvIKgr6abxEwDMjQTzq09ArJ2yRUoIYJiGwVMriAUi5Vptdh15nIQ5WW7p6GQMuxB3e6BmEBK+OBS0X5xfHGOQu+TzsQlg6kz95aAx3y0YTjCIChERsUzpXqeyQYTBW0s5eMx8KJ9t1GPak3cVACaBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WRSDgXVxXnkwAo7J3b+c0zIiiSWvTsWTE54wMalFVxM=; b=Dw6bAghNE+oFGhCYbxVLDwQMODjzMU+o9er5AGY5zKbsWFvhrvAaxmvoQzOlePla9UrVWbLUR+oBM7yZJ3+0BZpjUVdVUH1P/J71leS2mqzfRAO164iPEUZlQjoA2PHryWXR4ClZNkjOAHaTQiJRrWMjHzQS+RypuPqMIEOxeYl7Ybu3IZxBtoLjN1dxB9PKMquXkQ/nnltB0DghLPhIyXNhlzGySTw0l5c0IQXpAPmrIHzVkDwu3rdAEowra6BAtXAt3F88jr01QPTMdd9MoRiiial6b5NwRzikA6kcQ3HMjA+Py1XvzEc/RCXDwP+Z0FmQAEmYjAUvFZjobJPRVg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 14/19] arm/its: VPE affinity changes Thread-Topic: [RFC PATCH 14/19] arm/its: VPE affinity changes Thread-Index: AQHclF8KLzy5RNi6mUqjbCAyuDg4TA== Date: Mon, 2 Feb 2026 16:14:43 +0000 Message-ID: <7cddaf16eb840dbd1480d7a1d6ddb0cbf0357113.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: 54576a18-9c90-4227-e258-08de62762d49 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?4jFWzzG0XDEZ+DEq5yoI+gLIV7U6cFLuvvdFrQUL9U4rxzpgJhyfvaTAtH?= =?iso-8859-1?Q?a+v5ZdCmGPG9Qp1jpfGXsYDTjiFoZN0bCaXE8N7nVqqvapQmwanE4fi6Yl?= =?iso-8859-1?Q?Gh1dtgqloS16YyHk2u7UtLkU+fvMQATjJgDvS3LFg73VIV9dNbq+gsCP29?= =?iso-8859-1?Q?kqrqW6JxAupGkYX6c0ILEbwHN/f4lI3vr+tWPu9IvGm0Czn9ehkJ5ErdrU?= =?iso-8859-1?Q?w1390xnbDNHBGjeX2dQbmBFx1T55tpgY1EYOzw9sfw5YqVKufbiW7k4L7G?= =?iso-8859-1?Q?ypdONFT/dag0p2osrqebcelMj77OOCAnT60/0DWFU1TQ9BgYujvKd5FU4l?= =?iso-8859-1?Q?kgisyKCqu0NrX0HJm8Nye97Kqq2I677/dagX5yM9LtY4N9yHkwAFZuxKz2?= =?iso-8859-1?Q?pRpVr9bOUgbkV+MEeMR875LI/dlZIRvWWgif1LAnL5rPB/TURdAOr0qgxE?= =?iso-8859-1?Q?C1p3znSHhIWwphrWzHzdSZXD8wmYSlNdeUYrdSHbMG2GybyGmp39sFfMrn?= =?iso-8859-1?Q?3U5AngpB3WGOtZ4VrN3HtVUPRhWhyCv7bUPcHtmdKXEi7Ihiyiyel9c0Rm?= =?iso-8859-1?Q?XGrRACSxRGIm2s4XdBIKncw65+r+JFz9hpICTjULTB7N5H0W0tKv45XeRi?= =?iso-8859-1?Q?2TwO2yTRLXti3xV/GdWT3COV9R7koxbkt8iGpDZqmrQMQjcI7qN3Rz9TB3?= =?iso-8859-1?Q?sVp9ioAu8CKSN7Q2Sb4hjNkyw/ClOrCpgZcW//4yBgYijY1m4a9VISTNxI?= =?iso-8859-1?Q?IHE9wl/7EEeuL7stGN5kD/QVW2j3RtZq7OvSwToEsj4KPrbxnfQjqUEeeg?= =?iso-8859-1?Q?k3ILBWo4Dg6sQ6tySRDJwTgCztPlRbiZKVXNI48BczpHGVh/4TIHPRN19x?= =?iso-8859-1?Q?cCIRS8vlTAkGkiB2USvmQcX9TKqX+BusSWXrOnShojfvfPtu0dZzLN4AnR?= =?iso-8859-1?Q?l+vSNSbTsVFAkIyBF51Ez4Rs0KIy2FF7VcT4VVEffkeZKgiP/YrUw48jF0?= =?iso-8859-1?Q?LcmQGpNkZM01blSH0z+7WAh2OJbnKTc4/KtRnLwW0tSqhTE92G30Whq4QU?= =?iso-8859-1?Q?NbGJZye5ArrFOMytHMV9l/KXZKMzkq0u0E07stK7A1BoSd9nSFpGEEQ/ei?= =?iso-8859-1?Q?qd2S/bx0JrDE/Prpp0po7b8TG+bw/OSBgmYjirEPrF1ulrM/iWR6+7w5e0?= =?iso-8859-1?Q?0OemqG8cU3j/PRgBhs87w3K3j3lD+IZLIigJNDyGdmawruxgspcjbD/rzt?= =?iso-8859-1?Q?PM04I+RY/JGCj7b8+wZy5i27PPtcx0WGlKeHI6PhQIznkRFls3EbnyeUA4?= =?iso-8859-1?Q?+wlx70JVMJyNPGawknJj9fOH4EUDrS2KCjaDDSoTozbG6HOdN/XRD25jES?= =?iso-8859-1?Q?O6cC/CfuV5vMYVFszYMSCj7S6UJzMlerlY7wTLZwPmsRhDD9XFTghKlK5M?= =?iso-8859-1?Q?7ZuN4QaqzypYit+AiU2u8f3jJoC8iJKf5sei1J3MJbm6ndRlhaX2URgCuI?= =?iso-8859-1?Q?LgibsW+9iuHDvIp0LLaDdJM+6W4BTxQ8SlrRq7dAM9NxboBLIXMM/yx0nI?= =?iso-8859-1?Q?ugji5M05LojtoU/YZq1ZVBhHqCVHYr2JmVOYuS6aOLhsGP06sr71sbZQ6Z?= =?iso-8859-1?Q?aaLcFc8JYRT/k5nKM86tNPyUXHoSLxxpRS6phaijE1LL+sKQsqzD8jcqjH?= =?iso-8859-1?Q?8dGb5rzv3dbDFXg5BNQ=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?DRWdAeMp/ZkQscPQ7aTMo3M4jqu95vhwagDWLgKa1oO2jZ9gzZrEV4b10+?= =?iso-8859-1?Q?KTBUL+J6a/e7Pqsul2EZ/O3o+bUkSTiuJQkYedJOSxzGvJ9O6pilcOSgI1?= =?iso-8859-1?Q?mSKyX+sryegL332BIpcrjS5HE5Sts9nK1+wq31Do2YK1XrUSAtk+M3HYg9?= =?iso-8859-1?Q?Mrpnh/gviiCmtG7QIdtwNj6eKG4QjrAdNW45x87TcjL2l0WtWu5+dAf1fu?= =?iso-8859-1?Q?eI3VR0vG+2CfI43tLqbfiEXgQtfrY81LWBAAPAFH14f9v4Sjw/ae30jD2N?= =?iso-8859-1?Q?wZi2dwQVHjh9WjKHRI7ApHmKsluu6eXSCArP+irjVKRtcPDy13M4r9wifG?= =?iso-8859-1?Q?FVJnqDvTpoc7IWqnRE6vb7AHy+YkMwFRt1v8ids69smAbwGh6ktH1bBBsX?= =?iso-8859-1?Q?vG0O5lhr1kg3G3MiNcHW4u2jpw8kg07rdz55jWza6ssi16GitC/If8NdXq?= =?iso-8859-1?Q?6f3DIK6H9H/oqv8XXIcQjyvYucMX7klAa0C0CgB8LQPtHkJAwyepfuI028?= =?iso-8859-1?Q?KHzsInpqvtynFhiz+PmRJiPCPhNHCh30s0blp7O46h+Ujb6YLe5mW3VIAI?= =?iso-8859-1?Q?S8ngKN1gbvpdiuDglyG7jDJlJtCBKGVq1bIbsh4PiF2qyflCbPrLYlQyOY?= =?iso-8859-1?Q?jQjiwciwVDc7F7abNkLzgF9BK2rdJxm7UkYMAb5g1OU3rxKV/qscQQPqmm?= =?iso-8859-1?Q?ZwkthovFFkeqNyBBYzI+W2RRv9IT++jTW9EiGTcmY+liSTWYSqlKSVa3db?= =?iso-8859-1?Q?P1IZ5S/bqrGGv+UGjcvwC9Ulac1sPhrUxg5r7Lzm3WnLkjU1L7HPRbMuc4?= =?iso-8859-1?Q?tfriq7isKRj0RIk76XrXCFdYmbszLDNRFV6B/LEDhZmTBtaCome2bdvg3+?= =?iso-8859-1?Q?9nGoAFtNgdLiD48suTk7w2/RjJVH5ZsB55cgA1snSi2Hm7bksaPpcYtk6j?= =?iso-8859-1?Q?fDD8WIthBtU1QfDqHqhE8oQZcHKdcV5vukMsgYhKnl7bkSPbwImsXzWuB1?= =?iso-8859-1?Q?m/blNKmuxyL5Zf2bGXXuQ0hx8TSzAUoxP7v74Os1ZNJtiJeWnajGJ4wCcm?= =?iso-8859-1?Q?C1SntpcWTou94TXb0/ablrIaoEO9uJwDFajtzup/yRqvIN1fgLPV319Hz4?= =?iso-8859-1?Q?GAf95Jw7iYjyJp7jLNtgNNVP31zNgQi4s+0hYAv0CX0m9T8Bph3OQl+k7+?= =?iso-8859-1?Q?rymgg92QGfvo0KSZ6PCGAAXdpK+sAvaZW3qWlbJw1RElx6K+y5xFhYHvCk?= =?iso-8859-1?Q?BiiYnNw/IJDaE3I/Vtv1n+EQLKEoRVaMszlWfwuFakG7qehEP62i2aPmDM?= =?iso-8859-1?Q?HBGqkr3lfiKLDZLG1VHx3EE0pySP8b+s5iIzNalGF2d5Ik2iW9t/Y3rRH4?= =?iso-8859-1?Q?3QC+rS8kjID6697AAv6huxM3Y+fFhHwuixyPIjLpNv8OvpA4oaK/eXMX2e?= =?iso-8859-1?Q?Zz8rsHPq37kxLK06XYJy8bGhclKBfnK+BvldLxV/iZkvDfkjGghJSXNMEl?= =?iso-8859-1?Q?ZBUTsCnykc/epBuXR0ozg31yD25DfTsk9afX7UvkKv1vnw+olTR4yc4j8P?= =?iso-8859-1?Q?/WP1mEkgWAEQ4Ny0SiXar8weImY/NamjHF+JTtSybkwHm5Rv82UzF8zose?= =?iso-8859-1?Q?3NMRluuwPDpfDw4xaA86AwlwD+BpGheHz6g0AUgB/fB4kLE/mGGOQPdD/3?= =?iso-8859-1?Q?Vi6utzMnuGptoqMXuM4FLDISe3LI4aJiTsJy1hdRs+JdoXddn8RNih+7tu?= =?iso-8859-1?Q?0uwxOqPDXOAD/BcLgO7CTSaN6/IPFD/ke7tvwG+QwuJWmGXrZC56X9iWRt?= =?iso-8859-1?Q?aaGZStZ13/T4YXE4CZunPp0PAWNXNyA=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54576a18-9c90-4227-e258-08de62762d49 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:43.0668 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ha2n/UlX+/AS/iMDNbdDPWxS8nRRupBq2fRLIvVcz25V9gg0he+XVGb44rG1omzQfGJCJ9poz6i0Re9uBlBnSg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049077668154100 Content-Type: text/plain; charset="utf-8" When a VCPU is migrated to another PCPU, its VPE affinity must be updated. Hook into VPE scheduling to ensure that the VPE to be scheduled is located on the correct PCPU, if not, move it with VMOVP command. VMOVP needs to be issued on all ITSes in the system, and in the same order, unlsess single VMOVP capable ITS is used. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 55 ++++++++++++++ xen/arch/arm/gic-v4-its.c | 105 ++++++++++++++++++++++++++ xen/arch/arm/include/asm/gic_v3_its.h | 12 +++ 3 files changed, 172 insertions(+) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index fb1d2709be..be840fbc8f 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -31,6 +31,8 @@ LIST_HEAD(host_its_list); =20 =20 +unsigned long its_list_map; + unsigned int nvpeid =3D 16; =20 /* @@ -612,10 +614,47 @@ static int gicv3_disable_its(struct host_its *hw_its) return -ETIMEDOUT; } =20 +static int __init its_compute_its_list_map(struct host_its *hw_its) +{ + int its_number; + uint32_t ctlr; + + its_number =3D find_first_zero_bit(&its_list_map, GICv4_ITS_LIST_MAX); + if ( its_number >=3D GICv4_ITS_LIST_MAX ) + { + printk(XENLOG_ERR + "ITS@%lx: No ITSList entry available!\n", hw_its->addr); + return -EINVAL; + } + + ctlr =3D readl_relaxed(hw_its->its_base + GITS_CTLR); + ctlr &=3D ~GITS_CTLR_ITS_NUMBER; + ctlr |=3D its_number << GITS_CTLR_ITS_NUMBER_SHIFT; + writel_relaxed(ctlr, hw_its->its_base + GITS_CTLR); + ctlr =3D readl_relaxed(hw_its->its_base + GITS_CTLR); + if ( (ctlr & GITS_CTLR_ITS_NUMBER) !=3D + (its_number << GITS_CTLR_ITS_NUMBER_SHIFT) ) + { + its_number =3D ctlr & GITS_CTLR_ITS_NUMBER; + its_number >>=3D GITS_CTLR_ITS_NUMBER_SHIFT; + } + + if ( test_and_set_bit(its_number, &its_list_map) ) + { + printk(XENLOG_ERR + "ITS@%lx: Duplicate ITSList entry %d\n", + hw_its->addr, its_number); + return -EINVAL; + } + + return its_number; +} + static int gicv3_its_init_single_its(struct host_its *hw_its) { uint64_t reg; int i, ret; + int its_number; =20 hw_its->its_base =3D ioremap_nocache(hw_its->addr, hw_its->size); if ( !hw_its->its_base ) @@ -633,6 +672,22 @@ static int gicv3_its_init_single_its(struct host_its *= hw_its) hw_its->itte_size =3D GITS_TYPER_ITT_SIZE(reg); if ( reg & GITS_TYPER_PTA ) hw_its->flags |=3D HOST_ITS_USES_PTA; + hw_its->is_v4 =3D reg & GITS_TYPER_VLPIS; + if ( hw_its->is_v4 ) + { + if ( !(reg & GITS_TYPER_VMOVP) ) + { + its_number =3D its_compute_its_list_map(hw_its); + if ( its_number < 0 ) + return its_number; + dprintk(XENLOG_INFO, + "ITS@%lx: Using ITS number %d\n", + hw_its->addr, its_number); + } + else + dprintk(XENLOG_INFO, + "ITS@%lx: Single VMOVP capable\n", hw_its->addr); + } spin_lock_init(&hw_its->cmd_lock); =20 for ( i =3D 0; i < GITS_BASER_NR_REGS; i++ ) diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c index 6a550a65b2..175fda7acb 100644 --- a/xen/arch/arm/gic-v4-its.c +++ b/xen/arch/arm/gic-v4-its.c @@ -36,6 +36,9 @@ static unsigned long *vpeid_mask; =20 static spinlock_t vpeid_alloc_lock =3D SPIN_LOCK_UNLOCKED; =20 +static uint16_t vmovp_seq_num; +static spinlock_t vmovp_lock =3D SPIN_LOCK_UNLOCKED; + void __init gicv4_its_vpeid_allocator_init(void) { /* Allocate space for vpeid_mask based on MAX_VPEID */ @@ -242,6 +245,57 @@ static int __init its_vpe_init(struct its_vpe *vpe) return rc; } =20 +static int its_send_cmd_vmovp(struct its_vpe *vpe) +{ + uint16_t vpeid =3D vpe->vpe_id; + int ret; + struct host_its *hw_its; + + if ( !its_list_map ) + { + uint64_t cmd[4]; + + hw_its =3D list_first_entry(&host_its_list, struct host_its, entry= ); + cmd[0] =3D GITS_CMD_VMOVP; + cmd[1] =3D (uint64_t)vpeid << 32; + cmd[2] =3D encode_rdbase(hw_its, vpe->col_idx, 0x0); + cmd[3] =3D 0x00; + + return its_send_command(hw_its, cmd); + } + + /* + * If using the its_list "feature", we need to make sure that all ITSs + * receive all VMOVP commands in the same order. The only way + * to guarantee this is to make vmovp a serialization point. + */ + spin_lock(&vmovp_lock); + + vmovp_seq_num++; + + /* Emit VMOVPs */ + list_for_each_entry(hw_its, &host_its_list, entry) + { + uint64_t cmd[4]; + + cmd[0] =3D GITS_CMD_VMOVP | ((uint64_t)vmovp_seq_num << 32); + cmd[1] =3D its_list_map | ((uint64_t)vpeid << 32); + cmd[2] =3D encode_rdbase(hw_its, vpe->col_idx, 0x0); + cmd[3] =3D 0x00; + + ret =3D its_send_command(hw_its, cmd); + if ( ret ) + { + spin_unlock(&vmovp_lock); + return ret; + } + } + + spin_unlock(&vmovp_lock); + + return 0; +} + static void __init its_vpe_teardown(struct its_vpe *vpe) { unsigned int order; @@ -687,6 +741,52 @@ static void its_make_vpe_non_resident(struct its_vpe *= vpe, unsigned int cpu) vpe->pending_last =3D val & GICR_VPENDBASER_PendingLast; } =20 +static int vpe_to_cpuid_lock(struct its_vpe *vpe, unsigned long *flags) +{ + spin_lock_irqsave(&vpe->vpe_lock, *flags); + return vpe->col_idx; +} + +static void vpe_to_cpuid_unlock(struct its_vpe *vpe, unsigned long *flags) +{ + spin_unlock_irqrestore(&vpe->vpe_lock, *flags); +} + +static int gicv4_vpe_set_affinity(struct vcpu *vcpu) +{ + struct its_vpe *vpe =3D vcpu->arch.vgic.its_vpe; + unsigned int from, to =3D vcpu->processor; + unsigned long flags; + int ret =3D 0; + + /* + * Changing affinity is mega expensive, so let's be as lazy as + * we can and only do it if we really have to. Also, if mapped + * into the proxy device, we need to move the doorbell interrupt + * to its new location. + * + * Another thing is that changing the affinity of a vPE affects + * *other interrupts* such as all the vLPIs that are routed to + * this vPE. This means that we must ensure nobody samples + * vpe->col_idx during the update, hence the lock below which + * must also be taken on any vLPI handling path that evaluates + * vpe->col_idx, such as reg-based vLPI invalidation. + */ + from =3D vpe_to_cpuid_lock(vpe, &flags); + if ( from =3D=3D to ) + goto out; + + vpe->col_idx =3D to; + + ret =3D its_send_cmd_vmovp(vpe); + if ( ret ) + goto out; + + out: + vpe_to_cpuid_unlock(vpe, &flags); + return ret; +} + void vgic_v4_load(struct vcpu *vcpu) { struct its_vpe *vpe =3D vcpu->arch.vgic.its_vpe; @@ -695,6 +795,11 @@ void vgic_v4_load(struct vcpu *vcpu) if ( vpe->resident ) return; =20 + /* + * Before making the VPE resident, make sure the redistributor + * corresponding to our current CPU expects us here + */ + WARN_ON(gicv4_vpe_set_affinity(vcpu)); its_make_vpe_resident(vpe, vcpu->processor); vpe->resident =3D true; } diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index 411beb81c8..f03a8fad47 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -43,6 +43,9 @@ #define GITS_CTLR_QUIESCENT BIT(31, UL) #define GITS_CTLR_ENABLE BIT(0, UL) =20 +#define GITS_CTLR_ITS_NUMBER_SHIFT 4 +#define GITS_CTLR_ITS_NUMBER (0xfUL << GITS_CTLR_ITS_NUMBER_SHI= FT) + #define GITS_TYPER_PTA BIT(19, UL) #define GITS_TYPER_DEVIDS_SHIFT 13 #define GITS_TYPER_DEVIDS_MASK (0x1fUL << GITS_TYPER_DEVIDS_SHIFT) @@ -60,6 +63,8 @@ GITS_TYPER_ITT_SIZE_SHIFT= ) + 1) #define GITS_TYPER_PHYSICAL (1U << 0) =20 +#define GITS_TYPER_VLPIS (1UL << 1) +#define GITS_TYPER_VMOVP (1UL << 37) #define GITS_BASER_INDIRECT BIT(62, UL) #define GITS_BASER_INNER_CACHEABILITY_SHIFT 59 #define GITS_BASER_TYPE_SHIFT 56 @@ -118,6 +123,12 @@ /* We allocate LPIs on the hosts in chunks of 32 to reduce handling overhe= ad. */ #define LPI_BLOCK 32U =20 +/* + * Maximum number of ITSs when GITS_TYPER.VMOVP =3D=3D 0, using the + * ITSList mechanism to perform inter-ITS synchronization. + */ +#define GICv4_ITS_LIST_MAX 16 + extern unsigned int nvpeid; /* The maximum number of VPEID bits supported by VLPI commands */ #define ITS_MAX_VPEID_BITS nvpeid @@ -214,6 +225,7 @@ struct __lpi_data { extern struct __lpi_data lpi_data; =20 extern struct list_head host_its_list; +extern unsigned long its_list_map; =20 int its_send_cmd_discard(struct host_its *its, struct its_device *dev, uint32_t eventid); --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049124; cv=pass; d=zohomail.com; s=zohoarc; b=NfbAnWnLVDn/jikEK6VYDhcF4fX05zihhCgHCwg/MOTJSjoWTIz+ou4nQu8M0iQKn+2qyOCrJT6RVm1SsFC1qKmqys00st9NppVFlZwIE+X+84R/e/8dBKJn6A4Ibmg+Bed9E3N4YS8keD4mGUYXDUumsFwgds/2Ku5bnaBGSP8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049124; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wp+CiOFmbPXN19I1ClyhnDa8y/Of5ZIcvETuWgCaDEY=; b=KAOIv9XBeF5zJ2ADHsGULAKfv9Vyl2/AMaXkHK9A57gKB3N5xtjIpUlmCXzVfkZ2LSUzaOJMOgNK+XK5z+PHVtGc8j8t8VkEvS88RIpRwrHjKZB9EQfjRBGWnMjz/y9ai0RHoJODnb1tP7vfBgSYRvfFJ5q4Idurwxbu5CnDAsg= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049124316573.0340263358393; Mon, 2 Feb 2026 08:18:44 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218929.1527826 (Exim 4.92) (envelope-from ) id 1vmwd8-0001ca-8A; Mon, 02 Feb 2026 16:18:26 +0000 Received: by outflank-mailman (output) from mailman id 1218929.1527826; Mon, 02 Feb 2026 16:18:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwd8-0001cP-50; Mon, 02 Feb 2026 16:18:26 +0000 Received: by outflank-mailman (input) for mailman id 1218929; Mon, 02 Feb 2026 16:18:24 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZj-0000fY-38 for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:55 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4bcbe92b-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:48 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:45 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:45 +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" X-Inumbo-ID: 4bcbe92b-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hYfIWbtMrjg2nYLxoQya/k3TwKtY9LznINQ98O+8qzcfGO7uJ/oE8tPydCjXS8tfcikReYytSyZHAEG7a1NgFL6DIaY0kS7d0vAiVMH8s5DhvYjQF2UZCbCkYRFiR/ek2fwZBBO8dq3yVG3D0htnPP4YFB+HeJe6S7jKZXq+Fn0i+K6GYvS8L/7IDL3MDU2NBRyFc4QqD71/McQ5iD3ixb1Agxae+jlodYmSzCQpYCmlVVw0dGxP3/uWaQzdI2YJKcR/KkTzZEr628kOQ3ANxSjTUPUdneKErY91kIJbjIU7Mjb7IVCoqK6aub0UnIAyhRHEnjKmhrzXB+eXU2As/A== 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=wp+CiOFmbPXN19I1ClyhnDa8y/Of5ZIcvETuWgCaDEY=; b=H5E4zZiSC3+vfz3NsPmS6O/KNB1jvFUhe5TF63dLqqEy4fM+DaaUwzlJCf92ubkF1SZXZgBOzTn539VDdnxhY7QWXwaAUgw+qVExe5KIHLDHWEyhWXoWSAQeUHZEthufjC4jE9JA4F6reNcGH1LAPJcv1JcB6Q00cJ3mLIU6rKZM1QXlpORp5bobqsniRhfK4sO2XC26EnYEtnBbTcFXXr2nfGIv9+1NarlSnOW6WaXUPQkwE9uyjX07x3KqMjr502iw2VYACA3sk7eVd3+1ATLIs0f9warRYc8/GThF2KYzSbbyAaZorzSZ3JUcm38+34wPnWFgU9oOOTfLhBM1SA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wp+CiOFmbPXN19I1ClyhnDa8y/Of5ZIcvETuWgCaDEY=; b=SPnLvz5kaKhvqzjfEui4UCRpSq/tKzW+uHpqLS08Fw7tBs6wX1B2Igil3fyBfx3FOJ1GAAmatHEReMj4dEA2LY9D6UGhLif+xM/RQuNM0KVU9fVmYLM10EA76mrwyhAG2lriv0XILXDlLMMwlQ4xPui0HMBfPI8r4akwitWoWf3kciE4QbIq2avUFhGkTIwdqvjgCXwU7O4QAqNH0PMyfBzu8PsaE7bH/ydI4XXfeMOhMStbeDdGLk9BkZmvGi/QFBIaKqdiKie6NrCQIXHrUDZn2U2XVo+s1PjsbBhH1EXQRPNGLa08RijWwdoVRCqopeMV6s1esghSpnQK94cZeA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 15/19] arm: Add gicv4 to domain creation Thread-Topic: [RFC PATCH 15/19] arm: Add gicv4 to domain creation Thread-Index: AQHclF8Knr0LoFPnik6/4BE0GszmIw== Date: Mon, 2 Feb 2026 16:14:43 +0000 Message-ID: <61859ae57032ad2da9c0eec5fb30dbe4ecc8c0df.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: 1ae26ef1-ac91-4f86-2655-08de62762e45 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?qYP+3cKy+VRgEU9LlSvKZuWwgpqt44IZZ/pSxcu9g+0fcZerPOxA52+6RT?= =?iso-8859-1?Q?90bXOEr3b+0GPGODLonIHuUs+s9UnFqXSpSquZYhfcOmO9+Hr57gYRVwUn?= =?iso-8859-1?Q?mf9iZBLv+j2nix3XsmM9AyFAXd1XWsWshfoQrdzY2GIw2vMxITR7AeGZnq?= =?iso-8859-1?Q?JuM56JAvk21oae5oJHjkMbnsokjU/wDTm8e2u/Kaib4AdK40s7lmgHhhHd?= =?iso-8859-1?Q?4HE0xqUDW0z0Bn0VwPP5dixvh1xHTVEm3LCBIhNbkRQGriQQ8g//3Dwhok?= =?iso-8859-1?Q?+R/D813NUUxheVHcAER9UfmYDAyHFaxXF6cXsj7i/4+OEsJxpbXLAyPp3r?= =?iso-8859-1?Q?hOVWfiYaWEAts0yx/YydI5bKXKqFHu85GydRjQKvbqttzA9/XktawHkboT?= =?iso-8859-1?Q?4sEW/0AUakzhtLxyt+BH7Mh0XueYFyYVaDpKQzelUUVUYcL/3rP+QQ2VGE?= =?iso-8859-1?Q?A0RpQ4zPvlcsRgXK/RAqWc7izF+c6kWdrQ64spBFzqWabcB+6adk2rif4P?= =?iso-8859-1?Q?aYsoF3IJ2rG/7bpQlqr9e2DpjlnKpN+t0amsWpZUtafImVcVoyUyKP7bkv?= =?iso-8859-1?Q?aeXKwZlWV73NFj2+0VPJ2f7tNELFOCKuLtMZoV52W51GopIdxTbzZ+W4cH?= =?iso-8859-1?Q?g0+Y3YWlpl237h1/TTOyVADt4R0NldEIl6ILWr4n47bXZJZGt36j1+X+82?= =?iso-8859-1?Q?DyFZ5odlwtDIhPDpPNrKnunVMZ5wWSmCHcTWTQ41mIGVhnvSKQ0cAVSN8v?= =?iso-8859-1?Q?gjX9v/W+0ryIxcOAu5c9DqesRc8PVI2P5Zqm2Yx94YmwEXB7s9cp2TR52B?= =?iso-8859-1?Q?WXGBwA5dE40bgpgqs0kC+j031QOzWIXc6Zv+5YxCmtTNLfuK8yns9INm+Z?= =?iso-8859-1?Q?H8YSNSDGwMxgh87smR7AkmltLhqdfQ/00fCMxlrhC6z7Kl3gCoDtwTGEKi?= =?iso-8859-1?Q?z70L7/NZ2kCt0u47dGQH43acPKf3At6aMvuw0mbE1bwKZEi9NMHn33Ksqe?= =?iso-8859-1?Q?W4l2ReY6YVgpZV4FjA9H8rrYKifHwrreLh9ol/2m7SRb2IUrIZNVbINoaV?= =?iso-8859-1?Q?728Zji2OQhLO1uEYSQwH834w3JKKkBN9taOfW7ZtHuNKrbNcKT36KIl0vx?= =?iso-8859-1?Q?OLGhtUgEb+MexDYqi59uykAenHFAbvwQCsNHNOp8aZ5GRpqYNitukoNz7v?= =?iso-8859-1?Q?SJ1gbm/cujNide2MtTVhpwgDmNFpD7Lmo5VvVd5yD6wNuK91DPSXQRzNsH?= =?iso-8859-1?Q?FV5hfiqvvAeCj4SjUrRhfuHGBT2yQBgwqYrNeIto5/YRT3IW4TQTPrmc+o?= =?iso-8859-1?Q?3TGlFiC7oy1Vw55eSufgFdkfQwYoIG8152/sPba09mk/D+66U2d7GDf5UU?= =?iso-8859-1?Q?Rk4ZaJvzgwJFfNn9n3Qw4fO4GxaKJbAQ1B48OqnkRtsBD2tm+FsjKP7arG?= =?iso-8859-1?Q?mO+Wbys8HN/xoigopCVNk4dfv0SHOSkqWUBgxLiG0UqbdBeyDIgM74kISE?= =?iso-8859-1?Q?cvQF1eEmlRQOIpN86akts8EtaCPJg0tBIQZfPA0P6SAPKPx0cbA6GTRF/x?= =?iso-8859-1?Q?+Newa4xioI1Vjj+8rM3MxySnMoPiGQvB6u9hMrmdAbDgbGU1rlqF9ZFAPn?= =?iso-8859-1?Q?SSVOmfMQda2MhlRKjOFlPfS4bGLT5ne7z3dLsRf8TBN8Ocog4SgBbYA2fg?= =?iso-8859-1?Q?7mr5YxYnUK0lsryeKxU=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?PoJeGQ6bZwaUyq0tEO2W6AH0sJvRlUUYd7uqjEgJ+/A05I4ZicMKaW6tlj?= =?iso-8859-1?Q?Bgs1Gkj23MusUEL6lOPorKRc9gZEemujBPFVSDHXl1NLXOqwk088CcQrD2?= =?iso-8859-1?Q?QNpqnN8ViPl0a7DBKMVKcuj730rOoEASzTsZP5Akh+Up/MhM87cIWsfhb2?= =?iso-8859-1?Q?kBi3yaN3NwHuMZcbX7BXXXqnUROlvDvFQpFQ5iLrwskfuhUsYLcv4A+oEV?= =?iso-8859-1?Q?cvLsg0JGyIGhXH4KX5vgW/6YZj6MQThcsSLD9XRuy9mhBp10xw3p+gAkq9?= =?iso-8859-1?Q?yc1HygZVhR8dWVV2f+D/kTcxZTqxfoshZzTweXut7TNgbKQaj5+ArftEpT?= =?iso-8859-1?Q?U/eDzrerZ55eicWdph4jpYd+oILF/KIsD9frktple6thXMhK9w2c/e4SP7?= =?iso-8859-1?Q?+I5QWCNXI6JIBtx/udj724Usu5r+bapGizLoFqcwOQRrsltuXWa6d7NdPJ?= =?iso-8859-1?Q?5Zm1pQM9/VfqC9t1oF7Jf4eU2VlAdtnkUbqrvoFSDp2VMPZKMWmVvAF1au?= =?iso-8859-1?Q?QJmoeCQkbaWP3iwazn2dDJmWsupRgVaYjCTUrMMdJ3iU1ZdjSvGRRmSNvq?= =?iso-8859-1?Q?MuNjIZ9jktn3+eCII6n/F/v7J9w/c8SZEytj9srf64vZGSkwGL80CroKtb?= =?iso-8859-1?Q?wMMdwRZgzTVHAJ+CB2GchPetzNo6TPkEho5vg5qvrBcqKIEZdTyeY9tNMr?= =?iso-8859-1?Q?bOm87xw8/P51nfOdfwmJqIP6i02ourSgOPcnzneODlW1ZQ2ymLDbc8XaaD?= =?iso-8859-1?Q?eImYc0L3V14yDfnogVG0SguCh6Y6Du6fTVa/BZkwuNDlBnoAepjMtZxf7A?= =?iso-8859-1?Q?w0IOchvdVMoq/KXlbO00A/C0UvxiOJu3klUfszOWYXWe2P+YBVeCBKn2mU?= =?iso-8859-1?Q?W7K48v7bRm46IN29jcRe8rqngGAvzBCNPKNJODgPjvpl28st7b7agjAHZZ?= =?iso-8859-1?Q?tQ3davKORhpHDNoEho1GjxnQ6lZwZWWEjVsOamscjShxQMAG/9tMEYXfRS?= =?iso-8859-1?Q?DdA0MrYax+PB9yLRzmoaKMRQIo9h5amTQtl1KLWnowDjL+7Z6SSgDHS5wl?= =?iso-8859-1?Q?BMPBd7UiwT5ZP8pB6kNR5H3sFxWlVurp9pgcdfWDif76/hWDuAIXP1vwO5?= =?iso-8859-1?Q?fu95KZcscW5985mat1FXSPrcPb8WkS9RoT/RYRTaHMMWSqhWb3lQ5W0Iys?= =?iso-8859-1?Q?Q6+dDMzn5lK3bzwDMyaQaZ5RdVjetqCyaN3viGyM7dqW1hfR8mkRMIdD5b?= =?iso-8859-1?Q?DFp8OoyBoWI3sMhX3IM4JH8nFQ40ELwKU4b79NWrkbDWqP7YyVJCn1do3i?= =?iso-8859-1?Q?tyTC960vBQQY+tu7xgBHYopvy+93pVGc7lFzJeMOqS3Os9Wgo3Ow5zwK9Z?= =?iso-8859-1?Q?OAZ2Wh6uz/zT4nPL0g1bqtAAgSTf464Zvmw685TcSiGg1XRZrLVS3tw2BT?= =?iso-8859-1?Q?EmLn5y5WXGp1kl6cM9w5HRQmR76YAxv8kNEvQ8eLsA1tkCLbKq5CeEgms9?= =?iso-8859-1?Q?OCl65PZPVb003H3Wpa7b0TUcEWkGzXl4gUsaYzOjgHpV2kKwgndiIeyOn0?= =?iso-8859-1?Q?FMuNrJGsETPOyprYGCTTpqgaNtmlhRwbWvsi2W83SS5SdAodk/fLd0d4Yt?= =?iso-8859-1?Q?l4vZwvrNjKjqO11UybWBlJKRHBqm1NZbHUFcfUmRKiQNjrva6j1FgAQRht?= =?iso-8859-1?Q?Xh+1sMbMIb0xl7SLOoo5KcSSVX3M7xdp+cwcaCSzOaPPap64epxCjMZ3DD?= =?iso-8859-1?Q?8er/bxE6f4e447f+Zl3/E7nEWxltQIFVkSAHQTciAsxPEWQdtb4eDQbyUC?= =?iso-8859-1?Q?y0KTDkkqaPLWCIKWpwzU3g/v1rHOao4=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ae26ef1-ac91-4f86-2655-08de62762e45 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:43.5062 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Fp74PmtN5Cug13gXiPBl68BEakKfHcso4FZZLPdRqR/uGzI1E2UjMTd60UvqdGXoveRp6HSZeunJ65CV4aUkIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049126334154100 Content-Type: text/plain; charset="utf-8" Allow creating domains with GIC_V4 version. Signed-off-by: Mykyta Poturai --- xen/arch/arm/dom0less-build.c | 1 + xen/arch/arm/domain.c | 16 ++++++++++++++++ xen/arch/arm/vgic.c | 2 ++ xen/include/public/arch-arm.h | 2 ++ 4 files changed, 21 insertions(+) diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c index 4181c10538..3c4b074b05 100644 --- a/xen/arch/arm/dom0less-build.c +++ b/xen/arch/arm/dom0less-build.c @@ -157,6 +157,7 @@ int __init make_intc_domU_node(struct kernel_info *kinf= o) { #ifdef CONFIG_GICV3 case GIC_V3: + case GIC_V4: return make_gicv3_domU_node(kinfo); #endif #ifdef CONFIG_VGICV2 diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 507df807ed..864e5511c9 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -604,6 +604,14 @@ int arch_sanitise_domain_config(struct xen_domctl_crea= tedomain *config) config->arch.gic_version =3D XEN_DOMCTL_CONFIG_GIC_V3; break; =20 + case GIC_V4: + config->arch.gic_version =3D XEN_DOMCTL_CONFIG_GIC_V4; + break; + + case GIC_V4_1: + config->arch.gic_version =3D XEN_DOMCTL_CONFIG_GIC_V4_1; + break; + default: ASSERT_UNREACHABLE(); return -EINVAL; @@ -679,6 +687,14 @@ int arch_domain_create(struct domain *d, d->arch.vgic.version =3D GIC_V3; break; =20 + case XEN_DOMCTL_CONFIG_GIC_V4: + d->arch.vgic.version =3D GIC_V4; + break; + + case XEN_DOMCTL_CONFIG_GIC_V4_1: + d->arch.vgic.version =3D GIC_V4_1; + break; + default: BUG(); } diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index 6baf870ad5..e5752faeb7 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -153,6 +153,7 @@ int domain_vgic_register(struct domain *d, unsigned int= *mmio_count) { #ifdef CONFIG_GICV3 case GIC_V3: + case GIC_V4: if ( vgic_v3_init(d, mmio_count) ) return -ENODEV; break; @@ -929,6 +930,7 @@ unsigned int vgic_max_vcpus(unsigned int domctl_vgic_ve= rsion) =20 #ifdef CONFIG_GICV3 case XEN_DOMCTL_CONFIG_GIC_V3: + case XEN_DOMCTL_CONFIG_GIC_V4: return 4096; #endif =20 diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h index 96365e5603..12690cf3ac 100644 --- a/xen/include/public/arch-arm.h +++ b/xen/include/public/arch-arm.h @@ -322,6 +322,8 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); #define XEN_DOMCTL_CONFIG_GIC_NATIVE 0 #define XEN_DOMCTL_CONFIG_GIC_V2 1 #define XEN_DOMCTL_CONFIG_GIC_V3 2 +#define XEN_DOMCTL_CONFIG_GIC_V4 3 +#define XEN_DOMCTL_CONFIG_GIC_V4_1 4 =20 #define XEN_DOMCTL_CONFIG_TEE_NONE 0 #define XEN_DOMCTL_CONFIG_TEE_OPTEE 1 --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049093; cv=pass; d=zohomail.com; s=zohoarc; b=aSP9BRVZ48ZAgwpIuLbo3N18SCrY9S+w82YM5hHn2e+48NA9xbaOCfD5EGrpnXV/vjaRb/c36NpWKvwbBHv1Muw/297kLbL5932EL4Llcokuu4MD067UeGe7N0XoG6TcP7RDlcC2BQ0hpT9BcXelFSa7Uw7fiCEI3h7jFLXl0yc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049093; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xpG0vAG8e6xad23pmIjhAdmaEHtng9kYL4aNQEOXKOI=; b=PU8O9La2rnYfumWpKkIN3dShrl41Ptcas+skHxXGkOna1gQKLZY9W4mYr3qVUYYsvHoUKjjg2IBYmdoR9p6c3hrpAUhcYzwLQG2ObJxm2DKnreYKWPOg2pYpQbSz2wIwcyCvp3QNqRVu+K/NM6VY+eLXq5IWiVYLmrXZqVOnoPc= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049093820787.518188963037; Mon, 2 Feb 2026 08:18:13 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218893.1527781 (Exim 4.92) (envelope-from ) id 1vmwcc-0007L1-RV; Mon, 02 Feb 2026 16:17:54 +0000 Received: by outflank-mailman (output) from mailman id 1218893.1527781; Mon, 02 Feb 2026 16:17:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcc-0007KT-Mh; Mon, 02 Feb 2026 16:17:54 +0000 Received: by outflank-mailman (input) for mailman id 1218893; Mon, 02 Feb 2026 16:17:53 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZk-0000fY-3P for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:56 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4c1ce79a-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:49 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:45 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:45 +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" X-Inumbo-ID: 4c1ce79a-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PZFwqLP8jnAX3vL533jFRxDiixPUBW2I/QRHrFwYd9qqpzalhNpjeYhXYGWrcGmuJUWz+toKCq/mbF2qkz0n9ITyIrZadbY4OTvmG/tNcEu2DQQFgnux7rmSp9yT4S/BOk9HSk8b/Z8ZCwI0DkNLfmTz4OJ5M2+QeF2CANSqZ0BiFw4MZSTAiaEw/lRShgP5RTHym8sfhznHZ3YvkDrzKTdiwMK1dF+JTiU4GwnmBxlawBPH43JwNJaSOd4R/885eh53byFsLjBtObUN4ZKzNEFI6qBwnMgdQDPFGfwlKW8Iugdg4HMCE2EfSUU22xatwPKRxJsgpNtxCsz2dMFPmg== 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=xpG0vAG8e6xad23pmIjhAdmaEHtng9kYL4aNQEOXKOI=; b=BZVoNtoyCYEZ2o1QinhknwRcqYO5DVx1RuSnTrz8AU53ZxTalm7xpwa9O9qTwI0GO9Uj4U0cPGTqQeggL8P2MH8wtegFkfwdUtsMgoL3gLprdJbvc92z6sWCFNG8GcmOAjL0ff5WA1cKy6F0MCPA2c8XwulLqsnKHEZ65yYTg6lQyoB7onRbq0IXk5a+QbOwUqZ9vmJnf4D3J/z5KI9/MHrJ9MtmVyKcaYLTpaSFwuwNIDOwLqsnmkIMsaRDmiGesVGMbByfUAmHXaJtkq874CcN6SJtzYaoNrviHzOmcy7CWNsHSHdkYb38sf5h4gP2vkB5HUbDPYC3cfihJqwemA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xpG0vAG8e6xad23pmIjhAdmaEHtng9kYL4aNQEOXKOI=; b=AfMhSrlBAQv8JZjMCJwSItayuXsdKweoPAMWc7yT6VlTTeZmxzBX8AApmxB0i5IhyoWRzhbfDTS/P6Gm0YOXtdpcSQX7Ow66tDT5Py+wi19e0M/jdrHKcPAnrySX8+mK4xDxXFmrvI5Axms1qTzmhCNT3A3owwIN0plV+GzrzBxPWBeNxD7rG/UENMR+5mHk03ekRRzE3S/E5uF+psga64VMRxwLf4LVR9LPwgysDxd5UF7BybFIr3rrVu6S14LpH5ju90Cj6cVohBY4GorOlycqhWqZXuNLX+crrxWYkZgyyWlO6F390WHJlpMbxIS3TORtUYK4e9rSFe8ZP3lgcQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 16/19] arm/gic: Fix LR group handling for GICv4 Thread-Topic: [RFC PATCH 16/19] arm/gic: Fix LR group handling for GICv4 Thread-Index: AQHclF8K603U0XXQOEuJhQnegCFT+Q== Date: Mon, 2 Feb 2026 16:14:43 +0000 Message-ID: <13bab832bed00832d7597105a33ab2f215e626ce.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: 38f49fc7-6f95-4cff-ec65-08de62762e6d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?tNoVKT2OXWSdZGERcPGdG89siIzahz+RyAb6Z9nMupZmYJ3FQ1uGUTq1IK?= =?iso-8859-1?Q?u6ecb2X8GJqQKas4TcX1Z80oluwMI6anW1K0iX4pCW6cqndictP7/bmdTB?= =?iso-8859-1?Q?2wgluiK2D3gptnbTQbqDiV9A8cLuzJ/v5+O5bbV8/tOwKbCNapuGAuHILb?= =?iso-8859-1?Q?/1qrnGv5pJ0/vwGRXGHlmQ6oOlRyv5VZCMW5OCztLi/1EWbgmtAMh5c9Gg?= =?iso-8859-1?Q?annsXz7zcpZ3lJxC1m2LRmGkcGw6onJIBRGv/KzgXXtnERAK1SU9YLJbGA?= =?iso-8859-1?Q?Mg2LWih5239ejAVtquYopzXUQuMSMjAJgFSqGQjH5fkM0nLKAeqORP/pnJ?= =?iso-8859-1?Q?TJQecOPJhxcMTwcGhZPY8WpwRa0AX9eFZ9azaqSOjy5YjL5/rkPtYRhcQI?= =?iso-8859-1?Q?CvIod9RT/QL/8kkOu3KQ3hCBI+jStzmliHLZ63sTlkh8InvjUQixKhIk+k?= =?iso-8859-1?Q?WBGMBmz/gRsvv+/1KwX98aLZlz7B0nXA4L0juD2Uz/SUIwSL+DOQroZCCS?= =?iso-8859-1?Q?d7pHviSSn/qpp0GnF5PWWL+eniCWMzMaP+XlJRh3sJYi/NZJddpW36aQ7A?= =?iso-8859-1?Q?l54Oi9tfPnYppMLOgbeNfZCnMgxvdkvkj0lZKJS2uHsG0Hvn9B2UVfy8b0?= =?iso-8859-1?Q?quThzHpzZNdfunxAI2+uUVvpil7uWbcWI7b37UEHLibiUY/qvvFuZO5uFE?= =?iso-8859-1?Q?723Ew3A0SOc6jH5vlo5rF1/aBZaBjxIf4o1qxUn9JDE+0j/jqSTovuRt6L?= =?iso-8859-1?Q?kDjRJGDdR1kFcuX1PB6hWWXYK/fBrKiDtJZomYF42n8cPRCwEew6XYPWSR?= =?iso-8859-1?Q?SSgLXr15JTzt/HQprF+oX83EyYQUS+m6wGSHgC7NEWVlQ8Ury2MzjVQ9tM?= =?iso-8859-1?Q?D9HLryiFZlbHiVxylUUkXKqxD0/mfcvlGFAkoZCSGktP/YIujnOQNEBTrt?= =?iso-8859-1?Q?d8JD3B0g7IleTo0txAHwGL6njHO0evZa9zSzvghOx9nBKeZN42cc3X1+I0?= =?iso-8859-1?Q?j9Gvso9TczM/u077E1nmauEWd7nDAPCg5zu8GX2EsxiqQj+aM+PBv9cl1+?= =?iso-8859-1?Q?D4Vk+w7uLsW6/W8a9JsLthH7VNSzqi+21MQFBtXfo7TaVcRHqml6fsXQpL?= =?iso-8859-1?Q?jHUoDmNGI9Eel2q+s3cYAdleO+PpAMn5eq3OZHCZUrZn5YHhLm1C9OsZFD?= =?iso-8859-1?Q?vKC2yqLcQtUP1tb8SonEZKT89VnYyRS/VMw9cRbBR2lZ7k6PLpanTfPOpc?= =?iso-8859-1?Q?rI+lo+1vwUxSu+/XcYgRdVW/9AWByHdwFWMWMQefob+fmqgZFp47wDAIag?= =?iso-8859-1?Q?V3NnG/0B1KNcArA1IARJJ9VVRczhShcqqwtRJf5X3XnM+vWFxG3o+N1SB0?= =?iso-8859-1?Q?YK4htT5m4CaandOg2Mv6C9e8pFiivTNiQ5/fBoQcaGMJ/caglIYQ7p+siJ?= =?iso-8859-1?Q?N+u92CMPGslx3t5DMnlmK7C2GqjsQYnoRcWpS3McWHSnW0Guyrw9dsQTdy?= =?iso-8859-1?Q?jKjuQVkEteCeeuBDW0i+hWcH86MPrzuCI1XntImn7hfPlF48JY1KLjCjSf?= =?iso-8859-1?Q?c1w0JYB5vEa4x+CsChGY69umXjPHeYSBE6gBAvFi3ZB6wlb62Nvbl3J1Xu?= =?iso-8859-1?Q?GTWcD/+eKDssfDryXKkKKqnjdYt9CnFoWwHXpCgL8BqbAmdZmFBDO8PmGa?= =?iso-8859-1?Q?VX7AehcI1RQ1MddsG2E=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?UMOEIw0hkmLOTd3dPO2tSa+TMhUEdtTUCnsYqX4m4CItjd+ql5pLFaE47W?= =?iso-8859-1?Q?maHTfKeZJ/EJ0UgVGyFdF8Aiclck2z8DyXrxUCRZw+Sf+SraPOudWf6PtG?= =?iso-8859-1?Q?1BMzR5fCj9k/FnXOrtJoJCIsjBKWC352Vs9jDCfBTdn2l/vIP4e/KLpz7H?= =?iso-8859-1?Q?oBCI3Z7vsDDyApohUA8Xrjs6Z42CepJlxzJIVIRmoliQtabfvx9OkVi+Od?= =?iso-8859-1?Q?QhMVQU6XUAE26SVQSX358h39MLJuhw9uJ9vJx+2mbU+VJ+l4D1dE79x5Nu?= =?iso-8859-1?Q?U2r2jgOqcMJ65i3mAVireyF3HWeyjNddtzdyQr7/0VZi1aXlCTQPecD3t8?= =?iso-8859-1?Q?wIS6WV7V55J2n2CFLrD+eZ4eyr9TVLY8n0kvqPgQhR01RtUfJwT69cYFP9?= =?iso-8859-1?Q?QvesR3HySRcQBngddARujvqRU84+fgTyv//GfYZpVz1alEghjWBrhqmQMB?= =?iso-8859-1?Q?+shjayZGrTPEpIB9W6ZXAh6LM6gZNId0u4eGf5az9p47L61ZJ14ZTTxb1N?= =?iso-8859-1?Q?HdLiLsT2NAlS789/fowVW1ynWUaju+vJ5eErwfFPgpQM+j50mAzxotU2iq?= =?iso-8859-1?Q?/3SsC5AnE63gEmdxsw2xQwvq+qUq+Cs+Jc63+AnmfOPpQCXJXsoB+aTxgZ?= =?iso-8859-1?Q?LYAJrIPQHYkZKeVRKXoV6ykQONgOsOiMSFyFoJvlb4FxOz7diIr2nSgF1T?= =?iso-8859-1?Q?4MmzxDdknM33xWiV/sftEmgmx8XqS695n7b6e//mG2GKCFyeJeT/r8xpxW?= =?iso-8859-1?Q?Frugx5H3JBy1VjhpXTmVCqpKOi0HPdnDBW0O+yaUNupPCJs8GfuU0e5G4p?= =?iso-8859-1?Q?nAtV7LoFE1zpVSGW27VDTGH/Mym3sMAvWVLg2w5NMxx9ZGsZlPIoGyvcIh?= =?iso-8859-1?Q?kB7XfLjdH9IWFJjWS1L2zFm+MjclE9X40EksWzVFP3H7CGRAIRWfyUCXFO?= =?iso-8859-1?Q?J6JduhD0Qb00P/7EMEfx4RwyE5L1JEAk3L0oJ3basN+VNjh0sfhcc1+boQ?= =?iso-8859-1?Q?IbhqRwTwiy0ixoIzCjGHphKavMuQfZ0J1YNZbZqL1mcmfbLSDYnmISN71p?= =?iso-8859-1?Q?5uCOMm69iheMpZmOUW53c7qDevexm4TTC7bXc/H9BIkK+LhNV4mD2nOhpR?= =?iso-8859-1?Q?FmG3Qo5eVi87UO9Fbg8qJ0k7xsSeeq/eHO8+L8ymQNsBSBBWNrC/+H5tne?= =?iso-8859-1?Q?5NtPYdeNLNZei8jaDJ6gpRxdTE78kmPEyDSGMWo5BMGAv3FI6SbBi2HVrs?= =?iso-8859-1?Q?cCHoZbRQyfMQefXylPlTvxe2qqmhujOr7LDzqxzU2FUrbP0pCchvusJsmc?= =?iso-8859-1?Q?oFIBqnjshq/IM0N7alMWuzLjbvhtwPB8qWtUAH2hPs7jyJSjSC60qYzxux?= =?iso-8859-1?Q?nMudJLunp5QpVmRr5+apwZ6z14wE+EkEOL3enImsFEkzg9uTLo8/bQDKg4?= =?iso-8859-1?Q?SzObseb/PzvACvOr+zjmJj6oj8+Jojz5k/nUFcUNxCXykPH8SXAbxiGAdw?= =?iso-8859-1?Q?tqs9/YDnlWv2jOy24thUtdelGwm4RadSVKi2OKou6ElPuRnXXXMMBJ6A1K?= =?iso-8859-1?Q?7KVLx24TGYKbMvU3KPJxLWFlz2ZUk8da9TElV92ofZRv/l19mn9Sob48mo?= =?iso-8859-1?Q?ejKLvJWKXg0WhkrWpqDS4Bys6pOYjTp4A4FtU0h/jdcRSAVchQB0NTHtmR?= =?iso-8859-1?Q?F/9uUFjJrzchP0f20zWsV417mydSshLkDSlF7fMW9r94eF3L+QaDOaA1n2?= =?iso-8859-1?Q?kShtLb0Y60HSfKXYOX/UBDlJTFpRCSF53i/Dml2vGwmqyBe+R3pOVUWoL9?= =?iso-8859-1?Q?SSoYMDO6euhnlw6sQrwF/45ZnxvgefE=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38f49fc7-6f95-4cff-ec65-08de62762e6d X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:43.9878 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: A236MjKGG2Pg/MIz8G3Z7Od71MBa6gWYClrUz5yOodliucWrSkFJrLtAAwKrN08z+eFPi2ebWt2TTKeI6zSnAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049095696158500 Content-Type: text/plain; charset="utf-8" Extend the check to mark interrupts as Group1 for all GIC versions >=3D 3 Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 07736179db..1cb3169b72 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -1366,10 +1366,10 @@ static void gicv3_update_lr(int lr, unsigned int vi= rq, uint8_t priority, val =3D (((uint64_t)state & 0x3) << ICH_LR_STATE_SHIFT); =20 /* - * When the guest is GICv3, all guest IRQs are Group 1, as Group0 - * would result in a FIQ in the guest, which it wouldn't expect + * When the guest is GICv3/GICv4/GICv4.1, all guest IRQs are Group 1, = as + * Group0 would result in a FIQ in the guest, which it wouldn't expect */ - if ( current->domain->arch.vgic.version =3D=3D GIC_V3 ) + if ( current->domain->arch.vgic.version >=3D GIC_V3 ) val |=3D ICH_LR_GRP1; =20 val |=3D (uint64_t)priority << ICH_LR_PRIORITY_SHIFT; @@ -1455,10 +1455,10 @@ static void gicv3_write_lr(int lr, const struct gic= _lr *lr_reg) } =20 /* - * When the guest is using vGICv3, all the IRQs are Group 1. Group 0 - * would result in a FIQ, which will not be expected by the guest OS. + * When the guest is using vGICv3/vGICv4/vGICv4.1, all the IRQs are Gr= oup 1. + * Group 0 would result in a FIQ, which will not be expected by the gu= est OS. */ - if ( vgic_version =3D=3D GIC_V3 ) + if ( vgic_version >=3D GIC_V3 ) lrv |=3D ICH_LR_GRP1; =20 gicv3_ich_write_lr(lr, lrv); --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049066; cv=pass; d=zohomail.com; s=zohoarc; b=mHHRtliH9VAxLkyxQXXvR3rD46a4ocvTlC3aOo+EnjLiTPoDoJjRG4oxNj4aIvQzBsfQiCd+I7TNCu3wffhlhyxNGLFjtzWZ2X9wdwwRxgcA3M6jxrlAVJQGoidfir23UtDS8m3zYeEyReQMjJYSipx738gsZ3g9s1+rGRrwCQ4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049066; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WXMYScmwV7lBGFpfQGDBr3UTcEynpVgBBIb7Xeh2ylc=; b=d7oM+5oMjT5VqeMNgNrXIqg6gBSK75svPQblKaihgniCOtTfzfXu7yodpPbe+D4IQ5BF7wnGHd2Nx7scM7otiVOaINBCZeXb3qJ0MaP8dONKNGkqn+oz2kzPjw5lSXPk8wfPLY7bviuN91Njxqp6VqyuOpbTViXx//mbLP8NiGo= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049066718146.1470784075574; Mon, 2 Feb 2026 08:17:46 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218867.1527747 (Exim 4.92) (envelope-from ) id 1vmwcB-00066G-M7; Mon, 02 Feb 2026 16:17:27 +0000 Received: by outflank-mailman (output) from mailman id 1218867.1527747; Mon, 02 Feb 2026 16:17:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcB-000669-He; Mon, 02 Feb 2026 16:17:27 +0000 Received: by outflank-mailman (input) for mailman id 1218867; Mon, 02 Feb 2026 16:17:26 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZn-0000fY-4N for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:14:59 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4c673a93-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:49 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:46 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:46 +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" X-Inumbo-ID: 4c673a93-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C55WifUFioBhzi7YiXT1GEsrsKjJ0uztQmXkuIELdYrKbT+qJ4Uc/sx4F7SHoMmepTHqvA3fuAPcxstxhyqrYKINQHEV7iDohWRuUptNX+dOdgBLjG2zY3mpz4KPZgp7YlrrsSDA8gDWmLYKwzT/vZwervwAp+4NxF8cM9GjDcN++eV1CJaBn+HEGYClM2nmlW14IJaoFojzRhSNSN39RkPdlECP+VQcuNVArMCTZabXCB+XY3WoOiYoaS56kfcFwf6sjTiBXx/v5XfgX97n846G9+EKaxyhxBKlxVy8SjGS0zJw2mqdFojweOG5dqKRUvTY+KooFjV/KjgOgHAkVg== 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=WXMYScmwV7lBGFpfQGDBr3UTcEynpVgBBIb7Xeh2ylc=; b=jz6rPNJuxV3RYh2U0DEGQKnd8pKLo7U05rlMdRzdPnuOtAAF0LTWCz7xMXF2l4yf5kCL6PK96PJ0la2RnX+/s2+B7LoTZNDN30V3WAUbHZDAQo+gwEO73WIqltZFzqYz4i2zTO0kV81ukogJetCxm7VfrTdbNw2aWw38zbgjUAQ7o9yQOPpcwstjSG+fG8gTq1c/24E7Unb1YKkxI2e+WU8k4oQZMScDV3FJGf3Rvlk5812vHIKo01rUImjbscWOp/yTYSRY6yAOAuzpBy4aCbHA19i+e1fi1D3s3AL5JVeK3z0ERTbJv1rsah2WHQYlN+ilnxWqwdsZfddd1kt3EA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WXMYScmwV7lBGFpfQGDBr3UTcEynpVgBBIb7Xeh2ylc=; b=n+ZXKlv+W2HmMsn1Hivw60wxQ4hixPmWJJxplMVd9icKZu8fZP8WufEd+7UUH2lDNVQW3aqNHtHlhtjm+Rubk4xgd5lb4eRQHMiNIMU0D0bsa7eGm6Wa0j+FNxHzO1q3nrNE44cRXXG0SGxg6Z8JTqBd1yTbl+q+/J6dzxqqvxyPKISbDvGRm6lOy22h/OsMnrVRyeGnlFKHhDKa8MAZ4KQHMsKW2GgL5T45lAaZXWF6+l5UsAjNrlPdT9XtUqgwiz7kbr4+hgeQGzccsLCYOah/FiQYDuzfX3G5m3GKWJxp0lViVuRMTI0/I8ULgJ2KZlWa5lkA3w1koKZ0low5lw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 17/19] arm/gicv4: Handle doorbells Thread-Topic: [RFC PATCH 17/19] arm/gicv4: Handle doorbells Thread-Index: AQHclF8LXR7D59Si0UektoGS0vWAtA== Date: Mon, 2 Feb 2026 16:14:44 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: 689dedab-d6a9-43c8-b3c0-08de62762e9a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|13003099007|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?Q0HwBAu6soaanqE9SFUhT/r7XG5lj2R70nHR+v+i0BhKPxmKfYisGZHBmV?= =?iso-8859-1?Q?Em7+1Z90fEe1TV9EO8BlWal29C3fo1uKOG9O3o2MsiXbdEodsGJ6bS5+Bx?= =?iso-8859-1?Q?+lPPBNUZLaD1Ea4ZWM96XWD1q9rCgr088dqNpE2+OdffmfsDQWdiWJaadg?= =?iso-8859-1?Q?TMzF61pS9zdtltuvjbULpe/n0TNqLoVebKlCLERtoRd90e9EvDdBTRpRiW?= =?iso-8859-1?Q?p2dCGjaVnpvIZNKhQduS5nwb2E7IcHSE0Og1snn+D2cQKv5mI+6j/Hs/PS?= =?iso-8859-1?Q?GbiY7Ndh46VmrxPiYGXUxbBjyBoyNEtIMAqCf0ofEml+otvtzrPgOEN6SC?= =?iso-8859-1?Q?WKpC06jNTJSNtqa0A10L3xRsFTW84KENNekvtt+7aOLIwAaX7OPjRhhC3W?= =?iso-8859-1?Q?VxxSDx7EXaHvlq/BKqnn2VMWMFnWkFZQ1yLhCqpW6ttQIZYjRXviqYi2Q4?= =?iso-8859-1?Q?0YeVmshR0crzWDWzZOkDqlMEWDpUefp1D4GLYRCi+j5n6fieQHfeS/rbhi?= =?iso-8859-1?Q?wxbY4EUcryyNLO+cHtag46svcZh+gpU5b0E/nVEtFoURqQFKe1U4AI88Ko?= =?iso-8859-1?Q?Iuv56KBlcQFLutD6nR0CZjD++lWOmzeEBRHXvk6d9nTzaCO2WtSWbZNMRr?= =?iso-8859-1?Q?mTCj2LL6EFK9GSWRlcJFcwnqvSarh/kYKAlUqJFxk5vXu50G29K6XW90oD?= =?iso-8859-1?Q?18M3pMy5TR+pFJo7w3i7mFfcfSavYadKfcWrf1uZ7UPf8ha1KtgrkRZ3mN?= =?iso-8859-1?Q?jc8wDJmoK9mV3bWMG7Is5foxxAvwxXDx6ZK0N79HHVaLJsRFOF269dgG8A?= =?iso-8859-1?Q?ka9KHQx9V2dpR+rsUct7m4yTp/c9cLzb9/+m/7O5kk8h+HYx4LL9mroqw7?= =?iso-8859-1?Q?WX2S4fHOogTVKIp3gGavHSKvVXCFvODziQEWQAY+UkQDqOBKll6bqzwxqa?= =?iso-8859-1?Q?odhmvLSg/Cb4I9zYhOPNns2qj1iJl2ybHDCryVohVK7M6n/i6VZ9esKh59?= =?iso-8859-1?Q?dasitGD4a0Xm9NqBzQOlgYKwt2XVr6HswC9bvU5WEB9rxj6sLf7qZ7FHCc?= =?iso-8859-1?Q?CDb0aiKlq5AttswrAO4zx20Sc2my+YC56JKOUEynY1Cl8+lwlRMPraU7JN?= =?iso-8859-1?Q?w1+wzi0MGjR2sA0EIhvXhtRGRUG89M/g+HdoJsGrKCK+5BYGjUEiwlKszP?= =?iso-8859-1?Q?eqAGDpRsjqsFI9B5wqoQggzG7KdqXTON5yhF3mRdYZtuCvlVnXhCwjaQIT?= =?iso-8859-1?Q?oaBk2EO5raMPOfK85FhPDnDIS0Rw5ViREbM9qGGEKqVoNR1tIpzFdx26j1?= =?iso-8859-1?Q?crMpOqI2x2BfcdPbc7PmOwP4ppvhdKPXIAsfpnqu7HBw/OPx7YjiK4ypmy?= =?iso-8859-1?Q?6O3fYZBrE3eX88bExKe1A1vOpj39mYA1F9PaEHTpiq9M0nVv3bZc3CuglM?= =?iso-8859-1?Q?C2yuTvjd2L6hBHtryLQHpZAZXeF3LflqxRkh2m96Decwh8Zn04UKwuwGqp?= =?iso-8859-1?Q?OWy5ywQBEuS6LE8FTSAj3gZ4CtjSSduj3K+sw+vVLHkB1nxU8xyCavdZXu?= =?iso-8859-1?Q?Zj5kwCc3lCyJlcBKpQ75tUdl6CGSDpZZY3rlxiYm0e5JbKjPTwFmgcnzi5?= =?iso-8859-1?Q?kuujgZw5QLt4Odm6HVzdNFRsO1En8/9KzYwTzhlRFIduZjNwBDT1sAxAkG?= =?iso-8859-1?Q?SBf10z161hHwJLNM9jY=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(13003099007)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?VBD6mLpSdM3NLqa65BSmwoc00Zaafaw75r+oTTgl7NpIzzJzAKByR7Kwff?= =?iso-8859-1?Q?RCEYxVYxZqzJtmnkysW/eVKuiCdXERViCBanCqnBND3qVekSSgz5FdxN+5?= =?iso-8859-1?Q?I/IK1dkKVd6dlJNrcFge+qUoi21kMpWoIOJ4UY2IC60DQ+j7OYNQriNhXX?= =?iso-8859-1?Q?4IY6nxHotM6NaQ7A6sTK4GesItSs2aZvP4wnIPCY0RjKSf7Nxd+6CnUpEP?= =?iso-8859-1?Q?xwFilG4PYMsprWxNxbc42imbqtcNSLvpo+GwCta6xYM0CjoPlbI19WbC3d?= =?iso-8859-1?Q?YhLipSnagfAOthf1WbPflxDSDfsPnws1tn7x5MpWDgqFMaHvkjX+gtxHhz?= =?iso-8859-1?Q?6BlLnj9Dmbr1wmPDs2SdkygAfEXez0kf1IKDF9ADBglm3xG1qBLcDP3qWj?= =?iso-8859-1?Q?idFZFZaV4CctMEi8nIXdooekW8mCgL90BHMGz/fRIZ3fgfazmIrZqlDqT3?= =?iso-8859-1?Q?exmG2YwnBpoK1DOQ1+exgmGXU2r7F470MBfR//7ZboDNV1SQ+mUDQm9pVF?= =?iso-8859-1?Q?2hCRyrCk87/b4iz1jLo1kCjgObQU6Z+vTCdyQewT6mxGBvTpZh/qz83D4O?= =?iso-8859-1?Q?zMoUdxYCkjo9XdnV3Qs1RxKOCnksZb1bA5isyavCeJlBZ7yXcPH7A5vQ0A?= =?iso-8859-1?Q?ziJNsxKCEby+82EHmIbLPZ58gZnMZDkpO7HhBkMvnNEe3ZKBSLnWvJB1mq?= =?iso-8859-1?Q?L1fcEaatFjdnOo1jzVv/O8JAkO7HPnMnjvrEVNbS0H/vJXf+A4yYE+5Ok7?= =?iso-8859-1?Q?14FASPmSEBQJIwy002u416zlgxlZe3kovPbZXwzXGgJ8HtEhI4yLBDIDZZ?= =?iso-8859-1?Q?/HwHNF7FHjUt40LmyFOjSGJzviCQV82kobYQv+CtL3J6swzp9oea+O4d7H?= =?iso-8859-1?Q?ah34WMgpA2pDSqPQjtCRESzw5gUiBg0M4PfKHeHme/gcClVpWpxgqUNlEa?= =?iso-8859-1?Q?nzhJNUEcT1yiuZ8CqSqTUlqYfxZF9BzNTTeVknLuDDPU57h32Z3SSd+WdK?= =?iso-8859-1?Q?FnLQBrzGewia0M8Qtga8HXtxhvG26GcEdM+7WG9DfgtvJ41+CgqLr9/4VU?= =?iso-8859-1?Q?u1LLy8T0mJ2b1cZOmarWdoNyYt4r+1E+/Gk5j7irNapRllVju5ufaMEONb?= =?iso-8859-1?Q?H49KHMvasWKbWTzgT8g28CqG8vaoLRKUUjWor7bFD+6scu2TQ7yPAxZinx?= =?iso-8859-1?Q?GsPQXRP3z3DHpZAVolS0shrnW2pBcmI9mjsNtIujJVIHOLaq8yj9Me2l+Y?= =?iso-8859-1?Q?e2PqwbHpcxeHzeyPe/5jls0NWHjC9mbK29Ylqb7RMFWTy3lgDvnqGn4yiX?= =?iso-8859-1?Q?BF6Rsd65tnPom14UjSPleVUCtKyD4hxCV1dKImP//XqtZJ94AzhpW/OBDw?= =?iso-8859-1?Q?jqZ8kFFo9cOB0khJ6vyu10cAm25oLGes9QZG3N67PbkSAnN+OOjCNXvOWb?= =?iso-8859-1?Q?SrWQFlYLdlBU9nnJyPn8sv+FCZolnx6fq5eaeBkdhGbe+OokNCbrPE5TGI?= =?iso-8859-1?Q?o1U8Q9RfrT8FEyoh7ZKE+uTeHjBd5Jr4+g56Yyut4SwBXPDNiq2vJSpDA3?= =?iso-8859-1?Q?WQHCc9lKgMPYRhSsZ2xrWyZKIUfxuKmhYKRte+29J9awbdZhs5BWqMvg83?= =?iso-8859-1?Q?cdK8GliK+xlYEv9rV+lndVYsV6fDvWstnWrrl+17vVmu7t6O5CB6F9bVGy?= =?iso-8859-1?Q?vmUk1bTiA58Zga+St99oCZBtyUMXJ2h+jln9M2XbM0X13xjuhq8upkgc9H?= =?iso-8859-1?Q?TwnwVFHc+5Q0Vzhh3Lxay/wee9vd+TmQpxcAHkvgc+tK+ta64stHsOPri0?= =?iso-8859-1?Q?wGrpvyvvXHtW07M/5VUg0Tl90wCqeho=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 689dedab-d6a9-43c8-b3c0-08de62762e9a X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:44.3048 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lb0TkOsaab7wIH+NuoEm5FC5ABMA44F0rWi0Sd6V41LsFYQb5vnirB6C3ZsjtEgf9RS6jcqApZhphSqrjhGaAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049069628154101 Content-Type: text/plain; charset="utf-8" When GIC wants to inject a virtual interrupt to a VCPU that is not currently scheduled, it sends a kick for a hypervisor to schedule it. To receive such kicks, we need to set up a doorbell interrupt for each VPE. Add changes necessary to allocate, mask/unmask and handle doorbell interrupts for each VPE. When a doorbell interrupt is received, set the pending_last flag for the corresponding VPE and kick it, so that the hypervisor schedules the VCPU to handle pending VLPIs. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 13 ++- xen/arch/arm/gic-v3-lpi.c | 69 ++++++++++---- xen/arch/arm/gic-v4-its.c | 127 ++++++++++++++++++++++++++ xen/arch/arm/include/asm/gic_v3_its.h | 6 +- xen/arch/arm/vgic-v3-its.c | 14 ++- 5 files changed, 203 insertions(+), 26 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index be840fbc8f..fa5c1eb6d1 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -1016,8 +1016,11 @@ int gicv3_its_map_guest_device(struct domain *d, =20 dev->guest_doorbell =3D guest_doorbell; dev->guest_devid =3D guest_devid; - dev->host_devid =3D host_devid; - dev->eventids =3D nr_events; + + #ifdef CONFIG_GICV4 + spin_lock_init(&dev->event_map.vlpi_lock); + dev->event_map.nr_lpis =3D nr_events; + #endif =20 rb_link_node(&dev->rbnode, parent, new); rb_insert_color(&dev->rbnode, &d->arch.vgic.its_devices); @@ -1142,7 +1145,8 @@ int gicv3_remove_guest_event(struct domain *d, paddr_= t vdoorbell_address, if ( host_lpi =3D=3D INVALID_LPI ) return -EINVAL; =20 - gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI); + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI, + false, INVALID_VCPU_ID); =20 return 0; } @@ -1169,7 +1173,8 @@ struct pending_irq *gicv3_assign_guest_event(struct d= omain *d, if ( !pirq ) return NULL; =20 - gicv3_lpi_update_host_entry(host_lpi, d->domain_id, virt_lpi); + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, virt_lpi, + false, INVALID_VCPU_ID); =20 return pirq; } diff --git a/xen/arch/arm/gic-v3-lpi.c b/xen/arch/arm/gic-v3-lpi.c index 3c2649b695..37f1aa1064 100644 --- a/xen/arch/arm/gic-v3-lpi.c +++ b/xen/arch/arm/gic-v3-lpi.c @@ -39,7 +39,7 @@ union host_lpi { struct { uint32_t virt_lpi; uint16_t dom_id; - uint16_t pad; + uint16_t db_vcpu_id; }; }; =20 @@ -161,24 +161,48 @@ void gicv3_do_LPI(unsigned int lpi) * ignore them, as they have no further state and no-one can expect * to see them if they have not been mapped. */ - if ( hlpi.virt_lpi =3D=3D INVALID_LPI ) + if ( hlpi.virt_lpi =3D=3D INVALID_LPI && hlpi.db_vcpu_id =3D=3D INVALI= D_VCPU_ID ) goto out; =20 d =3D rcu_lock_domain_by_id(hlpi.dom_id); if ( !d ) goto out; =20 - /* - * TODO: Investigate what to do here for potential interrupt storms. - * As we keep all host LPIs enabled, for disabling LPIs we would need - * to queue a ITS host command, which we avoid so far during a guest's - * runtime. Also re-enabling would trigger a host command upon the - * guest sending a command, which could be an attack vector for - * hogging the host command queue. - * See the thread around here for some background: - * https://lists.xen.org/archives/html/xen-devel/2016-12/msg00003.html - */ - vgic_vcpu_inject_lpi(d, hlpi.virt_lpi); + /* It is a doorbell interrupt. */ + if ( hlpi.db_vcpu_id !=3D INVALID_VCPU_ID ) + { +#ifdef CONFIG_GICV4 + struct vcpu *v =3D d->vcpu[hlpi.db_vcpu_id]; + + /* We got the message, no need to fire again */ + its_vpe_mask_db(v->arch.vgic.its_vpe); + + /* + * Update the pending_last flag that indicates that VLPIs are pend= ing. + * And the corresponding vcpu is also kicked into action. + */ + v->arch.vgic.its_vpe->pending_last =3D true; + + vcpu_kick(v); +#else + printk(XENLOG_WARNING + "Doorbell LPI is only suooprted on GICV4\n"); +#endif + } + else + { + /* + * TODO: Investigate what to do here for potential interrupt storm= s. + * As we keep all host LPIs enabled, for disabling LPIs we would n= eed + * to queue a ITS host command, which we avoid so far during a gue= st's + * runtime. Also re-enabling would trigger a host command upon the + * guest sending a command, which could be an attack vector for + * hogging the host command queue. + * See the thread around here for some background: + * https://lists.xen.org/archives/html/xen-devel/2016-12/msg00003.= html + */ + vgic_vcpu_inject_lpi(d, hlpi.virt_lpi); + } =20 rcu_unlock_domain(d); =20 @@ -187,7 +211,8 @@ out: } =20 void gicv3_lpi_update_host_entry(uint32_t host_lpi, int domain_id, - uint32_t virt_lpi) + uint32_t virt_lpi, bool is_db, + uint16_t db_vcpu_id) { union host_lpi *hlpip, hlpi; =20 @@ -197,8 +222,16 @@ void gicv3_lpi_update_host_entry(uint32_t host_lpi, in= t domain_id, =20 hlpip =3D &lpi_data.host_lpis[host_lpi / HOST_LPIS_PER_PAGE][host_lpi = % HOST_LPIS_PER_PAGE]; =20 - hlpi.virt_lpi =3D virt_lpi; - hlpi.dom_id =3D domain_id; + if ( !is_db ) + { + hlpi.virt_lpi =3D virt_lpi; + hlpi.dom_id =3D domain_id; + } + else + { + hlpi.dom_id =3D domain_id; + hlpi.db_vcpu_id =3D db_vcpu_id; + } =20 write_u64_atomic(&hlpip->data, hlpi.data); } @@ -595,6 +628,7 @@ int gicv3_allocate_host_lpi_block(struct domain *d, uin= t32_t *first_lpi) */ hlpi.virt_lpi =3D INVALID_LPI; hlpi.dom_id =3D d->domain_id; + hlpi.db_vcpu_id =3D INVALID_VCPU_ID; write_u64_atomic(&lpi_data.host_lpis[chunk][lpi_idx + i].data, hlpi.data); =20 @@ -602,7 +636,8 @@ int gicv3_allocate_host_lpi_block(struct domain *d, uin= t32_t *first_lpi) * Enable this host LPI, so we don't have to do this during the * guest's runtime. */ - lpi_data.lpi_property[lpi + i] |=3D LPI_PROP_ENABLED; + lpi_write_config(lpi_data.lpi_property, lpi + i + LPI_OFFSET, 0xff, + LPI_PROP_ENABLED); } =20 lpi_data.next_free_lpi =3D lpi + LPI_BLOCK; diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c index 175fda7acb..0462976b93 100644 --- a/xen/arch/arm/gic-v4-its.c +++ b/xen/arch/arm/gic-v4-its.c @@ -157,6 +157,9 @@ static int its_send_cmd_vmapp(struct host_its *its, str= uct its_vpe *vpe, cmd[3] =3D (vpt_addr & GENMASK(51, 16)) | ((HOST_LPIS_NRBITS - 1) & GENMASK(4, 0)); =20 + /* Default doorbell interrupt */ + cmd[1] |=3D (uint64_t)vpe->vpe_db_lpi; + out: ret =3D its_send_command(its, cmd); =20 @@ -296,6 +299,37 @@ static int its_send_cmd_vmovp(struct its_vpe *vpe) return 0; } =20 + +static void its_vpe_send_inv_db(struct its_vpe *vpe) +{ + // struct its_device *dev =3D vpe_proxy.dev; + // unsigned long flags; + + // spin_lock_irqsave(&vpe_proxy.lock, flags); + // gicv4_vpe_db_proxy_map_locked(vpe); + // its_send_cmd_inv(dev->hw_its, dev->host_devid, vpe->vpe_proxy_event= ); + // spin_unlock_irqrestore(&vpe_proxy.lock, flags); +} + +static void its_vpe_inv_db(struct its_vpe *vpe) +{ + its_vpe_send_inv_db(vpe); +} + +void its_vpe_mask_db(struct its_vpe *vpe) +{ + /* Only clear enable bit. */ + lpi_write_config(lpi_data.lpi_property, vpe->vpe_db_lpi, LPI_PROP_ENAB= LED, 0); + its_vpe_inv_db(vpe); +} + +static void its_vpe_unmask_db(struct its_vpe *vpe) +{ + /* Only set enable bit. */ + lpi_write_config(lpi_data.lpi_property, vpe->vpe_db_lpi, 0, LPI_PROP_E= NABLED); + its_vpe_inv_db(vpe); +} + static void __init its_vpe_teardown(struct its_vpe *vpe) { unsigned int order; @@ -309,6 +343,8 @@ static void __init its_vpe_teardown(struct its_vpe *vpe) int vgic_v4_its_vm_init(struct domain *d) { unsigned int nr_vcpus =3D d->max_vcpus; + unsigned int nr_db_lpis, nr_chunks, i =3D 0; + uint32_t *db_lpi_bases; int ret =3D -ENOMEM; =20 if ( !gicv3_its_host_has_its() ) @@ -326,9 +362,31 @@ int vgic_v4_its_vm_init(struct domain *d) d->arch.vgic.its_vm->vproptable =3D lpi_allocate_proptable(); if ( !d->arch.vgic.its_vm->vproptable ) goto fail_vprop; + /* Allocate a doorbell interrupt for each VPE. */ + nr_db_lpis =3D d->arch.vgic.its_vm->nr_vpes; + nr_chunks =3D DIV_ROUND_UP(nr_db_lpis, LPI_BLOCK); + db_lpi_bases =3D xzalloc_array(uint32_t, nr_chunks); + if ( !db_lpi_bases ) + goto fail_db_bases; + + do { + /* Allocate doorbell interrupts in chunks of LPI_BLOCK (=3D32). */ + ret =3D gicv3_allocate_host_lpi_block(d, &db_lpi_bases[i]); + if ( ret ) + goto fail_db; + } while ( ++i < nr_chunks ); + + d->arch.vgic.its_vm->db_lpi_bases =3D db_lpi_bases; + d->arch.vgic.its_vm->nr_db_lpis =3D nr_db_lpis; =20 return 0; =20 +fail_db: + while ( --i >=3D 0 ) + gicv3_free_host_lpi_block(d->arch.vgic.its_vm->db_lpi_bases[i]); + xfree(db_lpi_bases); +fail_db_bases: + lpi_free_proptable(d->arch.vgic.its_vm->vproptable); fail_vprop: xfree(d->arch.vgic.its_vm->vpes); fail_vpes: @@ -340,8 +398,13 @@ fail_vprop: void vgic_v4_free_its_vm(struct domain *d) { struct its_vm *its_vm =3D d->arch.vgic.its_vm; + int nr_chunks =3D DIV_ROUND_UP(its_vm->nr_db_lpis, LPI_BLOCK); if ( its_vm->vpes ) xfree(its_vm->vpes); + while ( --nr_chunks >=3D 0 ) + gicv3_free_host_lpi_block(its_vm->db_lpi_bases[nr_chunks]); + if ( its_vm->db_lpi_bases ) + xfree(its_vm->db_lpi_bases); if ( its_vm->vproptable ) lpi_free_proptable(its_vm); } @@ -357,14 +420,29 @@ int vgic_v4_its_vpe_init(struct vcpu *vcpu) return -ENOMEM; =20 its_vm->vpes[vcpuid] =3D vcpu->arch.vgic.its_vpe; + vcpu->arch.vgic.its_vpe =3D vcpu->arch.vgic.its_vpe; + vcpu->arch.vgic.its_vpe->vpe_db_lpi =3D its_vm->db_lpi_bases[vcpuid/32= ] + (vcpuid % 32); + /* + * Sometimes vlpi gets firstly mapped before associated vpe + * becoming resident, so in case missing the interrupt, we intend to + * enable doorbell at the initialization stage + */ + vcpu->arch.vgic.its_vpe->its_vm =3D its_vm; =20 + gicv3_lpi_update_host_entry(vcpu->arch.vgic.its_vpe->vpe_db_lpi, + vcpu->domain->domain_id, INVALID_LPI, true, + vcpu->vcpu_id); + + ret =3D its_vpe_init(vcpu->arch.vgic.its_vpe); if ( ret ) { its_vpe_teardown(vcpu->arch.vgic.its_vpe); return ret; } + its_vpe_unmask_db(vcpu->arch.vgic.its_vpe); + return 0; } =20 @@ -800,6 +878,7 @@ void vgic_v4_load(struct vcpu *vcpu) * corresponding to our current CPU expects us here */ WARN_ON(gicv4_vpe_set_affinity(vcpu)); + its_vpe_mask_db(vpe); its_make_vpe_resident(vpe, vcpu->processor); vpe->resident =3D true; } @@ -812,5 +891,53 @@ void vgic_v4_put(struct vcpu *vcpu, bool need_db) return; =20 its_make_vpe_non_resident(vpe, vcpu->processor); + if ( need_db ) + /* Enable the doorbell, as the guest is going to block */ + its_vpe_unmask_db(vpe); vpe->resident =3D false; } + +static int its_vlpi_set_doorbell(struct its_vlpi_map *map, bool enable) +{ + if (map->db_enabled =3D=3D enable) + return 0; + + map->db_enabled =3D enable; + + /* + * Ideally, we'd issue a VMAPTI to set the doorbell to its LPI + * value or to 1023, depending on the enable bit. But that + * would be issuing a mapping for an /existing/ DevID+EventID + * pair, which is UNPREDICTABLE. Instead, let's issue a VMOVI + * to the /same/ vPE, using this opportunity to adjust the doorbell. + */ + return its_send_cmd_vmovi(map->dev->hw_its, map); +} + +int its_vlpi_prop_update(struct pending_irq *pirq, uint8_t property, + bool needs_inv) +{ + struct its_vlpi_map *map; + unsigned int cpu; + int ret; + + if ( !pirq->vlpi_map ) + return -EINVAL; + + map =3D pirq->vlpi_map; + + /* Cache the updated property and update the vproptable. */ + map->properties =3D property; + lpi_write_config(map->vm->vproptable, pirq->irq, 0xff, property); + + if ( needs_inv ) + { + cpu =3D map->vm->vpes[map->vpe_idx]->col_idx; + ret =3D its_inv_lpi(map->dev->hw_its, map->dev, map->eventid, cpu); + if ( ret ) + return ret; + } + + return its_vlpi_set_doorbell(map, property & LPI_PROP_ENABLED); +} + diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index f03a8fad47..dababe97cd 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -295,7 +295,9 @@ struct pending_irq *gicv3_assign_guest_event(struct dom= ain *d, uint32_t vdevid, uint32_t eve= ntid, uint32_t virt_lpi); void gicv3_lpi_update_host_entry(uint32_t host_lpi, int domain_id, - uint32_t virt_lpi); + uint32_t virt_lpi, bool is_db, + uint16_t db_vcpu_id); + struct its_baser *its_get_baser(struct host_its *hw_its, uint32_t type); bool its_alloc_table_entry(struct its_baser *baser, uint32_t id); struct page_info *lpi_allocate_pendtable(void); @@ -322,6 +324,8 @@ bool event_is_forwarded_to_vcpu(struct its_device *dev,= uint32_t eventid); void its_vpe_mask_db(struct its_vpe *vpe); #endif int gicv4_its_vlpi_unmap(struct pending_irq *pirq); +int its_vlpi_prop_update(struct pending_irq *pirq, uint8_t property, + bool needs_inv); =20 /* ITS quirks handling. */ uint64_t gicv3_its_get_cacheability(void); diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index 94f7dd7d90..0a740ad68f 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -387,7 +387,7 @@ out_unlock: * property table and update the virtual IRQ's state in the given pending_= irq. * Must be called with the respective VGIC VCPU lock held. */ -static int update_lpi_property(struct domain *d, struct pending_irq *p) +int update_lpi_property(struct domain *d, struct pending_irq *p, bool need= s_inv) { paddr_t addr; uint8_t property; @@ -417,6 +417,9 @@ static int update_lpi_property(struct domain *d, struct= pending_irq *p) else clear_bit(GIC_IRQ_GUEST_ENABLED, &p->status); =20 + if ( pirq_is_tied_to_hw(p) ) + return its_vlpi_prop_update(p, property, needs_inv); + return 0; } =20 @@ -430,6 +433,9 @@ static int update_lpi_property(struct domain *d, struct= pending_irq *p) */ static void update_lpi_vgic_status(struct vcpu *v, struct pending_irq *p) { + if ( pirq_is_tied_to_hw(p) ) + return; + ASSERT(spin_is_locked(&v->arch.vgic.lock)); =20 if ( test_bit(GIC_IRQ_GUEST_ENABLED, &p->status) ) @@ -479,7 +485,7 @@ static int its_handle_inv(struct virt_its *its, uint64_= t *cmdptr) spin_lock_irqsave(&vcpu->arch.vgic.lock, flags); =20 /* Read the property table and update our cached status. */ - if ( update_lpi_property(d, p) ) + if ( update_lpi_property(d, p, true) ) goto out_unlock; =20 /* Check whether the LPI needs to go on a VCPU. */ @@ -552,7 +558,7 @@ static int its_handle_invall(struct virt_its *its, uint= 64_t *cmdptr) =20 vlpi =3D pirqs[i]->irq; /* If that fails for a single LPI, carry on to handle the rest= . */ - err =3D update_lpi_property(its->d, pirqs[i]); + err =3D update_lpi_property(its->d, pirqs[i], false); if ( !err ) update_lpi_vgic_status(vcpu, pirqs[i]); else @@ -785,7 +791,7 @@ static int its_handle_mapti(struct virt_its *its, uint6= 4_t *cmdptr) * We don't need the VGIC VCPU lock here, because the pending_irq isn't * in the radix tree yet. */ - ret =3D update_lpi_property(its->d, pirq); + ret =3D update_lpi_property(its->d, pirq, true); if ( ret ) goto out_remove_host_entry; =20 --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049100; cv=pass; d=zohomail.com; s=zohoarc; b=citd4mbNv2C6bY8pXw2+LAgJ/AQC7khA8lbQ4AGg46ZFEBQKA9pAByw8n9gP975uVY/Z8BTPj0pRrFio15Js3Y5OsqWEkyVwJaK1dULMbOBa2zJBTk7K+NXansUsa4UV7Gcf9vaVagTJXyS98EOTaLrpB6gTvDEYjVdlNyoIXq4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049100; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=947yUiItWFbYBUq0+f2mt/sPhjNqCQyd8DuWv6qI49k=; b=PGtFFPjQ06ZJSxzxUtuKWb74HT8r2+t9v0ku8/kXTu8s1uQDQUA3uUOY3WlsjfwJ+rKSSaR40Cy24U1myXYlV8VY4GRTibPWY1fEd0AI9fEt9BsxW1ngah5TXjaQzfnDvFMOu6Ta537qBdQqMWlQ3H4QdulcBGQP0NMhetQLl0E= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049100336847.6325857979152; Mon, 2 Feb 2026 08:18:20 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218894.1527786 (Exim 4.92) (envelope-from ) id 1vmwcd-0007TO-9M; Mon, 02 Feb 2026 16:17:55 +0000 Received: by outflank-mailman (output) from mailman id 1218894.1527786; Mon, 02 Feb 2026 16:17:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcd-0007Qj-1x; Mon, 02 Feb 2026 16:17:55 +0000 Received: by outflank-mailman (input) for mailman id 1218894; Mon, 02 Feb 2026 16:17:53 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZo-0000fY-4N for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:15:00 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4ceebecc-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:50 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:46 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:46 +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" X-Inumbo-ID: 4ceebecc-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O1buO1wly/sDB9AUbLL01qigQcEAu1BnTNK6j0PmFutscJxL8tLFYmsOqhTP5WaYJdazggK+VqnCskFsdBUkVYkWjPiVgLyDL0A8+WkhIikgd0pGL76N2P1blstvuvkI2jabTtQpdGjIBk8IAYztb3SeiR0u27SLdZzaB8zfkUAx/1dSSvqOocFhdmZy530zhN20UzzWS8jouMd3R6isDYOJVj5nzr72x0ZVOODR8M5W1GnSuC0IfIhlniHpAgLlnYCQPiMzUi4yNBdwJjbE+MVDLXXlglDuh98hv1tz3YLVO9Sr+XVqRLOvI/6vsBXt790Lr0R7Tt9GdgxNkFU+1Q== 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=947yUiItWFbYBUq0+f2mt/sPhjNqCQyd8DuWv6qI49k=; b=x9cslM0JENIwJ54WAltKMjAddHUQ+pSXP8S1ynno3Kg6x6gMZBis3vHA4pCvD3wL4NiV6/vKCPiKpZct8NdUHVeB5un8N6wi1qF0sFPLAn78HNwKqU9htlUHLctVW2T/lDkkI31mybqOluH0OLF1LMZDxfz7X4GFRsQ2KlXS38cCBTPpdnHR6lcemBzi1T7waJueh4ZIpokpZ5AuB00Olc9Q/l+bnHe7RlrsZnQXyAgrreT4ZyolHfThji6jhOd0yqTW1lWCQcbkQHhWGi8iLyBjmzuJEwYw0NFQsgGG/xMVq59MHD+YEtEv1bw6P5vq5X6oJMIoIvYrhtwcNLwkqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=947yUiItWFbYBUq0+f2mt/sPhjNqCQyd8DuWv6qI49k=; b=NuuBWw7gVgzGABg052kUeizAsjUZ7XMbBfwOFkfe4t9zHhJ2PF25xnaX2wEq8hKhrcq8wIbFyP5K2+UdeV0PFW/Ir0PwfrCjOhtZQRMOV6YoVb2fOYwi4Lmd9QBi927NhIPSFlmR4xA3ojZGGimrBYp+2j93M3go5wXieJANyTD+stjlr3cRTMpIYho3bTceQXedshwYXZ0ErOQ+CK5xb2cIroqMvkstvTjgELs2mUGGLVRdtjbG0Gm+IQH+stjYWuPE/jaXcEizC85gNEKRdl50dyUSp0KJQggq0799uyoBc29kcbljDdcW/1Txn9wMvoyjcnCw94ZOfJGJBiWxxg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 18/19] arm/gic: Add VPE proxy support Thread-Topic: [RFC PATCH 18/19] arm/gic: Add VPE proxy support Thread-Index: AQHclF8L8u/ksOolEkegMdNrkhgb0g== Date: Mon, 2 Feb 2026 16:14:44 +0000 Message-ID: <2bbe54851092309a0c23d68e60dfe93e4f77ef3a.1770046465.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: c99e3eb7-35cf-4e75-69a0-08de62762ed7 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?ndmDNkLHHNDqoq5+RXBalAyr1JIYypPczRUDs00+WbBU3H2Ku7NJDtIyyq?= =?iso-8859-1?Q?24RHx6J6uhUVa9830+6nQ16SMV1n25oaW9Hm532IVNmyoryXtauwWOR6S7?= =?iso-8859-1?Q?zLd2DklXnSME9NJzz/gNKTEL2YcRzxEg9TbO1HMkK+A0tS75+ETB54YOPh?= =?iso-8859-1?Q?W3PUAIwJj6dE+LGPymMpCkt70x2gdvbPguY8F9cOTH77FNGWIHySro3SP6?= =?iso-8859-1?Q?L+0xACo1ZJHr213SAieOBVM74+HEp5fUA8Byutt393smALrnU8i9ivxhBe?= =?iso-8859-1?Q?UcvlRVdpF5nf5gOnxuGz27omi9HPxY7Ug7ik+8mcmSQx5ossEbUfFNpGxR?= =?iso-8859-1?Q?ZZuvQqZqwZvaW+fC3c9YDL6AsHnU7pYuLC8c13GgE/dtcuLNa8h5Hrgank?= =?iso-8859-1?Q?EDY97V3zLA6vdEjBB5rB31YdnKrdq7hq99DiccfpVrd1P3LmHuQ12Sj+M9?= =?iso-8859-1?Q?weKuaw15h0JLnyQtBq+3w49WolmR3FbxYB2jThSqnp7ZsrnkyL1f2Daw5c?= =?iso-8859-1?Q?dBxGeBraeGwyoDLg3ZwkwVSnJWPcXVjaIQm90nfp64FKPPraxNudUP2pMN?= =?iso-8859-1?Q?qALij1JzfQVz6kHNSg6o1NvhJsDRvFWmnJ9N+ZKlHPuc0p+3VHOxiE8VUa?= =?iso-8859-1?Q?1FY1mT35RQXzjM4gr1q5plI8opPtaigcaE1yhKHHsR3pp/I68sjDtw+oA6?= =?iso-8859-1?Q?SSGBxFUbDe9rRCTBmwIvyVIkYNSEEgPDcZxIDapBokF6CwN31YjhoKTldH?= =?iso-8859-1?Q?5aYa1aTtpqsv47cTS+VM26NcUJGdXn7A1DKsTtG0V38RDCvkZDRoMQNger?= =?iso-8859-1?Q?VtnUyNeoo9g/TPlbSEeqcSkdHVoGjA0V2pNOUQcD73gtIj09TJUY+c+Zlh?= =?iso-8859-1?Q?Bt/e5+TR04sT7qO9PcrBI5zRIQfvU5NQ4vzwEvJBEqGuBv+p6g1SvanX98?= =?iso-8859-1?Q?RUSKiMD4wbbElEPYdYM9/YPaCBmmJ59mGoH1V74kHgE+RgVBAdOadO0/zd?= =?iso-8859-1?Q?OTo2aJo3AAB5gig6zAHJYfUSoHEssmbpL6Yb6lFf8fdPXfS4G5ijrdLhBP?= =?iso-8859-1?Q?TFUBbXeY3Ldcq7JpPl4BjCKOsx2X/umLj/0RexrLemvh7NfjksFT7tqDM6?= =?iso-8859-1?Q?ThxCeDIV3xJIOyjhY1+ewNJS6Jei9k/RYR+Lb5lvqaApgwHrswZFECEeL6?= =?iso-8859-1?Q?TuYKTUVtN52XvBrd97F8MEzhCuplLntMjSJmI2AMuCXrVkoHnSSiPlAjT2?= =?iso-8859-1?Q?fx0ogAn25mJnoyPRKjE3iPX5AGieaMaEbUxuNKDPjW3QnL+pCPKY7ac31B?= =?iso-8859-1?Q?55IypUR7wIR1zXAgYa0syz457Ac2pXrHoA4LG55ta+NU5FXJlteYr8o38n?= =?iso-8859-1?Q?SclEdNTXePEF037UGYNPWWC+L4YsgkRdM6TraKBi7tJgE5psrh2Tdb1w56?= =?iso-8859-1?Q?Nof65ba9UTry3rQ/AT+e+X6u3PPpD07g/ssTmIVAWlrk+v7x6dtZ3yJGRu?= =?iso-8859-1?Q?F+qipSmh3UWTKmiunDeNa9GjFHWJu9oIVmXUXiq4GVXKD0A7w4hu5u98XG?= =?iso-8859-1?Q?Zg+V0xZc3OWssGTHgz/DsRBD9qY8LTbPLpjKR+Qwt+DndpTFuhHW0BE+dh?= =?iso-8859-1?Q?aPJAHP/MZnjVCpScbaemNqz68qGL/dp0J0y0+8KmrrAP9IvWzegwRiq87h?= =?iso-8859-1?Q?7fMeKSTX6tx9P3B/sPk=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?vbCiDV2hHOfXypqTquZVYeImI6kwCGpg7UaTj/OJeNqZZXy8dNQYTf5VrK?= =?iso-8859-1?Q?xfqil9LXeplFfoJLUm5HLYMJ+4MN+5k2Tl8dYCgyZeEizX+kHJLMghX9nq?= =?iso-8859-1?Q?3zr9B1b0mAxr2vNZ3QznY9k98bLUNYLyEsA7v9Le2LpYpNgUvLRJDWbHg5?= =?iso-8859-1?Q?3mYwWOC0OChVE+9avZL6vzZyTISXEPksHfodW4nmE73Vlvc8HyXEQaSN4u?= =?iso-8859-1?Q?+1VgKUZ0mbe6fyQiAE9e7q/cvrzMSDQkp9IDdLog/X7sicAgSw3d3TMtnM?= =?iso-8859-1?Q?XJ/FGE7Z3ihuXwUgStECcStrvKNoLSoT39otU9WychyrNNpzWQ+A8gT+KI?= =?iso-8859-1?Q?ShFERpJjGKfww8J5etznQ5tfMll5YBQTdXsmoGVI0E/KTPdiEAs8LzbBRZ?= =?iso-8859-1?Q?sQndmIuERWpX6OkK3sHZtPNxTgBjijdapZsKlEt5Uhh6U3QMaORghgCPi6?= =?iso-8859-1?Q?oY+L0MYqwL8wfGO+cg2wcs+rzmcxNY250LFGMxC7GxqwLCcKzTxAW0bQnx?= =?iso-8859-1?Q?dIyKgVrh71RDrAolC0UFd6qq5w9AwtbPLVhtsURxejxJpl9oKcZAZu/uYk?= =?iso-8859-1?Q?sq6Ya9hjo/Ug9dMuZW8DDsrKDrscITaUJHGMxlzQgGqb9mVskgXvat4Lz4?= =?iso-8859-1?Q?B+EmafZR7kB4YlsffyYS1zBaMUBvRwCn/oP3oFOVlPY/E1GXNAxMNAEuxV?= =?iso-8859-1?Q?aL4NG2Umh9eVRzMV5/Ndfbn1hLzetMTh6QCvWSaylPrBZszXjuRddJbpTj?= =?iso-8859-1?Q?aQ/QbrDAec8KqOGSOFf6APxy+RoJspD28LhJKkd+R9txOnOmoa55bnwXQk?= =?iso-8859-1?Q?0TCo6G0zsvWGIuSDxABT3QQKka9xVqaMfy/yEeIEMUZyjtfsJrU34pZl64?= =?iso-8859-1?Q?q9SKDD8Ze8CaEWiaqB8c/2zthAXAtD3O3lWyGQKtNNvDw/TISDV1PY6Ytg?= =?iso-8859-1?Q?0Z1+FHNwuiD+jZxon03fIYuw5VrAMDGtb6Pc4xIUEaRD2Md0KcgkI0rMTT?= =?iso-8859-1?Q?VCX5Ey/53PBGk2sa18bPyM/uWkp5lmmIy2abbjTPI6uLwv+xbOEGt4dqkS?= =?iso-8859-1?Q?FW0ElK7UBh0IF+WkRydbHG+rGTrep1wa0OEu3J3jRezDBh2adff3ZcNiWI?= =?iso-8859-1?Q?FQyE60jcYTpg7fRY52qipOaY+rDrZAFj2bVgAwSHkWF3ye1myTOo/zwd4G?= =?iso-8859-1?Q?/b8uMoExJ6nyPJuFcu7FbdWMdC859CwM2Sxt7w0lpN+aSLBfT7T42zYjKj?= =?iso-8859-1?Q?8fqKfb7MnpEC0kEPsPBLXhMw3SmbTLxYfjk0b8zrvX5ZUpPi9Lmt18KQe2?= =?iso-8859-1?Q?bhjeu5lLFUfLwIn1g4lGR6KuW+7r8iw8brnhpJpp6jxvUnNcyLvjrCbjSQ?= =?iso-8859-1?Q?kW1QBAcUeQjSAz/TyNSyg7szip0iKKG+SXFSaom9gDXrKMb4QqlAK4KSud?= =?iso-8859-1?Q?7ql8oOpCBkjrSt9c7JcQcVv5JBnOEBuYqeGlvgW96bltc1H1Rah8h5KezH?= =?iso-8859-1?Q?ENeDTn3aS8DMbBciX+53JBiWuOPeGdFWiN2m/tt+5LwNi4mFKvd/gNWFpW?= =?iso-8859-1?Q?JZVvx7FjY7xcMj+rwfeNr/MgrHc2Y8g7sJwLWeYhWUfGthv5AQ5kfhEFhV?= =?iso-8859-1?Q?7M9SpfkKzJ3Cw/ArirN9chmJK2p7hcpKlC6rGzYL5tCRajg4bGUEKInppm?= =?iso-8859-1?Q?CxckmLmuy4joMKPgc3Tx99s0fKlesCuQWjE0HCapcGiKDS2/5XVWYQZhd2?= =?iso-8859-1?Q?52evudrv/VbQZ60An4gW9zIpjyZY5AiFFKEA9rGYDByaFaTSDx/E+HP7Ip?= =?iso-8859-1?Q?2TCohDW9CJ7G2UBSG1RT6U4VCEeNhhQ=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c99e3eb7-35cf-4e75-69a0-08de62762ed7 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:44.6107 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: JDe0wUbfyeAzn7BTfW4lAGXf9AM5f4YJuxLQ8nR1E/eiTGu7nxnV6bMZmuum0lCHjuiCCiaDT/t396RSEyHpWA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049101852158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 13 ++ xen/arch/arm/gic-v3.c | 1 + xen/arch/arm/gic-v4-its.c | 207 ++++++++++++++++++++++++- xen/arch/arm/include/asm/gic_v3_defs.h | 7 + xen/arch/arm/include/asm/gic_v3_its.h | 7 + xen/arch/arm/include/asm/gic_v4_its.h | 5 + xen/arch/arm/include/asm/vgic.h | 2 + 7 files changed, 235 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index fa5c1eb6d1..5979a82526 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -333,6 +333,19 @@ int its_send_cmd_discard(struct host_its *its, struct = its_device *dev, return its_send_command(its, cmd); } =20 +int its_send_cmd_movi(struct host_its *its, uint32_t deviceid, uint32_t ev= entid, + uint16_t icid) +{ + uint64_t cmd[4]; + + cmd[0] =3D GITS_CMD_MOVI | ((uint64_t)deviceid << 32); + cmd[1] =3D eventid; + cmd[2] =3D icid; + cmd[3] =3D 0x00; + + return its_send_command(its, cmd); +} + /* Set up the (1:1) collection mapping for the given host CPU. */ int gicv3_its_setup_collection(unsigned int cpu) { diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 1cb3169b72..fb80038f17 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -2096,6 +2096,7 @@ static void __init gicv4_init(void) =20 gicv4_its_vpeid_allocator_init(); =20 + gicv4_init_vpe_proxy(); } #else static void __init gicv4_init(void) diff --git a/xen/arch/arm/gic-v4-its.c b/xen/arch/arm/gic-v4-its.c index 0462976b93..83ee0510ac 100644 --- a/xen/arch/arm/gic-v4-its.c +++ b/xen/arch/arm/gic-v4-its.c @@ -39,6 +39,13 @@ static spinlock_t vpeid_alloc_lock =3D SPIN_LOCK_UNLOCKE= D; static uint16_t vmovp_seq_num; static spinlock_t vmovp_lock =3D SPIN_LOCK_UNLOCKED; =20 +static struct { + spinlock_t lock; + struct its_device *dev; + struct its_vpe **vpes; + int next_victim; +} vpe_proxy; + void __init gicv4_its_vpeid_allocator_init(void) { /* Allocate space for vpeid_mask based on MAX_VPEID */ @@ -201,6 +208,124 @@ static int its_map_vpe(struct host_its *its, struct i= ts_vpe *vpe) =20 return 0; } +static int gicv4_vpe_db_proxy_unmap_locked(struct its_vpe *vpe) +{ + int ret; + + /* Already unmapped? */ + if ( vpe->vpe_proxy_event =3D=3D -1 ) + return 0; + + ret =3D its_send_cmd_discard(vpe_proxy.dev->hw_its, vpe_proxy.dev, + vpe->vpe_proxy_event); + if ( ret ) + return ret; + vpe_proxy.vpes[vpe->vpe_proxy_event] =3D NULL; + + /* + * We don't track empty slots at all, so let's move the + * next_victim pointer to quickly reuse the unmapped slot + */ + if ( vpe_proxy.vpes[vpe_proxy.next_victim] ) + vpe_proxy.next_victim =3D vpe->vpe_proxy_event; + + vpe->vpe_proxy_event =3D -1; + + return 0; +} + +static void gicv4_vpe_db_proxy_unmap(struct its_vpe *vpe) +{ + if ( !gic_support_directLPI() ) + { + unsigned long flags; + + spin_lock_irqsave(&vpe_proxy.lock, flags); + gicv4_vpe_db_proxy_unmap_locked(vpe); + spin_unlock_irqrestore(&vpe_proxy.lock, flags); + } +} + +/* + * If a GICv4.0 doesn't implement Direct LPIs (which is extremely + * likely), the only way to perform an invalidate is to use a fake + * device to issue an INV command, implying that the LPI has first + * been mapped to some event on that device. Since this is not exactly + * cheap, we try to keep that mapping around as long as possible, and + * only issue an UNMAP if we're short on available slots. + * + * GICv4.1 mandates that we're able to invalidate by writing to a + * MMIO register. And most of the time, we don't even have to invalidate + * vPE doorbell, as the redistributor can be told whether to generate a + * doorbell or not. + */ +static int gicv4_vpe_db_proxy_map_locked(struct its_vpe *vpe) +{ + int ret; + + /* Already mapped? */ + if ( vpe->vpe_proxy_event !=3D -1 ) + return 0; + + /* This slot was already allocated. Kick the other VPE out. */ + if ( vpe_proxy.vpes[vpe_proxy.next_victim] ) + { + struct its_vpe *old_vpe =3D vpe_proxy.vpes[vpe_proxy.next_victim]; + + ret =3D gicv4_vpe_db_proxy_unmap_locked(old_vpe); + if ( ret ) + return ret; + } + + /* Map the new VPE instead */ + vpe_proxy.vpes[vpe_proxy.next_victim] =3D vpe; + vpe->vpe_proxy_event =3D vpe_proxy.next_victim; + vpe_proxy.next_victim =3D (vpe_proxy.next_victim + 1) % + vpe_proxy.dev->eventids; + + return its_send_cmd_mapti(vpe_proxy.dev->hw_its, vpe_proxy.dev->host_d= evid, + vpe->vpe_proxy_event, vpe->vpe_db_lpi, + vpe->col_idx); +} + +int __init gicv4_init_vpe_proxy(void) +{ + struct host_its *hw_its; + uint32_t devid; + + if ( gic_support_directLPI() ) + { + printk("ITS: Using DirectLPI for GICv4 VPE invalidation\n"); + return 0; + } + + /* Any ITS will do, even if not v4 */ + hw_its =3D list_first_entry(&host_its_list, struct host_its, entry); + + vpe_proxy.vpes =3D xzalloc_array(struct its_vpe *, nr_cpu_ids); + if ( !vpe_proxy.vpes ) + { + printk(XENLOG_ERR "ITS: Can't allocate GICv4 VPE proxy device arra= y\n"); + return -ENOMEM; + } + + /* Use the last possible DevID */ + devid =3D BIT(hw_its->devid_bits, UL) - 1; + vpe_proxy.dev =3D its_create_device(hw_its, devid, nr_cpu_ids); + if ( !vpe_proxy.dev ) + { + printk(XENLOG_ERR "ITS: Can't allocate GICv4 VPE proxy device\n"); + return -ENOMEM; + } + + spin_lock_init(&vpe_proxy.lock); + vpe_proxy.next_victim =3D 0; + printk(XENLOG_INFO + "ITS: Allocated DevID %u as GICv4 VPE proxy device\n", devid); + + return 0; +} + static int __init its_vpe_init(struct its_vpe *vpe) { int vpe_id, rc =3D -ENOMEM; @@ -224,6 +349,7 @@ static int __init its_vpe_init(struct its_vpe *vpe) rwlock_init(&vpe->lock); vpe->vpe_id =3D vpe_id; vpe->vpendtable =3D page_to_virt(vpendtable); + vpe->vpe_proxy_event =3D -1; /* * We eagerly inform all the v4 ITS and map vPE to the first * possible CPU @@ -299,16 +425,45 @@ static int its_send_cmd_vmovp(struct its_vpe *vpe) return 0; } =20 +/* GICR_SYNCR.Busy =3D=3D 1 until the invalidation completes. */ +static void wait_for_syncr(void __iomem *rdbase) +{ + while ( readl_relaxed(rdbase + GICR_SYNCR) & 1 ) + cpu_relax(); +} + +void direct_lpi_inv(struct its_device *dev, uint32_t eventid, + uint32_t db_lpi, unsigned int cpu) +{ + void __iomem *rdbase; + uint64_t val; + /* Register-based LPI invalidation for DB on GICv4.0 */ + val =3D FIELD_PREP(GICR_INVLPIR_INTID, db_lpi); + + rdbase =3D per_cpu(rbase, cpu); + writeq_relaxed(val, rdbase + GICR_INVLPIR); + wait_for_syncr(rdbase); +} =20 static void its_vpe_send_inv_db(struct its_vpe *vpe) { - // struct its_device *dev =3D vpe_proxy.dev; - // unsigned long flags; + if ( gic_support_directLPI() ) + { + unsigned int cpu =3D vpe->col_idx; =20 - // spin_lock_irqsave(&vpe_proxy.lock, flags); - // gicv4_vpe_db_proxy_map_locked(vpe); - // its_send_cmd_inv(dev->hw_its, dev->host_devid, vpe->vpe_proxy_event= ); - // spin_unlock_irqrestore(&vpe_proxy.lock, flags); + /* Target the redistributor this VPE is currently known on */ + direct_lpi_inv(NULL, 0, vpe->vpe_db_lpi, cpu); + } + else + { + struct its_device *dev =3D vpe_proxy.dev; + unsigned long flags; + + spin_lock_irqsave(&vpe_proxy.lock, flags); + gicv4_vpe_db_proxy_map_locked(vpe); + its_send_cmd_inv(dev->hw_its, dev->host_devid, vpe->vpe_proxy_even= t); + spin_unlock_irqrestore(&vpe_proxy.lock, flags); + } } =20 static void its_vpe_inv_db(struct its_vpe *vpe) @@ -335,6 +490,7 @@ static void __init its_vpe_teardown(struct its_vpe *vpe) unsigned int order; =20 order =3D get_order_from_bytes(max(lpi_data.max_host_lpi_ids / 8, (uns= igned long)SZ_64K)); + gicv4_vpe_db_proxy_unmap(vpe); its_free_vpeid(vpe->vpe_id); free_xenheap_pages(vpe->vpendtable, order); xfree(vpe); @@ -830,6 +986,43 @@ static void vpe_to_cpuid_unlock(struct its_vpe *vpe, u= nsigned long *flags) spin_unlock_irqrestore(&vpe->vpe_lock, *flags); } =20 +static void gicv4_vpe_db_proxy_move(struct its_vpe *vpe, unsigned int from, + unsigned int to) +{ + unsigned long flags; + + if ( gic_support_directLPI() ) + { + void __iomem *rdbase; + + rdbase =3D per_cpu(rbase, from); + /* Clear potential pending state on the old redistributor */ + writeq_relaxed(vpe->vpe_db_lpi, rdbase + GICR_CLRLPIR); + wait_for_syncr(rdbase); + return; + } + + spin_lock_irqsave(&vpe_proxy.lock, flags); + + gicv4_vpe_db_proxy_map_locked(vpe); + + /* MOVI instructs the appropriate Redistributor to move the pending st= ate */ + its_send_cmd_movi(vpe_proxy.dev->hw_its, vpe_proxy.dev->host_devid, + vpe->vpe_proxy_event, to); + + /* + * ARM spec says that If, after using MOVI to move an interrupt from + * collection A to collection B, software moves the same interrupt aga= in + * from collection B to collection C, a SYNC command must be used befo= re + * the second MOVI for the Redistributor associated with collection A = to + * ensure correct behavior. + * So each time we issue VMOVI, we VSYNC the old VPE for good measure. + */ + WARN_ON(its_send_cmd_sync(vpe_proxy.dev->hw_its, from)); + + spin_unlock_irqrestore(&vpe_proxy.lock, flags); +} + static int gicv4_vpe_set_affinity(struct vcpu *vcpu) { struct its_vpe *vpe =3D vcpu->arch.vgic.its_vpe; @@ -859,6 +1052,7 @@ static int gicv4_vpe_set_affinity(struct vcpu *vcpu) ret =3D its_send_cmd_vmovp(vpe); if ( ret ) goto out; + gicv4_vpe_db_proxy_move(vpe, from, to); =20 out: vpe_to_cpuid_unlock(vpe, &flags); @@ -940,4 +1134,3 @@ int its_vlpi_prop_update(struct pending_irq *pirq, uin= t8_t property, =20 return its_vlpi_set_doorbell(map, property & LPI_PROP_ENABLED); } - diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index 0db75309cf..b4d50516ef 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -20,6 +20,13 @@ =20 #include =20 +#ifndef FIELD_GET +#define FIELD_GET(_mask, _reg) \ + ((typeof(_mask))(((_reg) & (_mask)) >> (ffs64(_mask) - 1))) +#endif + +#define FIELD_PREP(_mask, _val) \ + (((typeof(_mask))(_val) << (ffs64(_mask) - 1)) & (_mask)) /* * Additional registers defined in GIC v3. * Common GICD registers are defined in gic.h diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index dababe97cd..0e82625840 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -236,6 +236,11 @@ int its_inv_lpi(struct host_its *its, struct its_devic= e *dev, uint32_t eventid, unsigned int cpu); int its_send_cmd_mapti(struct host_its *its, uint32_t deviceid, uint32_t eventid, uint32_t pintid, uint16_t icid); +struct its_device *its_create_device(struct host_its *hw_its, + uint32_t host_devid, uint64_t nr_even= ts); +int its_send_cmd_movi(struct host_its *its, uint32_t deviceid, uint32_t ev= entid, + uint16_t icid); +int its_send_cmd_sync(struct host_its *its, unsigned int cpu); #ifdef CONFIG_ACPI unsigned long gicv3_its_make_hwdom_madt(const struct domain *d, void *base_ptr); @@ -326,6 +331,8 @@ void its_vpe_mask_db(struct its_vpe *vpe); int gicv4_its_vlpi_unmap(struct pending_irq *pirq); int its_vlpi_prop_update(struct pending_irq *pirq, uint8_t property, bool needs_inv); +void direct_lpi_inv(struct its_device *dev, uint32_t eventid, + uint32_t db_lpi, unsigned int cpu); =20 /* ITS quirks handling. */ uint64_t gicv3_its_get_cacheability(void); diff --git a/xen/arch/arm/include/asm/gic_v4_its.h b/xen/arch/arm/include/a= sm/gic_v4_its.h index 37b6b92f0c..1d800fdbaf 100644 --- a/xen/arch/arm/include/asm/gic_v4_its.h +++ b/xen/arch/arm/include/asm/gic_v4_its.h @@ -52,6 +52,7 @@ struct event_vlpi_map { }; =20 void gicv4_its_vpeid_allocator_init(void); +int gicv4_init_vpe_proxy(void); =20 #define GICR_VPROPBASER 0x0070 #define GICR_VPENDBASER 0x0078 @@ -97,6 +98,10 @@ static inline void gits_write_vpendbaser(uint64_t val, v= oid __iomem *addr) } #define gits_read_vpendbaser(c) readq_relaxed(c) =20 +#define GICR_INVLPIR_INTID GENMASK_ULL(31, 0) +#define GICR_INVLPIR_VPEID GICR_INVALLR_VPEID +#define GICR_INVLPIR_V GICR_INVALLR_V + #endif =20 /* diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index 9ef667decb..558f81818c 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -407,9 +407,11 @@ extern void vgic_check_inflight_irqs_pending(struct vc= pu *v, =20 /* GICV4 functions */ #ifdef CONFIG_GICV4 +bool gic_support_directLPI(void); bool gic_support_vptValidDirty(void); bool gic_is_gicv4(void); #else +#define gic_support_directLPI() (false) #define gic_support_vptValidDirty() (false) #define gic_is_gicv4() (false) #endif --=20 2.51.2 From nobody Sat Feb 7 04:47:11 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1770049084; cv=pass; d=zohomail.com; s=zohoarc; b=WqwpL9ySdtg8k+JQDivE5tZG8K/TqN+QraposHJPvbF8sqBzQADsHKCGeq+yqSYeKvVdnZr6R+ojK+Htqp4AJsoij1huSt9WyNDACvTGC4wEzpTdgnNFGFjwEqetT3NhXnyvbByn2Q67ygzN+9ESOGu8l8JV1QGpCLtWy0O5Jj8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770049084; 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:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wmW7c/IQR/ClnIewJrc3yEUYhOdCsTt/Er9ZgkRu7zA=; b=bl1PlFCCHWu9AJo+vPOCpmvlBkYP/2qctw8JkTmdwSy197/3L20EmSLfpyjXAoHuof/vtskkKVYKDmlNIJZQCHkUkzLlY3Ty+NPjBSNKoRgRED9Upr/z5a6bRrdQbgqoDuWoKy7PY2x/8eeNH9UeaSvMaANiBNMRMZeiyWNJU6w= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1770049084287313.5494440888199; Mon, 2 Feb 2026 08:18:04 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1218876.1527756 (Exim 4.92) (envelope-from ) id 1vmwcQ-0006Yu-SP; Mon, 02 Feb 2026 16:17:42 +0000 Received: by outflank-mailman (output) from mailman id 1218876.1527756; Mon, 02 Feb 2026 16:17:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwcQ-0006Yh-PO; Mon, 02 Feb 2026 16:17:42 +0000 Received: by outflank-mailman (input) for mailman id 1218876; Mon, 02 Feb 2026 16:17:41 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vmwZq-0000fY-4k for xen-devel@lists.xenproject.org; Mon, 02 Feb 2026 16:15:02 +0000 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20a::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4d6ab7ab-0052-11f1-b161-2bf370ae4941; Mon, 02 Feb 2026 17:14:51 +0100 (CET) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by VI0PR03MB10299.eurprd03.prod.outlook.com (2603:10a6:800:202::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 16:14:46 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9564.016; Mon, 2 Feb 2026 16:14:46 +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" X-Inumbo-ID: 4d6ab7ab-0052-11f1-b161-2bf370ae4941 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cfOM6nORlUtSpw9+jJngSLCbJVV5FgN0cPOHGtUBVOvKJuBPZ69bCqg9oMuQcxclY/3/N8HRJH9Jomqq05VvFuCAaXDLHqAJfBQQFKvdAftDtHjJjyiUHHoMr5f/TW7nZDHdxuC4srhH1dY27qMc1R2P7HeZrypsT+qlZuR43l3hIsujByVH8NgBZuUlCmOLbWR39k/0SJNsXxbq05r0yvA34+fIzNSNmK7AHT78L4UirDALJEsgCtBnmAMuRbPxm/MS0AEoQWM83elly4Wbbl2BlNNabXlmmWDYLAZQW2IBYFNqAnA9OZj4ggwNJGYnAlQWUD9+tHTTrXWn4FK6LA== 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=wmW7c/IQR/ClnIewJrc3yEUYhOdCsTt/Er9ZgkRu7zA=; b=GwG5nqJYOuTibCltifDbYWt8fkoJEB/aI079pKBdbG0F16ND2ttDV30StQE5tndd28JTXRNoqKDAtp6B9Zk5Vr+8RTsySuGDuxTamoudtxAojsKokUXm6ieOEGd5w9sWbox/8PUTNe2Cx2F+j6/V/qdY9NeQRZwFk3RMqJt7tJlx/G5Zlb3dYaxJx/1Fh6DcJ5Xb3m0xXH7qXh8AG69/cI72SvLNnnQqIO/KcMtkNgg5LOL6Wb3VYopFO2GZ8AujaGkSjIDNS3clg+Hm2ehpN6/lmDU2HPEsxPpiJVjm0nDWBY/Gl9cwSdKrqe5BeRSuIoNLVGnu3ZtwxeibvVclbg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wmW7c/IQR/ClnIewJrc3yEUYhOdCsTt/Er9ZgkRu7zA=; b=RgZSjoFXZ7JRXpnub3E/3dkR9Hnlq6mlMH9u4Udv+yjBMBYIO95o6snJ9su1lRDb8w+l+6VOm2LwkdVSUZ0Kc4Uz6R2aQ1kJf6vV/4idZwIzL7jv44+Qvlwydk3z73ZQ+Gapqt6oQagOzrQWnAH+PGdoyERI+RFc1n7jbyjnyEI/jeGusKTQ+7QjrA2Yfq7htQscjky+TuP9WaaaGqwb0JYsQGEuNNfAKS7JZxbuVjVqc1MBiRGlJeM+n7sW3Ev8f0EODy+k3XSBL6KRxQ0MDP+g3Gt1pt+XvK0Sn/2T9hVZUD5G4BY1vXaBlXMEo0Cakg/QRf1ey7eV1l7PC2tMlw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: "xakep.amatop@gmail.com" , Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [RFC PATCH 19/19] arm/gicv4: Add GICv4 to the build system Thread-Topic: [RFC PATCH 19/19] arm/gicv4: Add GICv4 to the build system Thread-Index: AQHclF8L/bmHW0RbCEqNgcRSAK0edw== Date: Mon, 2 Feb 2026 16:14:44 +0000 Message-ID: References: In-Reply-To: Accept-Language: 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=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|VI0PR03MB10299:EE_ x-ms-office365-filtering-correlation-id: f3c0f6fc-a72e-4245-3b34-08de62762f0e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021; x-microsoft-antispam-message-info: =?iso-8859-1?Q?rPiRYNveQKF3ESasEqe/3sezOFkDDikQ8NYaFW9NB9V7glQkpvFCKbYDYn?= =?iso-8859-1?Q?RUrPiZfbzPsEUq3rkHn+7eLAZWnykc1eLlcQ3QU+mD0FH11/UtLoC6Hsj/?= =?iso-8859-1?Q?ymC1CpxWiPYJf2aO/2q6G79fIMRyOscuRTal07PwK2cWAmBcAWeYTDVrXw?= =?iso-8859-1?Q?FLlr+n82/VIf9sohrg3P+SDgbFV+64MWh2oec0cnnm9qp1RbXvOIMLbn8P?= =?iso-8859-1?Q?z5dzuCrGtxZgWW7e+aP3w26wWiXn/xZ+zvjfCWnRiLPE0NylH/kg2yypbh?= =?iso-8859-1?Q?KqkIu4Yqrn71j2DApf5EjLMMt6Dmon1B3m4PzpYlBpoMmeMlta2MRGP+GL?= =?iso-8859-1?Q?DeiC6NyzF1njc281+ovhmkUCD/IXAr38S/KCf/5Vb8XJ65ErqZBBmo60Gu?= =?iso-8859-1?Q?om8oVrlmZ1spoDlaFUpBy43fxOHanO4hsk+kCPlAkb7ajO0YUtk347ad03?= =?iso-8859-1?Q?F2lZomhBGmN+DmNp7gU71D6beQ8SrDHe35cOrVrkqT2PPIoW858HartblL?= =?iso-8859-1?Q?V3D8/prlcNP/57Lg2ITZSNmVTClyX2RmHtIwKm172O0Pc0FVpe2yNsEx9A?= =?iso-8859-1?Q?ZKcpRQOfEC+lZrrL3iBXbbuPvHo85DLAWVh1d1GeaapLmVrpcMIjMKO5tZ?= =?iso-8859-1?Q?yFnNlj5nbXQLpbGBYGiqYgzTXegr2G40a2cGidAz4YUzG1W+CBpQt8Gfwp?= =?iso-8859-1?Q?Akdx2ImJcqxs69dpzyPkCgfmAqCtcjSDTEMwwwzbD1Z5K01V7jGimifin6?= =?iso-8859-1?Q?2UHOaeiYXyh0LFN/oac2Q1cPd/cbRHPTSNdCt+FbVd7DgGd9hrQon5MOUw?= =?iso-8859-1?Q?Wzlwhp6BP5X7rItjGzznCOz3MIBdjPaNCJ+HdaNw9WCEoJow1jTExPiQq3?= =?iso-8859-1?Q?TqSh+et+rh1jg2hQwNdxdBehr+hx3o/Tb+6qXWADtW8SMIf6NYigxxpg+J?= =?iso-8859-1?Q?M04hTJdNDqkMQWndRNikallNfjdG+62iLjuM66IBPxyKnueEOIjMaRTSUe?= =?iso-8859-1?Q?71X3aQfiAGJ5jYhPR4HAenkLGaz1JFSl8r0QEIWu9ixx/H+MEz6GYzxxtJ?= =?iso-8859-1?Q?v008lfB3Q1aS16mALtZ3bpsll02EtF/ZghcB6iBal4Nki22ugYEp0f/72P?= =?iso-8859-1?Q?vIj+9CqfEhs9MeHqsOIZLkWZsqCUA0LcAG+pkqWRAiSw6RUFdE4UVrtfk9?= =?iso-8859-1?Q?RRVEXr4vD2rJO9gnqDMwxpTzALky6Ok6PGt4CsrGEEHkuYpd8BSiTbMY3F?= =?iso-8859-1?Q?MBUh8Q41vP4FNwle3TBOll0vAVA38Z+dsKPKk3Toima5kiVrMx0lgRhcEf?= =?iso-8859-1?Q?JHMugmLVyDQ2W4iiqDTquZTowqZRvo6cjxlWt6tprxkkIIHQ6v11eJYXHo?= =?iso-8859-1?Q?wzaURfNClrJeW0rL0bOAOVPP3K4LE1qrxrvEKw/jJu5o/ycBetapzf5DiL?= =?iso-8859-1?Q?YwT2fbHEQczBKEojT9vfMNMXVWhip6abCtccNaJ4H75Wt5Pa3ssRkks3oA?= =?iso-8859-1?Q?xjpBxbare0P30qUnkc3HMd70ZG4uUblgBkMzgiq0s04uagLu3bJDzdReXW?= =?iso-8859-1?Q?NWbmQ+03eBR+f5bVzAsTFypsFa/hsvGRW5BWMIUPQ5UnLXJnsopPTGw/we?= =?iso-8859-1?Q?wRSImBsbEVKJwHc/q/aCIMBpYGF4Y3ND/TNpwnLviq9uHkRheAzARIkyD+?= =?iso-8859-1?Q?ePcawAb/+nghZMaKde4=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?tAkYogTjQfFR0L8mwsSwWQwPo3ebftneyeraqoGD/Zh5rXT4PX2Q/hTd1o?= =?iso-8859-1?Q?PzUDyVClMXbxSH+8jyTogCivOrCRQ8qdIY7py/Rimdr1ET10h6QRrztITW?= =?iso-8859-1?Q?4G835li6VrITVE5gIsouhy73EfLU8DdS81Uunb7mixPIeBaO1oN8JiZ7pY?= =?iso-8859-1?Q?G2g9xU09kylXUGLy3l8pnATUTidldAWtvkQIefII+4owfL74M29Cl3LcJs?= =?iso-8859-1?Q?Uh4KQKHuE6/c1IUC+atVg7ymJ04Zp9bU6Hlr+ROLyK7MLUEQIMQG5asjTM?= =?iso-8859-1?Q?Fyji77WapCP7lHa2KWsHc18qXj9R9t6UHXtILRF+bp/yHCowMw4jePw+YP?= =?iso-8859-1?Q?un/qOkmRSv3RnBCHYiZag8vo171aB1D+1GtZsPxf+Hd2p1j/zqq+6v/OaR?= =?iso-8859-1?Q?wib8+ciqLYqaBKSS8hPwPCvki6CNODNdi2dS1WlayIL1KJJa+ZwFwXIlHU?= =?iso-8859-1?Q?zCWoCQA/FJPgsI4JdkuV75TWL1dbI1AFa8U7dkzawWyA5KqEpFxcpaRg87?= =?iso-8859-1?Q?+JsZfm7xPRIpgueUinWlvWLgF+6lKtLSw08vxIj6x0wwOiQY77vugsw4BW?= =?iso-8859-1?Q?L3VXmYb3idcZsnWDhSlTZ4Yk0+4yC4pxbQh7wq/FC9VXfNX0rCGSMDa7/D?= =?iso-8859-1?Q?sqZXTzGHfAHioFCyHrxoY/QuyEw1WgD9mnk8ps69r1nZzVzf3Ayraf6YpZ?= =?iso-8859-1?Q?1q7pB5owtDTO2aTBzjqHNIU6X7k/jqvMK3X08AovFRdK2Y6RmY1kWyX8pc?= =?iso-8859-1?Q?/iWLqj+O1XMxxMC/rCOcVgmlIf45pjitAFca6C0zoO8YjoeR2G5HncHhOZ?= =?iso-8859-1?Q?9OQO48cLTHxByjSS8hWMLpIOKPxmczgPM25KltD+JCpUISEaMd/6KZ1eUA?= =?iso-8859-1?Q?AdtfvqBZW+JQwV82F6LVsmILPwfR80kP2I8X6m9uJjKwbte7P2zx+h85M2?= =?iso-8859-1?Q?Hp/SRG5YH8ATWtf8yWzLlE6oDi9miyFJQ0tbdj+K4p032yhxllMWATafHG?= =?iso-8859-1?Q?UCqs4cdZeMVnB8PqheYiwfHvsmJy8v0mMXbFi8muIPoUuUcHiGeobC54V8?= =?iso-8859-1?Q?0QH9PGRz/WHoRF8bMhKKc7pfkzto//UuU3nf3NtXyXck4vdlmr7KLNwt+S?= =?iso-8859-1?Q?L+99LjlWexKBwqoPDZG58F/gOdGSdkYqnNe6ub1g+jvtC4VvL8TtG3t1hV?= =?iso-8859-1?Q?z0o+3zZ0hC0UCvkoubHUc/ImepEYh53MwsaETLvwPYgiRXTAG3gPTOcAFD?= =?iso-8859-1?Q?CSCj16c/D+nyXtlwTGkNVaR0NKtiJ//JItXvmP+m3eQMtc1NnwNPVSvVdr?= =?iso-8859-1?Q?tkxDhxwmzbJBMzcyMftMwj8Ubbww4rlfgP/KQOIkmbl46wfNzqEE9hA2AG?= =?iso-8859-1?Q?2+OHjbN1UJHFhURF2GFe0yflVY5OTZSTz4vmZiwLcjZqlg9QK2tj9eQFcH?= =?iso-8859-1?Q?KtmnZzwkjuv9F96mv5HdLl899w4DPSb15V4pFlT02c3SzaR7WxuOcHWl0U?= =?iso-8859-1?Q?lQa+giVH/6B6MvdjO0N8fpV3ACGayXDRF5NA4LQoo0Z+MUGPK1+1NVXY96?= =?iso-8859-1?Q?b1Q3ZoMuS3K0xcTWGOi0tA2dPi5vkFX24HgGiOEiz1LCUFLOmnxmkPZkVt?= =?iso-8859-1?Q?qBfHiscS0nHkyrhi8y80CZOLvnh3uWYKZpz7VghXSenNdvYzs7//DCXkux?= =?iso-8859-1?Q?+mS1a5P/x6BAMq1hygS2GKbItlIqKO79C+UzfsAL3E+qGfCTOEQl1Sg4Lr?= =?iso-8859-1?Q?/WtMdbRdRf69mm/P7Hp6u+YFzWXSN+YcMYIHysAs3tl1PYSkAEWaYbcYkK?= =?iso-8859-1?Q?mQQ7ETzJ+EBsn/W7p0JhAuPK9XU4R5o=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3c0f6fc-a72e-4245-3b34-08de62762f0e X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Feb 2026 16:14:44.8887 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: f+ZRkKvND7SiYOrGPOA4baYHeQjxk7XhpEsnLv7aE0UOaW9gLWy+6mqpHhhu/q/uxweyuNYPT8HjvI2FEoNtgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR03MB10299 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1770049085616158500 Content-Type: text/plain; charset="utf-8" Add a config option to enable GICv4 support and include the corresponding source file in the build system. Signed-off-by: Mykyta Poturai --- xen/arch/arm/Kconfig | 6 ++++++ xen/arch/arm/Makefile | 1 + 2 files changed, 7 insertions(+) diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig index 442d353b43..c18eca9f9a 100644 --- a/xen/arch/arm/Kconfig +++ b/xen/arch/arm/Kconfig @@ -255,6 +255,12 @@ config ARM64_BTI Branch Target Identification support. This feature is not supported in Xen. =20 +config GICV4 + bool "GICv4 driver" + depends on GICV3 && HAS_ITS + help + Driver for ARM Generic Interrupt Controller v4 extension. + source "arch/arm/tee/Kconfig" =20 config PARTIAL_EMULATION diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile index 95bc7ad25e..8569df571b 100644 --- a/xen/arch/arm/Makefile +++ b/xen/arch/arm/Makefile @@ -27,6 +27,7 @@ obj-y +=3D gic.o obj-$(CONFIG_GICV2) +=3D gic-v2.o obj-$(CONFIG_GICV3) +=3D gic-v3.o obj-$(CONFIG_HAS_ITS) +=3D gic-v3-its.o +obj-$(CONFIG_GICV4) +=3D gic-v4-its.o obj-$(CONFIG_HAS_ITS) +=3D gic-v3-lpi.o obj-y +=3D guestcopy.o obj-y +=3D guest_atomics.o --=20 2.51.2