From nobody Thu Sep 24 19:02:51 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=1790059212; cv=pass; d=zohomail.com; s=zohoarc; b=dKy2vOTMPMQKTZEbDJdN1HfMzUgkLsEht+3efJoy6fRfmfn/PUd4ZRseQtbCBEJ9qSg6aRI58uRCq/0n2/99zCmHSq6NcLsudSKI4Xfo46C6TPOYfgUyxabORJmBSXAWCTf1enIEgwWt5wE6W0lwQ56k5Phlw1n97lIfjngUioQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790059212; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oYZ+bXzlGIKtldd4l5jsQnzQLEtJHAU5cxG43Pee86g=; b=cZZ8eoxYbwGfBmqqUQrJ7pOyzsqLE4v6pY5nzwxil2PyXBQI49PY6MKgG5RA4J/hyWq9Sn4EDRcRDU8ldxcuKknlLdPsKmkvUW2CIEeW75zZ/gtxvFYjR9g0M8Hlm1zQ1EP+Z8u/jrC7p5FBuCo/k6HccJEvw9oK6elJwkexF7g= 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 1790059212699885.4651537275587; Mon, 21 Sep 2026 23:40:12 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1428173.1650888 (Exim 4.92) (envelope-from ) id 1x8uAU-0003n8-EY; Tue, 22 Sep 2026 06:39:54 +0000 Received: by outflank-mailman (output) from mailman id 1428173.1650888; Tue, 22 Sep 2026 06:39: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 1x8uAU-0003n1-Bk; Tue, 22 Sep 2026 06:39:54 +0000 Received: by outflank-mailman (input) for mailman id 1428173; Tue, 22 Sep 2026 06:39:53 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x8uAT-0003aV-DY for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 06:39:53 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x8uAS-00FEyU-FE for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 08:39:52 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab222ae-8faa-0a2a0a5109dd-0a2a4504c478-16 for ; Tue, 22 Sep 2026 08:39:52 +0200 Received: from [52.101.65.119] (helo=DU2PR03CU002.outbound.protection.outlook.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab222b8-b57f-0a2a45040019-34654177a68f-3 for ; Tue, 22 Sep 2026 08:39:52 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by DBAPR03MB6565.eurprd03.prod.outlook.com (2603:10a6:10:195::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.16; Tue, 22 Sep 2026 06:39:50 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0428.015; Tue, 22 Sep 2026 06:39:50 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HfOirm0atRTWtptmPUdFok9YZoTbz92YaxcLzhL0kSMVb6ejaeqBWPaieZP/gnb7OeQquIm8KFWmJdvwAPL8Dbcg7owv4+UWspsr/6r7Y8sovdIu2JoxZKMl4dZPnQoJO/um/ihyk8hGxYMzEbBdseTVfZ78pX6klfLUVIEOkQml0bVZERb2hik6rI4SacW9F7fQheoBc9dUEFVJoh2+jm4Pg8tmAyZVBmbyDdKl+C4Ftg6Bh3jqPpIRG3/hGBLlFRBJ6F6PUg4QifZTj9pS3IwLBHy1H/8ljfsONhNDZ6tBhLvYjafMpIhc8RC3di6B1x1MkbqsRhtpfSVdgvIjJA== 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=oYZ+bXzlGIKtldd4l5jsQnzQLEtJHAU5cxG43Pee86g=; b=VIESPDDcUqwIvpK7dBkK6Q3aG08HW4QzkFRFqWTjt4F3PzNsbTq7TYp9rk4dJK42DK9W64cX888nlnSn/oUZUlmGmAanQwk2pFpWHWm3HHGq9kqggBXi5Qtf8vVAEAhVbrWlCvfsxqBJyG/D0k4sXMeY5YZm/bhE3SwCnXtjjr3sF1bM/7NZx9hsQhoPWPw1ze5ap7BNJETZJHtKfw46NsvwNTIk4b56TxS4SnwX+WWdEB8Uy6cxF+tw25VYItNuT9AHgLmUhhJfc+FjOYHplBJjcpYEPYOryi5iJ673DSn9j/Q9IWAqgW/ng5SHPObNaTDZZy5lMl0V+oRvhBWLJA== 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=oYZ+bXzlGIKtldd4l5jsQnzQLEtJHAU5cxG43Pee86g=; b=G3cgMZ1Ix7nGx9T7+qJnljo114YbRpsNxk1xU3QsadO7U0y838PRB8IeSpaVJ288XMruJtwMTjMfj7jV6+mXNHBGIPALGRr12kHd3jR7HIHS+bEofmn9ZD4IJSfasL1CBIrIwOtCLjw4Fz+irbx6E6yfCC73+7QqZkiK2tOwevf63wI00vLM42ZdguGuQibcXp0ZPH65PpZt5SrFtmkEL8IRp4egS5mm+Fg+aOUs2ZJg4DJ39juZM32rAevkxCJ30LTzQaahQ3WIkV1bUyqZlnkbU2uC3H1mnln3iwAid6PdKj/h0heU3qBOvhpOyRIHj/8F5xHeLCr/tgCjvyv29A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v4 1/4] xen/arm: make is_espi() a pure range predicate Date: Tue, 22 Sep 2026 09:39:29 +0300 Message-ID: <802ae2dd44556a292d98f1d52d3c88ce4fa5034b.1790056623.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B7B.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::613) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|DBAPR03MB6565:EE_ X-MS-Office365-Filtering-Correlation-Id: 3e2d626f-92a4-4fad-2889-08df18744d6e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|366016|376014|10067099003|11063799006|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: 92QCq/Sbxg6lMtAiINgcd93XgKhhM+4jZjTUIpOMm+hjgGXQVRsIig7VZeiS8KnZc73Zr74+z+Nsltw2ZkYRPeeLm0UvltUXwY2nvY7VGPqwQ/ev5N2Iw+zDwC/WeK8EJ/YTIFwLnn3GQkYkOktwZHxv2O47fCwNDVCehdFChwcab+80gAO6n6lYSb7jz8t8UJtuAoKg2qxAZ4USXcyAcO+pKYdy4fuU/UlOHipJ5MSQMMIP1nptuvzQsQ+MGMox2wj4sQKVtsBMayj4HMFwAIr/AQGoaYbIx9Aba9YRoJnQFrDdXV3awCFDdbLOSNL0fsBOstl4X3ERhXNwb3GznRHEuuquFUrCJeLFMowy6SR8qZd8/jGinoQvdu7txx2B2dCbI+JhfxQRSRBJ0y5+Dre5jFw2P7CPIaXe2MiOgYkk97dr+3AEFsT3dKcOV8gyYNE7oOtQw8tbcdu4SUYKDJ0DBYGSwemZKEo7PaxkYYnmb9cGiebB0ORjhA5Ao5NTpwNczGi3p6uDOGHe65sEorFAGXYeIZfmeZN6ztcgh799uz76L0RkZalvPi4eluZUUWkFDltr0ae63mOcZTaM+AkMT1h/4CCyJu+EMejJFacjAJlb2GJsfWL/+9Oc2VNpsLNbNXKmt++HoPZw9cbaVzf5jbXcKlZ//DUwEUUTtD8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(366016)(376014)(10067099003)(11063799006)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yadC843HNMa5u/MgFZf4kFLWMKqYOLKkTPUQC2IpNqESuqoNvpQkpPKLP1sM?= =?us-ascii?Q?CnMehMQvg2Tir9B0ln5aKXcXyw81PQ+7m74TqDFuYeRMrOxR+T7lsCp588jl?= =?us-ascii?Q?oF2Wv+p0mWLaJLxpaFOQvFK9c7SKwEMCIKDy0egLyZ4McvHdd9FxdIl3IXBm?= =?us-ascii?Q?aAhcdUqnrUzG9rOw/6AivGC1eIgIY9GXhEXlslRNGVwE3pQRnVMMFIU2jD9w?= =?us-ascii?Q?k7H57mZCx1x5lkI5uYDUwX+2DDv33Hmx0VT3pjlqcVcIgpjLWcbkPvfscEes?= =?us-ascii?Q?mTrFccHAyxUP+68eSVs8C2N5lRJg8NnCi2ter+YP2cUarRPX+t+e6RDs7zZU?= =?us-ascii?Q?rE8pqa+T0//D0rtCtN2cJzFxVvgKcovFEyZ7GWJu9wq4t63JN20LqBCU/Iyy?= =?us-ascii?Q?6KLW4p15sgNLsIx0jQlrASi6oTZ9cIdJXdY0VEa6RDyks/3KK3RE9ULMIBqR?= =?us-ascii?Q?d9HIKoGJNKhBwCvlW9DaONYepCcutbv4KNqVAG+i7abg0de4ZgDfhxpEpsc7?= =?us-ascii?Q?Ycb6g99TatvGENKyJbOI9NcrCBnQvAL5znOd7Ff0GvwyxSrq8fa1YJg0d6Mx?= =?us-ascii?Q?M6IRM/4rNo+LdZipeu97D1JV5/wz/A3GmnHMPwHwY6vxoC004lLHmMzvtOl9?= =?us-ascii?Q?JY8bCsTGR/iL5P5j+iI6caK3M2ADEmXOvRAgTCSNbKAAmFuOA0T2wsOxXa1u?= =?us-ascii?Q?ok3hK7cLPlmbzC9hN4HMsy+vv/Xh39xIlu9PIzRDsLeo5+qwfzqRb69VHFvC?= =?us-ascii?Q?fkp50IMHvDrshpozf2cDql3nrRo27pJOPFtUwrSumMKGMf25qSCF2BvxShcJ?= =?us-ascii?Q?Mo8nEIn+ycc/4BRz0TVrhOp+mIHyTjLBnKB4x0+0rBtsoe7sAU5v+b9xKxGO?= =?us-ascii?Q?gBYl7u8Ki28c23bg33ZeOxFYNM5i+7ac3V/bPHegma/B1iT5Vu4fzIqM+hbT?= =?us-ascii?Q?JIJlYaTwvtfYOgIbRdnQtxr3elyPl+1XMohKM9cfuEO1i06DkoUtXMiK75H6?= =?us-ascii?Q?ZgityJkKYq2ExbeR00PIZBpNoS6bfndeyA/iqF1rlIroHZTRFmX+zilkU4m1?= =?us-ascii?Q?qJTspb0oOB15s+PMBj7JO5sZF4SbpUJC33DoTTNysJK3gskfu1FCGkCxjotU?= =?us-ascii?Q?g+/J2PIpzBdPuo/3lh4DdqqzHtq2uvmMAx95hf7dQmcIKbxxqa5v66Jb7N3C?= =?us-ascii?Q?ISwBYU2bMGsFfZBO23IbsSgShC7KJBJQV/HbiYou0aQhQw8K/PNJepddfi3E?= =?us-ascii?Q?+2Zp0XfC6inaEmtl1nWXmC8h+YPM/brUxy0LGHMIGEUL6gJoIVxI6TQVvpwj?= =?us-ascii?Q?0V2Csfec7aSa5jZuPKcGJizDr+EJ1ZulnHAL09mEvrHylnJAqcMQexKfDFF6?= =?us-ascii?Q?9qD03FniMFhJY5FC2JWsAscmImUjptqlHan1Y/Fo3PLWF1PtKNkmJCjRI/Ns?= =?us-ascii?Q?94/egTmBN/6Ru1tj0wt4ZVEohptqcjCHkg7CAyQ50yRB3HZfkijlGMdlYcW0?= =?us-ascii?Q?gzAg5EXXrelKUPwGvPp+C+XK8qtrq/1OcN58ZyJvvDeQvCiqbKS3Dq++oQ8D?= =?us-ascii?Q?W3aWAhUh4K8DGM1fXjugW2nQlSE6Lsn+EIImHDSGeoXiEI5sAPaYfTYrfmBR?= =?us-ascii?Q?4GMZsNENH26qMXU+6SSF5/v5NwgXVLrbRjrkjnp9eGPh0wqmaTMjZiySWZay?= =?us-ascii?Q?5WrtS2t0/ffTnGoyt/HiyGJ8zqz8ZoS6M3nJH5kv59EAKgM/5dzOagKIOUlc?= =?us-ascii?Q?SBmsdI0M3A=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e2d626f-92a4-4fad-2889-08df18744d6e X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 06:39:50.7793 (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: 1NSkub0pYOylFPN7mAQEVlf2WV6SgLq4eZK25zXUs3tBd2S22g8L7eUdHWtjXwbqf/mMZNQJ56LclvZdCu1dDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR03MB6565 X-purgate-ID: tlsNG-ebf023/1790059192-C14D3B50-71BE1FE5/0/0 X-purgate-type: clean X-purgate-size: 4772 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1790059214884158500 Content-Type: text/plain; charset="utf-8" is_espi() currently changes its result according to CONFIG_GICV3_ESPI. Without eSPI support, it returns false, and its assertion fails if an eSPI INTID is passed. Callers therefore use it both to identify eSPIs and to exclude eSPI handling when support is disabled. Make is_espi() report only whether an INTID is in the architectural eSPI range. Check for eSPI support at the call sites. Use BUG_ON() if the GIC reports an eSPI without compiled-in support, matching the handling of unsupported LPIs. Return NULL from spi_to_pending() for an eSPI when support is disabled, using an espi_to_pending() stub. Signed-off-by: Mykola Kvach --- Changes in v4: - Clarify the existing is_espi() behavior in the commit message. - Drop the unrelated blank-line removal in vgic.c. - Use BUG_ON() if the GIC reports an eSPI without eSPI support. - Drop the redundant CONFIG_GICV3_ESPI check in IRQ dispatch. - Return NULL for virtual eSPI lookup when eSPI support is disabled. Changes in v3: - New preparatory cleanup requested during review. --- xen/arch/arm/gic.c | 2 ++ xen/arch/arm/include/asm/irq.h | 11 ----------- xen/arch/arm/vgic.c | 30 ++++++++++++++++-------------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index 078049e741..3a7f972826 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -348,6 +348,8 @@ void gic_interrupt(struct cpu_user_regs *regs, int is_f= iq) /* Reading IRQ will ACK it */ irq =3D gic_hw_ops->read_irq(); =20 + BUG_ON(!IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(irq)); + if ( likely(irq >=3D GIC_SGI_STATIC_MAX && irq < 1020) || is_espi(= irq) ) { isb(); diff --git a/xen/arch/arm/include/asm/irq.h b/xen/arch/arm/include/asm/irq.h index 09788dbfeb..c29f3d04a3 100644 --- a/xen/arch/arm/include/asm/irq.h +++ b/xen/arch/arm/include/asm/irq.h @@ -66,18 +66,7 @@ static inline bool is_lpi(unsigned int irq) =20 static inline bool is_espi(unsigned int irq) { -#ifdef CONFIG_GICV3_ESPI return irq >=3D ESPI_BASE_INTID && irq <=3D ESPI_MAX_INTID; -#else - /* - * The function should not be called for eSPIs when CONFIG_GICV3_ESPI = is - * disabled. Returning false allows the compiler to optimize the code - * when the config is disabled, while the assert ensures that out-of-r= ange - * array resources are not accessed. - */ - ASSERT(!(irq >=3D ESPI_BASE_INTID && irq <=3D ESPI_MAX_INTID)); - return false; -#endif } =20 static inline unsigned int espi_intid_to_idx(unsigned int intid) diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index e5aca17dcb..e04678f134 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -62,6 +62,13 @@ static inline struct vgic_irq_rank *vgic_get_espi_rank(s= truct vcpu *v, return &v->domain->arch.vgic.ext_shared_irqs[EXT_RANK_NUM2IDX(rank)]; } =20 +static struct pending_irq *espi_to_pending(struct domain *d, unsigned int = irq) +{ + unsigned int idx =3D espi_intid_to_idx(irq) + d->arch.vgic.nr_spis; + + return &d->arch.vgic.pending_irqs[idx]; +} + #else static inline bool is_valid_espi_rank(struct domain *d, unsigned int rank) { @@ -78,6 +85,11 @@ static inline struct vgic_irq_rank *vgic_get_espi_rank(s= truct vcpu *v, ASSERT_UNREACHABLE(); return NULL; } + +static struct pending_irq *espi_to_pending(struct domain *d, unsigned int = irq) +{ + return NULL; +} #endif =20 static inline struct vgic_irq_rank *vgic_get_rank(struct vcpu *v, @@ -696,8 +708,8 @@ bool vgic_to_sgi(struct vcpu *v, register_t sgir, enum = gic_sgi_mode irqmode, /* * Returns the pointer to the struct pending_irq belonging to the given * interrupt. - * This can return NULL if called for an LPI which has been unmapped - * meanwhile. + * This can return NULL for an eSPI when support is disabled, or for an + * LPI which has been unmapped meanwhile. */ struct pending_irq *irq_to_pending(struct vcpu *v, unsigned int irq) { @@ -715,22 +727,12 @@ struct pending_irq *irq_to_pending(struct vcpu *v, un= signed int irq) =20 struct pending_irq *spi_to_pending(struct domain *d, unsigned int irq) { - unsigned int idx; - ASSERT(irq >=3D NR_LOCAL_IRQS); =20 if ( is_espi(irq) ) - { - unsigned int nr_spis =3D d->arch.vgic.nr_spis; - - idx =3D espi_intid_to_idx(irq) + nr_spis; - } - else - { - idx =3D irq - NR_LOCAL_IRQS; - } + return espi_to_pending(d, irq); =20 - return &d->arch.vgic.pending_irqs[idx]; + return &d->arch.vgic.pending_irqs[irq - NR_LOCAL_IRQS]; } =20 void vgic_clear_pending_irqs(struct vcpu *v) --=20 2.53.0 From nobody Thu Sep 24 19:02:51 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=1790059219; cv=pass; d=zohomail.com; s=zohoarc; b=EF7NrD+M6R5Lym6+cZBVRY/Zi6ft0etcfoo6ISAZM2sM7/PRU9x6mMZ1NNl1v6boJVwUailsvauZ496xqFQc2cyW4gCbsyEwLPOFs/C4xzijD95p+siyn+IDZGicUtJqrBXs+CKoUm4f6FoRSwyYBRNxkvjQA0P+DiDBmdxu9Rw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790059219; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HSVOOjM+X1r+ZDTIJgdpekSUFlEb6s9XKd+BtJCbN6Y=; b=JJVdYzpjdA8xP4gZ4/PAQutfk2eEiNMOB1pp4DaTrCVqkVreqh6Nc1+MLGpeQ+HE4LlkoxsQP2Y0FYd8BoaVP+NuwIanKZP7VdQD163scVOVfhi0u1mNCwG+x9uXmPvd5/1f1yew8rriCZHlzroRKlnvKowM8PUdl/glFTjnvNw= 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 1790059219804974.5722031293359; Mon, 21 Sep 2026 23:40:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1428174.1650897 (Exim 4.92) (envelope-from ) id 1x8uAW-00041B-Ld; Tue, 22 Sep 2026 06:39:56 +0000 Received: by outflank-mailman (output) from mailman id 1428174.1650897; Tue, 22 Sep 2026 06:39: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 1x8uAW-00040y-Ij; Tue, 22 Sep 2026 06:39:56 +0000 Received: by outflank-mailman (input) for mailman id 1428174; Tue, 22 Sep 2026 06:39:55 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x8uAV-0003uo-Ja for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 06:39:55 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x8uAU-00G1WI-ID for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 08:39:54 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab222af-2eae-0a2a0a5409dd-0a2a450c8692-32 for ; Tue, 22 Sep 2026 08:39:54 +0200 Received: from [52.101.69.102] (helo=AM0PR83CU005.outbound.protection.outlook.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab222ba-f479-0a2a450c0019-346545668e0c-3 for ; Tue, 22 Sep 2026 08:39:54 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by DBAPR03MB6565.eurprd03.prod.outlook.com (2603:10a6:10:195::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.16; Tue, 22 Sep 2026 06:39:53 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0428.015; Tue, 22 Sep 2026 06:39:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sXQPhxKfaxX68aY78DehFyCla3z7hSC3x0AupTj2AiVa1ABSaNIGhEJxCFuVpfqID6K4m0Sfr23jTS6Q2eK/igWY8qTAC5rbSl+D3BREP83CvOTvWGmwNgzoVYfM2NuotvHL+7vUlfCVKhLaXvEZDPqT0nYjgUdEId/Ln/1FppYknc5E/CMPmU2Qzr4P98Dn5hGb6hNwv+y9TPtzVWNpkeXfaX+kL/sr47ViB8R39r4+hOGcJ9tkEeQS7tjH8JADEOlxBqOVoyh8jMFn4k5dUbD/hpw9XyaCAslGyohg5UG+2KmUoGM3FDj6fRMhBEf09kmWrbGY1ZcqJTOYuoaLZg== 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=HSVOOjM+X1r+ZDTIJgdpekSUFlEb6s9XKd+BtJCbN6Y=; b=SLpjTvpg0x3ov1BJ6e1IyXiLTRxYYfmB5fMwLfbQYel2tquRDatZd2vK6GpOlFEzfVWpTfbOSmUSblFBpjicKjuZtWWS7L5NhZWb9Ld1j27UvTUfVtE7aUETHh+KI+ss6yKWTn/CijBBRXSH/gkRRfJS8NRWYu3FR4syQz5uwmod5gQK6RRxgStAVl3rg9dZeRgmiOzcDDQ/PxXB2gXNdTivjF19UHGi3/wYWexHAkriPAnIJbtlwSyNg3G/3wkPzzgeZ7EHbdzqcgWdG9Cd1N9xT8VhniplJQ17i8B7pW+EVUT0zGA+lfhJeDGg6PBkLK8LGEnsxXVwRjE5BRCCuQ== 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=HSVOOjM+X1r+ZDTIJgdpekSUFlEb6s9XKd+BtJCbN6Y=; b=vKMVn0HN5LveEbt2TP+s2EwwxohynsluIt+wdimFcravUlmFNOvAY7yAl/yXLFsmTcaZ6xNARsxMxnTv9/ajb7P3IKlASBzCurjF/VksSrWff1rPVtdg2Xt1oyV4B0d4uec9zpV8PXYdwqM6d5MfIcic+/NB2ggCfViLBzNE6P26tSXr3Ow2kknB+4JoNr3xjlT0EztcZkGs1FZlrIbfjL+pWt4vcTDYq0zLv98HjQxfDKOl7EUfrfvMCffQ+7Vp9r5M334ufwoWPo5WI0EZh8Tz8N82i66abgEauoPOG71QVD1NJ8He8TXqugnzueSbY8gJvza6xABJnSBdGswBpQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v4 2/4] xen/arm: validate IRQs before descriptor lookup Date: Tue, 22 Sep 2026 09:39:30 +0300 Message-ID: <6a94111e53249fc449b3df7700f37e026d522fc6.1790056623.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B7B.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::613) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|DBAPR03MB6565:EE_ X-MS-Office365-Filtering-Correlation-Id: f9ea5197-4c87-4fc6-7529-08df18744ea1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|366016|376014|10067099003|11063799006|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: +Gm/5nfZJkYONp5u88yj6CoFXJL7zevoQtbXe7chaOOotOSRZIT9q3zrAlY6sNPdq2eFEoJD/N0qOwcMqIIBWXSG92s9zOF5dDZo8FxUaSgESALv+6yh6lEcslxyUXg8l+GkAgMAQktYIOVuYiUzDm3gtdNCzlAyAw/mjRZni3+Urqb1ITym9ryj/ms+C0NodK3L4jUsz5DeA9hi+eoMdbkV/rNQa6sEk/Kr+GAq3AkvF3VR/ECQbjEClojUCvKo1ixL2AovMuNO3/scgEYpFQyHCeAhL/by3Djz2cfoUj/OVZQjmyBVs0SmjwN3ljtbdFt3WV5OsqvVhl3/i5OFuv12UeW7Mnj9o2OafMSHY5LnklIv+6lOHmABCMHHEAeUACSVSHZDacJ5ERsEyjawkQOKyrdHG6SPf004lMk1oKv1Ae4XExh/6gY5VFbBMXpZiqNSSqx5MJ8b06mCj0dodYrkh4vVFdqYYoNdgK8anNRGp+uwTQduC8JDcG8v8IZUiJlI5pWJHJABRreog8SXLG3LmvawgU+iIaRXf7iZiZeLZXYHQdOQwH3SFohwPwJAs4vzgNWKBRZxu5+K/r+DLeKwihCUepnUa39j2XgrpzT9dTk8VJHtzbGT2HSWI9qv7823iOYapHBL9nlal8HR6YoIWnOKZnjM1i93igDrzX4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(366016)(376014)(10067099003)(11063799006)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?X+5MD5DROwpSrTwLlMZ30xUW/o5P9NiYfgAYY95tRg7I6cVejiorryZoVDns?= =?us-ascii?Q?xkUVx6kOM86ToACvIOBKqj3gjs+Z/JeyjRKYZVgVXjzZFtOwqeUvzgZzZ15f?= =?us-ascii?Q?sfUo9fwVjqVYNvsgvaEcByG8c6tfFGrmbSIhpGb3mzcNXe/SKPTRPkUuKeRE?= =?us-ascii?Q?Bxd0bP8MDYUjtmt7Ww/3pXcT6HWNNCm3WDBfCrxD+Ky0TKni0GS9VJa/2ZkO?= =?us-ascii?Q?q9c16ytynHr+u+rjJFAkkQy/JtncFgENQd3LLp35J32sckPx4OX1kHOZozFj?= =?us-ascii?Q?52oBndgAG8Bf804RpyGziFQxifmw1PYljJYY+669RyrgR8yceTMPwAam79r1?= =?us-ascii?Q?ASYes1gKzD940ZCvrmhpllPbs77QUle7JDArzHwMrOivPW7XGvNnaw6teJTp?= =?us-ascii?Q?TpH2fEcaEWHgAqBo7a5FYJK+gYhz2dlN/eKd44K2+y/tDdVyQ3vfDXorw4ba?= =?us-ascii?Q?MpEwAnxkCgi7h0sDzrW6T2zOD2JxJ4fOsvpjo0JYv1Tnw9YUf0tK4+0eeA3J?= =?us-ascii?Q?R5ntjBXLwiY7RP522JW638uBeFGypePp8nhS+CqVM5utrXk4TYjnnlPNmqzo?= =?us-ascii?Q?oS6VDZeJbMBEo5W3Cc4vW61FqCVogwj0BMQyKDkfW+QrXmQqtz8yG25P802S?= =?us-ascii?Q?ko8BWezUlH5vpIQgoMSmE4VpUxv4VR5YmcqHL6LsvsAvKII7jnYOxyv+TTt+?= =?us-ascii?Q?1a9Vvyf2tnWcCprXh8551n23RyZ7Va3IWc4qLoQzXZkL4WLIZvE2Qd7/yi9o?= =?us-ascii?Q?/Ef643YzUdof47j035u/O66T3eghePuXdAh2UOW6Zbwc6bjG6kz5iFysuv/R?= =?us-ascii?Q?Mfmkhp8I45571RXzT/orgrZsl5WrplXTOwO2KTvG6vxO1ErXil7mZ22vUf3n?= =?us-ascii?Q?42DuxVF0hqfrHQ+2kGrk1vLRbJN6J7PIN3O2OSsDypJXrEky6VDbJBzxJhtL?= =?us-ascii?Q?eP5U9rBXfwYq9Qx6amihOwA5D5wcVxJnK2PHHhoZzD4w3FMYgWp6/yXR7SJv?= =?us-ascii?Q?mtaWHyM4DEevTQZsQs8ULy5aL4peB/961udjiiZm0NVvv11b1TZbacNzHa/n?= =?us-ascii?Q?kmlNixZ5nVnXRK3mA4GWEjabI6J/UBvX9xIaMQM38CqNMauuoC3fpLDA8h13?= =?us-ascii?Q?6zcXocDGZCBR4k0UxNHvAVfauC3Maz86ZvKOKehmnaCk4LliFwb4P9kFC45l?= =?us-ascii?Q?h9Ns5DVF9OXQ8KSV7g+B+1J3zeKY9AdEkk+FmzgUNGSSw/id8uSYIISy8ewr?= =?us-ascii?Q?lM+cwHi6ZY61fq/e7buNEPP2lkneci0OHO6c3ez/AjeByqRVHbTf8QDyV8zm?= =?us-ascii?Q?l6eHhxFu+CWEbbOTw9ZDscJ5CWl9ms2Bj4Oueaz6zILE8+FhV7XVhlNrK3Yc?= =?us-ascii?Q?M/4rpGNaK1UcTt18wwz6wK9oZBkCLzaA2ZqqQOhnrPlyCYcfgPQY8087dHV4?= =?us-ascii?Q?CPflmDbUxGJo1cC3qdK45aftBy4jnNq9ELkZc2kEigMe5WernCKbJPZmBuOf?= =?us-ascii?Q?RbOlFLW0K/eUANpQVY+kbN1qghvZtTo9zG6jyMeSEUABhKl0CB2aObg8fNfI?= =?us-ascii?Q?MWSLgQBGF+bSsya3iyH9Fg8NemTueuBgmnSfsLOYOEwxLvAjrMZY36Wla51D?= =?us-ascii?Q?g6vGbCVzRyzfT7UB4P7yXDvcNg239zk9xGZSz3bHBc4AIrNIWaQBwveuEIfx?= =?us-ascii?Q?SRU5owGSR0Bb6WxrSk4TdfoJKxtdVfj3G67lxaQ4mrXDpDxuWe3ASZt0AVBn?= =?us-ascii?Q?73PnrpHYvg=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9ea5197-4c87-4fc6-7529-08df18744ea1 X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 06:39:52.8106 (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: V4gri+UUYSA2SmkehAEb3cfk9oE1uGiVllFkHE5ey95wDkbSQGv9T/RS4VQ3GNAqEreA6hynfsPlYqaJNVaXzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR03MB6565 X-purgate-ID: tlsNG-d25034/1790059194-76EDAA5B-109ED293/0/0 X-purgate-type: clean X-purgate-size: 3643 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1790059220748158500 Content-Type: text/plain; charset="utf-8" GICv3 eSPI support makes nr_irqs span the architectural INTID namespace through ESPI_MAX_INTID, but descriptor storage is sparse. local_irq_desc[] and irq_desc[] cover INTIDs below NR_IRQS, while espi_desc[] covers eSPIs. INTIDs 1024 through 4095 have no backing descriptors. Validation based only on nr_irqs accepts an INTID in this gap. __irq_to_desc() then indexes beyond irq_desc[], and callers may lock or update unrelated Xen memory. Reject INTIDs that the GIC reports as unimplemented in setup_irq() before looking up a descriptor. irq_set_spi_type() can run before the implemented GIC line counts are available, so validate descriptor-backed ranges there before looking up a descriptor. Use the same descriptor range check in irq_set_spi_type() and the assertion in __irq_to_desc() to keep them in sync. Log the IRQ number when setup_irq() rejects an invalid line. Fixes: 98f7060b9ed5 ("xen/arm/irq: add handling for IRQs in the eSPI range") Signed-off-by: Mykola Kvach Reviewed-by: Michal Orzel --- Changes in v4: - Share irq_has_desc() with the assertion in __irq_to_desc(). - Log invalid IRQs rejected by setup_irq(). - Drop the unrelated blank line removal. Changes in v3: - Add the requested bound assertion and retain the SPI-only comment. Changes in v2: - Validate descriptor-backed ranges in irq_set_spi_type(). - Validate implemented GIC lines in setup_irq(). - Preserve is_espi() validation with CONFIG_GICV3_ESPI disabled. --- xen/arch/arm/irq.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c index 73e58a5108..8d3517e761 100644 --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -85,6 +85,12 @@ static int __init init_espi_data(void) =20 static DEFINE_PER_CPU(irq_desc_t[NR_LOCAL_IRQS], local_irq_desc); =20 +static bool irq_has_desc(unsigned int irq) +{ + return irq < NR_IRQS || + (IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(irq)); +} + struct irq_desc *__irq_to_desc(unsigned int irq) { if ( irq < NR_LOCAL_IRQS ) @@ -95,6 +101,8 @@ struct irq_desc *__irq_to_desc(unsigned int irq) return espi_to_desc(irq); #endif =20 + ASSERT(irq_has_desc(irq)); + return &irq_desc[irq-NR_LOCAL_IRQS]; } =20 @@ -416,6 +424,12 @@ int setup_irq(unsigned int irq, unsigned int irqflags,= struct irqaction *new) struct irq_desc *desc; bool disabled; =20 + if ( !gic_is_valid_line(irq) ) + { + printk(XENLOG_ERR "Cannot set up IRQ %u: invalid GIC interrupt\n",= irq); + return -EINVAL; + } + desc =3D irq_to_desc(irq); =20 spin_lock_irqsave(&desc->lock, flags); @@ -647,13 +661,21 @@ static bool irq_validate_new_type(unsigned int curr, = unsigned int new) int irq_set_spi_type(unsigned int spi, unsigned int type) { unsigned long flags; - struct irq_desc *desc =3D irq_to_desc(spi); + struct irq_desc *desc; int ret =3D -EBUSY; =20 - /* This function should not be used for other than SPIs */ - if ( spi < NR_LOCAL_IRQS ) + /* + * This function should not be used for other than SPIs. + * + * The implemented GIC line counts are not available when early + * callers configure IRQ types. Check descriptor storage here; setup_i= rq() + * validates the implemented line before the interrupt is used. + */ + if ( spi < NR_LOCAL_IRQS || !irq_has_desc(spi) ) return -EINVAL; =20 + desc =3D irq_to_desc(spi); + spin_lock_irqsave(&desc->lock, flags); =20 if ( !irq_validate_new_type(desc->arch.type, type) ) --=20 2.53.0 From nobody Thu Sep 24 19:02:51 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=1790059219; cv=pass; d=zohomail.com; s=zohoarc; b=nZ7BStMGSyc4JybcstPG4GkxhrqLE0DQEyslTy5mRbx2RMZ/pvhFxxILhwUkiKh5FsRa1HrqY5AERlF3EznftaXwbvnNuWiXfbHuMeYOdtwH8vM1tVTfRTbBf8yO0gExsSWoSJKKywVn1kjQR4MhuZ2JG2nXH7xcurD8vmy3uwM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790059219; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aQ+q+RYL0t82mCteCYDjy8hoTMUCSmEYX+bs4IRR+vg=; b=FnjwVccIPBY7nHQbLwzmnLgTdWLXmHSTlU+gSVlqtDoUalFsiiuLveCHfLG+Jff0LJct8SJvKV8Ib6KucpzuWHNcBbG6OibMTJyGQWqI2pc9GPFwtkRdk6LopJ0rNPF7y3pqyfpzmPXQn7LnM+wfCBVpuH1IvL/l97HMJmelzdw= 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 1790059219778119.401042308064; Mon, 21 Sep 2026 23:40:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1428176.1650906 (Exim 4.92) (envelope-from ) id 1x8uAc-0004Mg-1H; Tue, 22 Sep 2026 06:40:02 +0000 Received: by outflank-mailman (output) from mailman id 1428176.1650906; Tue, 22 Sep 2026 06:40:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x8uAb-0004M6-UI; Tue, 22 Sep 2026 06:40:01 +0000 Received: by outflank-mailman (input) for mailman id 1428176; Tue, 22 Sep 2026 06:40:00 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x8uAa-0004JV-Bz for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 06:40:00 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x8uAZ-008iOm-P6 for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 08:39:59 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab222b0-bab6-0a2a0a5309dd-0a2a4502801c-42 for ; Tue, 22 Sep 2026 08:39:59 +0200 Received: from [40.107.162.74] (helo=PA4PR04CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab222bf-6ca4-0a2a45020019-286ba24a3324-4 for ; Tue, 22 Sep 2026 08:39:59 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by FRZPR03MB11709.eurprd03.prod.outlook.com (2603:10a6:d10:1cc::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.14; Tue, 22 Sep 2026 06:39:56 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0428.015; Tue, 22 Sep 2026 06:39:56 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xjx2TLcvDjS5EE0l43sBO3t1m8Q9B3yd7dPTcr43HpaGe/iwp6GDHyL9pPy2DiOb6F1ERu5NuFw0IMDyfxULYnyOJVqgEnZ0iWgvMSQ+w3AjouQBgl3shaKICV309de51hSUu1YKL0itHrLyN2F3hUkzXpi/X9OZUxkWr/zlftyYLPbTrrGqeDscWCiUQC0vZdhXdsZ7EbTZkloC6I2D6i93NjpUCYqbLcZvTzZP8ZNw0zXc4owQRBvbJvoKD8BqxfU1E5C41WEqX3ySA2lY7+NaX1W8+6p2msCFdUfiAFBiwSVAkPjaskkf18e187AXvh33vmyQR7wg8HdH6boDfQ== 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=aQ+q+RYL0t82mCteCYDjy8hoTMUCSmEYX+bs4IRR+vg=; b=RH0BRtYJY5SZCT5rb8uY5SKTZYYCvHJ8ZvPF9v4YanYuqTirKTVtI63XfV54KiBHnsjDhT1VWj3I6E/8jyivydXlEq91bMeMe0zuNdZqS/8mcFY3eHDAZUSqHCb8pmCFh+9BfKdNypVv3SdIYg6oPhrbxNJIRFQqMavdmkyTKkV1qmaqcNY8kKkV0avLKoH/xBsfSJZIsBbmZrmatGtCSmJp90MDLiUC7MyWKdxSEMc/tWhrwdj3ndLT4JqfZU/2QC9jnuvkGPsD51fyBp/itff5BQKdQVklCJt+jLbS96bSdksLNCtYkh0YOBO7na04ZzMvWXNVo1nDYLm37gQtiA== 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=aQ+q+RYL0t82mCteCYDjy8hoTMUCSmEYX+bs4IRR+vg=; b=oKeam5CvwKszz+c541EUTJHq/f/AGVjudsCJUibDoe48w070La+XgjnlEmIUHjxPgZF37YRW0NsgitNMPSk6lMaYbGp21lluXnGuqOZlLy/6KzqTC4y0CSNJbercOsnZ7YUqvM7mnlf6h+S8fHW7HATeOkhnMyh84hP7yIPPeYw1xtDXJtd+I3/fwiSpEEsnYeWC+P20w1PFkNNCHEnKQXhuFTrOQz0Hv7wsI14eZMX1iQpzggwruLUpvnfX7RyeFV3mcHrT++TDY2Iyybi6Npf29BVCaEITn9lQzmaxbz3sXOBAgyIZXqfN9LAj/otvRN7SrxaYlOmcLjOE+LiQ3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v4 3/4] xen/arm: vgic: free eSPIs using the bitmap index Date: Tue, 22 Sep 2026 09:39:31 +0300 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B7B.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::613) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|FRZPR03MB11709:EE_ X-MS-Office365-Filtering-Correlation-Id: edef451b-d97f-472d-b56d-08df18745016 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|23010399003|366016|6133799003|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 3YG9CV5RKJPMbu9y9vn/uLvH8Tacw1wRbzgVTTbewg2vcPm9QkLZUuPDn9xDtSr8ieeIcsY3Jrfe80Ei46Ht9FdFnS8EnG9wEWF8bYcLKiEnAP7/jXTSQfwpR56qFCXSBaBYutUsTKzTKNsmlttAKHhw0W+naDXiqA3H1vrTwMYk2EPIQ0ZlqwndzSmAUNoalHUGKBWkBeBi3RDFHOP47J80Ir/YgHtouv0g8YHietP74B3sRXGGAEzCn7zlS7h+u+8sbglZCs1366HKok25HtBSOpzc6UBXXJAhu4eWEpza6MxN39ElSIE9fCTbQpYBuJnbhU1yIGZccIxR62uixe+jcqE0fEKPxq3MnApWsr4N14t+Nn7C7LMlpuDiUa/1svGnoXLD7RiZ4cyegt3W9eIli6DRpF7R6sCI9nhc7f1DK0zOx5RFWMPRIV3pLdztlHCei+KowpSRkHtlLNgv9UYOfAtLH2afH2CUUmrBO4rEmABqtk2V+B5t2z5lP8eEW1J0dqtx+U2A4ATvozKmLpNWE6onnZnP5/3venLy5UNGNZMu7QTFlM4iD6GtTomdDoH7Y8f8NKq5TUmduwWuNPOodzh7j9pOryUodh/l9gDL4JfupUZ3shkzlJcYgarrOBjCUpHtzbt721AowRxsCHkp0fSgOesujHCzHq1mcd0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(23010399003)(366016)(6133799003)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yvfjHRSKJZXolZGXmocPgJvoWkJYW09lkLbgT1fud3h6qOPX/Tld/YTf4miT?= =?us-ascii?Q?gckeys7CFfNDJwxWs2i+2P1ZaMJ7ju5SYtoCDSQp4lfZ56U5E4IbTepv7hUM?= =?us-ascii?Q?mQEQF3iJDXtw4DyxgbtZ9RdiV3Y75R+jw+V3A09HGSvQAN4mshNJMKjuda76?= =?us-ascii?Q?IVpu92zJjJaExOLBq4SpFYQ1j+8Cea6hanbabTDNtOEtSCIbHTcsFO9BZtSM?= =?us-ascii?Q?5cVJbs+PlfsjdWQlKDB2314wYRFLFilNlukZEpyU2Jgo0oHXC9HM0UZFVZOc?= =?us-ascii?Q?TTkekwba14njNE9+dI+HtRjenACswkSuAssgdwkabBkSm3JS8C4wL+5vqWf6?= =?us-ascii?Q?738JywFQLMFBDlKZ+NxFB9XqP1l0ifyIgIKxXnFew4L7cekDJDPU28xMDtGo?= =?us-ascii?Q?1bA1X2t7Cm/8+wWvM/RqV6iwcqqP5Yn5Z8NaqN9yr43koKe1PlUdanlDT/Gu?= =?us-ascii?Q?nebpR0wtVuGnBwRqY69hiIJebCs/EqMxHQMdIwxWDZa9WMZ6dRIpSGzREkqg?= =?us-ascii?Q?sfem5nYjQPV00uye7n+LYDx4q41ZUxJBysCZp6wyCbR20cI+x67/YL6OM4WW?= =?us-ascii?Q?xsp/EYqmkTlZwq6o2zZkLAxkv6x7HavAKNx2MjmvL6EBAzaMSYFAGMztGjzB?= =?us-ascii?Q?3aPrFiIeMYc2z5pFRLi8q4/tTlQcTcox6nPZr+7KwtCR6JzH8Cvlf5CAP9yX?= =?us-ascii?Q?xBtnfP0xxjdgR7Jv91NjdMUm/kYK0auXdtL/P9ckuLFm4LAhrJraKIyxcP/L?= =?us-ascii?Q?rh61oqBJQapSUaEw4jfh0SLVc5B9eUWsbDsQ9e3m3l7NpA6xQHRrv1vJbbgS?= =?us-ascii?Q?C+Ww1yIxQqX7amgOuFbSfsv0Z6FHI1EvUszey2rOU7QZ6YDjs5esSL8Wkzi2?= =?us-ascii?Q?RxbHiSBL4ttAuU3v47QFNalRBmOZ3plxLNIyR+NfnfqcQlprxzIGFWyduM5z?= =?us-ascii?Q?xpfjZwmw4x0aeMc4jAwdnnf8jq4ZC4+Ov/HmBC/Qt3J4Wr461NcLt9u7MpuR?= =?us-ascii?Q?3xcFXWtIunDZxBnV0/f4h12VPay17cJLHafd6R60iW8+hYhThkLDchUQZDmA?= =?us-ascii?Q?7yZ7HJAYoSs+gJ+8BC72wkiHkZ4Yg8/T3Q4ZXStNE+YsvDx8DNwAf33R4cRw?= =?us-ascii?Q?Ct4si8uzgX8gCU0ouKMiFY+oKpjgASeOwyJSERjwQ4ab2xkORQVfN27styOu?= =?us-ascii?Q?mz8WZ8h94inQyMdCx/Mc0VXjHJnIqo7h1uIbxjkAK3cnDpeY6uli9miqwZpw?= =?us-ascii?Q?wuN819OVAjdsdMvvgLr83rUpicpcRkao9djaAHYl5fUAiul8o/XncpP+pcVp?= =?us-ascii?Q?/gre3pksBemAAKAvcXjnlSBtF14ezWYavB/HlqlQsohToO52YX9vL7Eo25Lz?= =?us-ascii?Q?o0QKUtMjy7sueB8xSVD1j3gYvXpuS8ilPzUKEBS4s43liEYui916q/Yyyjps?= =?us-ascii?Q?P/KBAqOjjU7THlmVU+bxk/iBfU2/Em749B6qjdmp0hnMKZ4HIVg51bh9Gfbo?= =?us-ascii?Q?EjdEHW2yMjQ+FQtOVJGG81KeK/7QYlk4vijbTB/e5YhHu9P1RvhPS9KpP4e/?= =?us-ascii?Q?disjaAk5j8hIz5o0Xapy/ijcVqRiAbrxRh0p9buwD4gQHNMC5o5jCUeUXcB6?= =?us-ascii?Q?5fBvdDYGdzwjtR6fMgh5Q7ZdeYXHNdJ70VFkyNsiG6/ibc8Wsb7ChN/l/M9J?= =?us-ascii?Q?8F8MoWNBLgdy2DvcE/7/pPHgGVaUpmw37LhBN3DgYS3K0v4uB/dc1EG93QNe?= =?us-ascii?Q?ZJnI4Sjlhw=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: edef451b-d97f-472d-b56d-08df18745016 X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 06:39:55.8854 (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: f2p7KhD0iUAoLDc3bbll4ZTUaTabtoCz1NOnkiJIUk592/v8JUOjyFbmFAiZDDDws+LgkfW53i0RUVGCw1X6hA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: FRZPR03MB11709 X-purgate-ID: tlsNG-720697/1790059199-303C42AC-7AC7D563/0/0 X-purgate-type: clean X-purgate-size: 3872 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1790059220645158500 Content-Type: text/plain; charset="utf-8" The allocated_irqs bitmap in the existing vGIC implementation stores eSPI allocation bits immediately after the regular vIRQ bits. vgic_reserve_virq() converts an eSPI INTID to this compressed bitmap index, but vgic_free_virq() used the raw INTID. Freeing INTID 4096 therefore clears bit 4096 instead of the first eSPI bit. This writes beyond allocated_irqs and leaves the intended eSPI bit set. Valid eSPIs reach this path during DOMCTL bind failure cleanup and unbind, and during vPL011 teardown. Add virq_to_idx(), the inverse of idx_to_virq(), and use it when reserving and freeing vIRQs. Validate a vIRQ before clearing its allocation bit. Fixes: bdde400c6e1b ("xen/arm: vgic: add resource management for extended S= PIs") Signed-off-by: Mykola Kvach Reviewed-by: Michal Orzel --- Changes in v4: - Document the compressed bitmap layout with an ASCII diagram above the conversion helpers and refer to struct vgic_dist for the full layout. Changes in v3: - Adapt virq_to_idx() to the configuration-neutral is_espi() helper. Changes in v2: - Call is_espi() without a configuration guard. --- xen/arch/arm/vgic.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index e04678f134..5b15b98ac3 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -25,6 +25,21 @@ #include =20 =20 +/* + * The allocated_irqs bitmap is compressed: eSPI bits immediately follow + * regular IRQ bits, skipping the gap in the INTID space. + * + * +-----------+-----------+-------------------+-------------------+ + * | SGIs | PPIs | SPIs | eSPIs | + * +-----------+-----------+-------------------+-------------------+ + * 0 16 32 vgic_num_irqs(d) + * + * INTID ESPI_BASE_INTID maps to bitmap index vgic_num_irqs(d). + * The following idx_to_virq() and virq_to_idx() convert between INTIDs + * and bitmap indexes. + * + * See also the allocated_irqs comment in struct vgic_dist. + */ static inline unsigned int idx_to_virq(struct domain *d, unsigned int idx) { if ( idx >=3D vgic_num_irqs(d) ) @@ -33,6 +48,16 @@ static inline unsigned int idx_to_virq(struct domain *d,= unsigned int idx) return idx; } =20 +static inline unsigned int virq_to_idx(struct domain *d, unsigned int virq) +{ + ASSERT(IS_ENABLED(CONFIG_GICV3_ESPI) || !is_espi(virq)); + + if ( IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(virq) ) + return espi_intid_to_idx(virq) + vgic_num_irqs(d); + + return virq; +} + bool vgic_is_valid_line(struct domain *d, unsigned int virq) { #ifdef CONFIG_GICV3_ESPI @@ -850,19 +875,11 @@ bool vgic_emulate(struct cpu_user_regs *regs, union h= sr hsr) =20 bool vgic_reserve_virq(struct domain *d, unsigned int virq) { - unsigned int idx =3D virq; - if ( !vgic_is_valid_line(d, virq) ) return false; =20 - if ( is_espi(virq) ) - { - unsigned int num_regular_irqs =3D vgic_num_irqs(d); - - idx =3D espi_intid_to_idx(virq) + num_regular_irqs; - } - - return !test_and_set_bit(idx, d->arch.vgic.allocated_irqs); + return !test_and_set_bit(virq_to_idx(d, virq), + d->arch.vgic.allocated_irqs); } =20 int vgic_allocate_virq(struct domain *d, bool spi) @@ -899,7 +916,10 @@ int vgic_allocate_virq(struct domain *d, bool spi) =20 void vgic_free_virq(struct domain *d, unsigned int virq) { - clear_bit(virq, d->arch.vgic.allocated_irqs); + if ( !vgic_is_valid_line(d, virq) ) + return; + + clear_bit(virq_to_idx(d, virq), d->arch.vgic.allocated_irqs); } =20 unsigned int vgic_max_vcpus(unsigned int domctl_vgic_version) --=20 2.53.0 From nobody Thu Sep 24 19:02:51 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=1790059223; cv=pass; d=zohomail.com; s=zohoarc; b=OiDu5S9DZbf8Ryp6yZNicI9fkv1R+ccvvOZrJKAjrlpwq+dg6z3LsUol7wR6pFHW++JC83HoaFzxRY74uOWcKuxNPEmH/1+8I9Jfv2IJN7BpsUjkdxXMXuxpy9eXdG6K5jWABobXj8/oaHwFTd1xTzbkgRW6oJuyB2yZ4FgiJw0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790059223; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2cKreGMUElULo1QhsKeoGyzZB+m+nWVmEkjFZ6Y0E/o=; b=LYnBmaFFKsTTf/MopqaxEDMiP0FPwjRwyxl8eVZzO6MoVjUVVYdrMs/K99lU2YZCfm8Adh/p5+ewd1CoK1GBn4Ia/nfnElV2RdsTMHkMmCJ6BODdjV2bWGerx4TuXRfDYgB1JbRzpU7V8fYL3Btlj4thb5JuhOpngQXCazgEPUk= 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 1790059223507407.1779378654262; Mon, 21 Sep 2026 23:40:23 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1428177.1650916 (Exim 4.92) (envelope-from ) id 1x8uAe-0004v7-AM; Tue, 22 Sep 2026 06:40:04 +0000 Received: by outflank-mailman (output) from mailman id 1428177.1650916; Tue, 22 Sep 2026 06:40:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x8uAe-0004uh-5j; Tue, 22 Sep 2026 06:40:04 +0000 Received: by outflank-mailman (input) for mailman id 1428177; Tue, 22 Sep 2026 06:40:02 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1x8uAc-0004Uk-Hx for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 06:40:02 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1x8uAb-006dEr-V1 for xen-devel@lists.xenproject.org; Tue, 22 Sep 2026 08:40:01 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ab222bf-e002-0a2a0a5209dd-0a2a450bc35c-10 for ; Tue, 22 Sep 2026 08:40:01 +0200 Received: from [52.101.69.84] (helo=AM0PR83CU005.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ab222c1-b7e8-0a2a450b0019-34654554fa92-3 for ; Tue, 22 Sep 2026 08:40:01 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by FRZPR03MB11709.eurprd03.prod.outlook.com (2603:10a6:d10:1cc::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.14; Tue, 22 Sep 2026 06:40:00 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0428.015; Tue, 22 Sep 2026 06:40:00 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MXL9t3KlhV7hawE5DBO1/kiI5YfsvwCMotTQ+7eSRYZAXQnXVvML5C5tUyiHHOWdu7kz2buPTJKaF7HyhoNShkWDcqpGX8s0RhosmeSucmKEFaf5NRvPvsvCWq1Q0hyqpAeCJlcC+8ssuQz9IaBDSrLIxoY1zs5DJz8GtDZz4YHFgkjM7yTsLMMaeqzaYwxetcSrVMvd0gFDJ2bwNt1jCnlNwjza36Ojco1M8WpIilT4/7KLwuPNcRcgE9Hlp7ofHrs5ejDnbha+XxQK0UoG/b6WKSMYA58maJT5gycoFYfz6ieoToXsOpeOKgoLHJcxpT24y+LUj3FGBAGXwLsWVg== 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=2cKreGMUElULo1QhsKeoGyzZB+m+nWVmEkjFZ6Y0E/o=; b=per9VJBhHS0WI6vjKHSYHdP9kXXHSVg8+7OiWLzdjaV6wTdHDIf+ldzZ2jrL4NkVbavbYX0STa3Z+SZlBMO7Byv6DpJE6/s96UMjBi1KhD2MkSFvZ6b/WO2lY0ViBSv778D+uHpjzqoMCZxhLfYUXIilYak+L9KPHy7De95Y1/IOK3udJ7g/hFv9fQ72gXGtE0aM1CCfNnu7IzYs1MfmOf5LSo2ZxhYVQtPfLMTdqCl9bi/qTQuRvQyKNyrAb1Ez1KJkJG8UTMxrizncEgR7IZEzLNC7Zl2SbAmIeaSQGpJfu5OdYvi8PdrreNTJGC48gNfP4HOGlsKOyQbVPsRN6Q== 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=2cKreGMUElULo1QhsKeoGyzZB+m+nWVmEkjFZ6Y0E/o=; b=hU/VcaomblbdUuqp65K+tA9902Q22o/jR2R5fSxXmag7E+fQ3wN7hwm2uZwEGDQdISLSxIf2f5+V3SxGve6oPLDfLMF04+W/W3RZKXDZbX/LHMrExCcOPwhGv9a78vDfb2u10HgVwJJj9lX/JRO7Hu4u46MMwlvQkjkmBFLTmKfe95q5MsN+VBUHTvYLd5L04jLYYu1wwmZfY2OF45a8nnQDTNL24NfM9tAwkbzS1hkMQ3/hCU1EylG7qnSnc7ekF9FkbcW6aePleMV9gazOxmMeudxtkvbQpwvyvFsHpTWmGbFUztIeLC79imdryuxSPQdQxvlWfBIXWUq0kKE48A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Jens Wiklander , Volodymyr Babchuk Subject: [PATCH v4 4/4] xen/arm: handle irq_set_type() failures Date: Tue, 22 Sep 2026 09:39:32 +0300 Message-ID: <85c5f8f04b19eea8d32e875a8b7e94f4ebb88292.1790056623.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B7B.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::613) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|FRZPR03MB11709:EE_ X-MS-Office365-Filtering-Correlation-Id: b9454439-9a24-484a-5102-08df187452e2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|23010399003|366016|6133799003|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: sUaeZcfEWsfWgbF09lIKlCd44Q+srzeqsyZB9RmvLpO6p05sv9l2YWxFdaFPaIY4IUtrXL++HHDzILCqBEHhV7QViu7UICTT3jFSh8iH66kZo7jPJUxEkzKebxrRqpfdPbdIEzSx6PUf/BSKhaq11UU8dB/wrOOqJGwHdbf8n8U1WJTy94jxIbA9IPnBQzS1ZDRixgNOhSmj0Hx9Ig1A6RjjerTHqpCu7PWgQohrvGxdKM5fqxVYiqYY+oB/DL2NjsOxpQvmi9QKpS6GsgVxeB+Lv31xQP9QSiq8VLdrGFHjHSMdzBKpObte+uAMOj5tQK8+0hvk8UsvSxcnKuRBwMgm4FcqDxsGPEPlmvoL5Bc7BTKodm3KLh+F9dWSriHTQbhbC2d1jh+BdeF1DdRzMPA7AcmOAUSC2EUiKPZiELvMHIiKgVRqTbLuV+4rBCEdsaE3X0TLbk4TDMTsEIemNvcmMb+erXvVV11Nyg3XfaQcerMo8PRMTkfftk5E+iZFzxHOuU7IXhapQamm3JskkFtsXJQYT2rCk8G4azgYcfkEpxY/L3mP56eoMyQSsr/gwkyRio+bgiQcYSfjXp/kRXGJa1sG9sJSxbS2XBbvcuVLUtko677HzjyXbzCnoWY85hU3gVv4OF0G7c3TIvNbPme8vQwDhycOZeUaVvl4JJA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(23010399003)(366016)(6133799003)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RZSJ+kUxijYejledWBimWehGJfHXUAq4D0kio7zGv6ilPfkIz14R0exZumsp?= =?us-ascii?Q?bcyfsNeT49mriCQfSX5R9hx5g/B1tjOJ1XWLJc1tvBy3l51Sj7SuT5DoFNxh?= =?us-ascii?Q?dfIEWaILGbyVqJdo4pPUIPgFATy/tUUHuO7RPLn98vRTHgRmyINztQiW0Y6O?= =?us-ascii?Q?5YYNoXx/cTWh5LGTCPJtbMbaC4f5YDDNAZZsP2z2r/swHIoretnVYycFBr/w?= =?us-ascii?Q?YBcgmSC4/b8P9QJxdBqN7f5V2hajJBIoHjHumDtuL7OyPpu4t4rhDxTySnTw?= =?us-ascii?Q?kFfvNNzlV+0iBz5glYlaS0JyUxg6jMCGV78J+suENdFxeXj+41C3c3vfznSI?= =?us-ascii?Q?K2DpYlx+P0cwV16EydBQR04PVxcAMWwFv1b1JR7wRFdnoEI34Jp4/RX1U4Zu?= =?us-ascii?Q?n9bJCztYtbgVBtO3s4nU4SXI0u6YUnH/njyGLkyzBjl8o4iWbAeFyd72uGW9?= =?us-ascii?Q?RclQfi9f4vr15uIlhuJWyBvXtNXisIjgRyB3CN7KYlTYXcd3i7FQGDird329?= =?us-ascii?Q?WMESftz3OgN+WGPcA5O8TGuC+2HTtYo1V8DKuERWPE6CxpCCKm13uJ+XN472?= =?us-ascii?Q?OLMJ60lvSq68TvIdgIXcBuz9S0BbY7i8fgbT24neI8kutaOJG6WROZa6wqP5?= =?us-ascii?Q?pnFv3Gkgua1JbyooqUpJcOkq/IWNRpJrCsegFsyq2/Zf4UDLp5WSnD3Es49/?= =?us-ascii?Q?nabwfdRAq2J5Kae4tIPS9ohtjSuhGmgh2ogs6xOjpa0hnrFe/33amk8WPGCn?= =?us-ascii?Q?2UiuuV+4JeXN7GOlZbm6ZQaXI3ocH/3LY4m1oeMuCswpWjrscMYrK9RGvmSl?= =?us-ascii?Q?tOvFhOJ6dqLkOtkYmUCqZ9RBEs2Dy2whViQcVtbwaNFdR0OflaPPKdtmSkSS?= =?us-ascii?Q?YfxchiwKVJBC6bnA5bfR7UtjECFAjEEGKt2CkVV69FPi/PBrXMELFRq8Q3Bx?= =?us-ascii?Q?YCEUWyKHCkGN2RX1+Us05l+8DwMxRXo5QxglIhCe08WeqT58OSMf2lNZiWA4?= =?us-ascii?Q?8KI5vopgwD3G2XAARSEoIXmGbff8Rn1vrItkE36+kWh5AgnjRpZ+G9AzHjiv?= =?us-ascii?Q?diSJ3tYIPnCWUQUBOWekxes/qR9oDeX3Q1kNkWy7xYcp27x1KWWxiXZTvijV?= =?us-ascii?Q?QfKspCHmSi0E2X72D0Lup8i9o7m7QNzAwwBrZFX9/Dk+VXGKw6HcXzU2KX9a?= =?us-ascii?Q?7yKoBnsIGpkzWjkGPDLAmSHkKNS+BooeyO9k2rzOhGPn4Ro0z16r0/E4plOH?= =?us-ascii?Q?1/R/W0Gm8PQ8mYDtiy9j+iqGV/5WUCgRr3tiwccExH8/chkYhDFKnlixi4H1?= =?us-ascii?Q?XHeAxmVjIt0wbn3Oct/nFpGAGxQVaGqzVh/zKkM5LFBFU2OO266FdKj14NCJ?= =?us-ascii?Q?UVvNpGcPCeGXzS9R6cVKuKQCK5jJxKnL2P8f+enOxlOeo/+5VWvqgpplsYWi?= =?us-ascii?Q?AR1oizeymG8KKRy3+ogxeDR7WkgJP5vwJquSvR9ka0OXdI6i9HVwU2bN6R+m?= =?us-ascii?Q?ZpE+l4Xj+WJ6cSTFulGdfwWHE+qLRD/1xnSsUCrhhDzXm4X9RgOS1aOyzu2K?= =?us-ascii?Q?vTKheeaps1lTKyX1jt2R0+RMCBF5VHIsH5HF1VS506fN8ZW86ssq37jp0tow?= =?us-ascii?Q?jWSVqh7tL8ODy+wW/5CaOSjyjNGCSuCGGS9VGeRUCFKnmyJBUXI4XzxqGujY?= =?us-ascii?Q?rp0ICrT0Qf6CQIb89+j1dEDFcljjLnFkGrR2lOL0KXL6OzITggvV4uEH62DB?= =?us-ascii?Q?u7yVNs8HBg=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9454439-9a24-484a-5102-08df187452e2 X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Sep 2026 06:39:59.9608 (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: MD5bZgr04u74Qqp8rz18uQEocvPpxd9RSS93/Xv4lRvCcNeW3TSpyViII/s7X7VLD0SS7DN7Sj3W9L2omidBoA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: FRZPR03MB11709 X-purgate-ID: tlsNG-42698a/1790059201-A94C39EA-FEEC95D8/0/0 X-purgate-type: clean X-purgate-size: 8128 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1790059224645158500 Content-Type: text/plain; charset="utf-8" Several Arm firmware initialization paths discard irq_set_type()'s return value, violating MISRA C Rule 17.7. If trigger configuration fails, initialization continues with an IRQ that was not configured as requested. GTDT and MADT retain rejected timer and maintenance INTIDs. check_timer_irq_cfg() and release_irq() later perform unconditional descriptor lookups on those values. Xen has no backing descriptors for INTIDs 1024 through 4095, so retaining one can cause an out-of-bounds access. Check the return value in the GTDT, MADT, SPCR, and FF-A paths. Store timer INTIDs only after successful trigger configuration, make GTDT parsing failure fatal, and stop UART or notification setup when trigger configuration fails. Signed-off-by: Mykola Kvach Reviewed-by: Volodymyr Babchuk Reviewed-by: Michal Orzel --- Changes in v3: - Avoid partial state updates and simplify maintenance IRQ setup. Changes in v2: - New patch. --- xen/arch/arm/gic-v2.c | 15 +++++++++------ xen/arch/arm/gic-v3.c | 15 +++++++++------ xen/arch/arm/tee/ffa_notif.c | 11 ++++++++++- xen/arch/arm/time.c | 18 ++++++++++++++---- xen/drivers/char/ns16550.c | 8 ++++++-- xen/drivers/char/pl011.c | 4 +++- 6 files changed, 51 insertions(+), 20 deletions(-) diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index d05c574d88..87eda9d322 100644 --- a/xen/arch/arm/gic-v2.c +++ b/xen/arch/arm/gic-v2.c @@ -1166,17 +1166,20 @@ gic_acpi_parse_madt_cpu(struct acpi_subtable_header= *header, /* Read from APIC table and fill up the GIC variables */ if ( cpu_base_assigned =3D=3D 0 ) { + int rc; + + rc =3D irq_set_type(processor->vgic_interrupt, + processor->flags & ACPI_MADT_VGIC_IRQ_MODE ? + IRQ_TYPE_EDGE_BOTH : IRQ_TYPE_LEVEL_MASK); + + if ( rc ) + return rc; + cbase =3D processor->base_address; csize =3D SZ_8K; hbase =3D processor->gich_base_address; vbase =3D processor->gicv_base_address; gicv2_info.maintenance_irq =3D processor->vgic_interrupt; - - if ( processor->flags & ACPI_MADT_VGIC_IRQ_MODE ) - irq_set_type(gicv2_info.maintenance_irq, IRQ_TYPE_EDGE_BOTH); - else - irq_set_type(gicv2_info.maintenance_irq, IRQ_TYPE_LEVEL_MASK); - cpu_base_assigned =3D 1; } else diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index acdac22953..b32a9b5009 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -1743,15 +1743,18 @@ gic_acpi_parse_madt_cpu(struct acpi_subtable_header= *header, /* Read from APIC table and fill up the GIC variables */ if ( !cpu_base_assigned ) { + int rc; + + rc =3D irq_set_type(processor->vgic_interrupt, + processor->flags & ACPI_MADT_VGIC_IRQ_MODE ? + IRQ_TYPE_EDGE_BOTH : IRQ_TYPE_LEVEL_MASK); + + if ( rc ) + return rc; + cbase =3D processor->base_address; vbase =3D processor->gicv_base_address; gicv3_info.maintenance_irq =3D processor->vgic_interrupt; - - if ( processor->flags & ACPI_MADT_VGIC_IRQ_MODE ) - irq_set_type(gicv3_info.maintenance_irq, IRQ_TYPE_EDGE_BOTH); - else - irq_set_type(gicv3_info.maintenance_irq, IRQ_TYPE_LEVEL_MASK); - cpu_base_assigned =3D 1; } else diff --git a/xen/arch/arm/tee/ffa_notif.c b/xen/arch/arm/tee/ffa_notif.c index 186e726412..d08d0a3366 100644 --- a/xen/arch/arm/tee/ffa_notif.c +++ b/xen/arch/arm/tee/ffa_notif.c @@ -407,7 +407,16 @@ void ffa_notif_init(void) irq =3D resp.a2; notif_sri_irq =3D irq; if ( irq >=3D NR_GIC_SGI ) - irq_set_type(irq, IRQ_TYPE_EDGE_RISING); + { + ret =3D irq_set_type(irq, IRQ_TYPE_EDGE_RISING); + if ( ret ) + { + printk(XENLOG_ERR + "ffa: irq_set_type irq %u failed: error %d\n", + irq, ret); + return; + } + } ret =3D request_irq(irq, 0, notif_irq_handler, "FF-A notif", NULL); if ( ret ) { diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c index be54b87438..ccfb76e20f 100644 --- a/xen/arch/arm/time.c +++ b/xen/arch/arm/time.c @@ -60,20 +60,27 @@ static int __init arch_timer_acpi_init(struct acpi_tabl= e_header *header) { u32 irq_type; struct acpi_table_gtdt *gtdt; + int rc; =20 gtdt =3D container_of(header, struct acpi_table_gtdt, header); =20 /* Initialize all the generic timer IRQ variable from GTDT table */ irq_type =3D acpi_get_timer_irq_type(gtdt->non_secure_el1_flags); - irq_set_type(gtdt->non_secure_el1_interrupt, irq_type); + rc =3D irq_set_type(gtdt->non_secure_el1_interrupt, irq_type); + if ( rc ) + return rc; timer_irq[TIMER_PHYS_NONSECURE_PPI] =3D gtdt->non_secure_el1_interrupt; =20 irq_type =3D acpi_get_timer_irq_type(gtdt->virtual_timer_flags); - irq_set_type(gtdt->virtual_timer_interrupt, irq_type); + rc =3D irq_set_type(gtdt->virtual_timer_interrupt, irq_type); + if ( rc ) + return rc; timer_irq[TIMER_VIRT_PPI] =3D gtdt->virtual_timer_interrupt; =20 irq_type =3D acpi_get_timer_irq_type(gtdt->non_secure_el2_flags); - irq_set_type(gtdt->non_secure_el2_interrupt, irq_type); + rc =3D irq_set_type(gtdt->non_secure_el2_interrupt, irq_type); + if ( rc ) + return rc; timer_irq[TIMER_HYP_PPI] =3D gtdt->non_secure_el2_interrupt; =20 return 0; @@ -81,7 +88,10 @@ static int __init arch_timer_acpi_init(struct acpi_table= _header *header) =20 static void __init preinit_acpi_xen_time(void) { - acpi_table_parse(ACPI_SIG_GTDT, arch_timer_acpi_init); + int rc =3D acpi_table_parse(ACPI_SIG_GTDT, arch_timer_acpi_init); + + if ( rc ) + panic("Timer: Failed to configure interrupts from GTDT: %d\n", rc); } #else static void __init preinit_acpi_xen_time(void) { } diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index 120ac09d23..eb608ab8b4 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -1928,6 +1928,7 @@ static int __init ns16550_acpi_uart_init(const void *= data) struct acpi_table_header *table; struct acpi_table_spcr *spcr; acpi_status status; + int rc; /* * Same as the DT part. * Only support one UART on ARM which happen to be ns16550_com[0]. @@ -1959,6 +1960,11 @@ static int __init ns16550_acpi_uart_init(const void = *data) return -EINVAL; } =20 + /* The trigger/polarity information is not available in spcr. */ + rc =3D irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + if ( rc ) + return rc; + ns16550_init_common(uart); =20 /* @@ -1975,8 +1981,6 @@ static int __init ns16550_acpi_uart_init(const void *= data) uart->reg_shift =3D spcr->serial_port.bit_offset; uart->reg_width =3D spcr->serial_port.access_width; =20 - /* The trigger/polarity information is not available in spcr. */ - irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); uart->irq =3D spcr->interrupt; =20 uart->vuart.base_addr =3D uart->io_base; diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c index a336241033..97c53c11e0 100644 --- a/xen/drivers/char/pl011.c +++ b/xen/drivers/char/pl011.c @@ -363,7 +363,9 @@ static int __init pl011_acpi_uart_init(const void *data) spcr->interface_type =3D=3D ACPI_DBG2_SBSA_32); =20 /* trigger/polarity information is not available in spcr */ - irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + res =3D irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + if ( res ) + return res; =20 /* TODO - mmio32 proper handling (for now set to true) */ res =3D pl011_uart_init(spcr->interrupt, spcr->serial_port.address, --=20 2.53.0