From nobody Tue May 21 15:05:31 2024 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=1699621036; cv=pass; d=zohomail.com; s=zohoarc; b=OjPnLiFCcI1RVej19S9JCzQFnSwOIu00dHBj86B/j4sC/bDE5rT9MDXcRekkSAMUlYa9VP20H2SY92A3cWEA+xE7Ds4gR9hPMSzwZy4KUW6hAaFDjzMWxE1NRa8UDx7KgUbeqQIrJq9JWr41LQ0UjPFEwrOvnK7FGVTTMD7dJZk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621036; 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=3pZ3SAQZXGyPa2UCSbq4AipLK56hM+8f7efoATgbaI8=; b=hQrf5pABG8nJge3Ky4khjIT62+/CBBm4Ri24InmldfqAbIpgk8qyT95xLYywKjbAzfV1Ll6U39OoT6wP1afnpi7+c1MNmbd8OqYgdyV6Jns8Qtgu8xPzeiMBP1HvVJj9iLqD/0r6rsijJPIRfBOpUTjUur1w8G0KNTQWf7mjwu4= 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 1699621036771672.3319632349536; Fri, 10 Nov 2023 04:57:16 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630296.983024 (Exim 4.92) (envelope-from ) id 1r1R3v-00023e-QL; Fri, 10 Nov 2023 12:56:39 +0000 Received: by outflank-mailman (output) from mailman id 630296.983024; Fri, 10 Nov 2023 12:56:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3v-00022z-Jl; Fri, 10 Nov 2023 12:56:39 +0000 Received: by outflank-mailman (input) for mailman id 630296; Fri, 10 Nov 2023 12:56:37 +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 1r1R3t-0001y1-MW for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:37 +0000 Received: from mx0b-0039f301.pphosted.com (mx0b-0039f301.pphosted.com [148.163.137.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 93cf96c8-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:35 +0100 (CET) Received: from pps.filterd (m0174681.ppops.net [127.0.0.1]) by mx0b-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACHnNa029602; Fri, 10 Nov 2023 12:56:21 GMT Received: from eur05-am6-obe.outbound.protection.outlook.com (mail-am6eur05lp2104.outbound.protection.outlook.com [104.47.18.104]) by mx0b-0039f301.pphosted.com (PPS) with ESMTPS id 3u93ptjrx7-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:21 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB8783.eurprd03.prod.outlook.com (2603:10a6:20b:53c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:16 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:16 +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: 93cf96c8-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jdtsONKBPTAQF/pR2X/ZJtWkq4brKn3cvUmnuwV8F13iZA4kgn+TpEVZ70ucl8dSRSbkcWfIcYHdE+0XKI7xh7BeTyncl8Ea+oJworOf/j/SEJ6UKgVfRf3nXVoliIeX2O+zf3yUsrMYJ9MmJXO2uwaaiaqMfn1++eFsc0STD7L+q11qje2g7HIorpq9rtzXaGcy0S0nQ9SCY63lnXzO2w+2r5vgA2A+yOU1/oyxBqTS0OIm5dtQCdasikgWHy/68UBgAY4BcOIS9bSUE0EGx3l43E2McPqHFJ1bIP63suAGU05ZXmuH2SnzI7ON42697xzSSwu7JO36ASZs+3RQAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3pZ3SAQZXGyPa2UCSbq4AipLK56hM+8f7efoATgbaI8=; b=h4Uw5UKssbQ0zIhWU8q/ffdt42EwRN37Hd5kVArHwFl/Is6MpzoSlJ5T1O5hV5d1zMHRnWXajfQxZwAnI4I3dQHcYXnKkRQ2e+wsXE9ufruUloKYmhL5e2uZD2aWRNcMomrlld++OBkL5E1fgy7Ncn5fmEp+7hCRhxR0hNHFV5UAIMSNQS1Vx2eBab3JaTcmzONBqEzIdCnp8nZt9z0vPStUgHAskIyUJ9nStMPql9eJ8NMr9ecXi9WxwftiTd6hkzSH+Zts8pkxjh9SAX0CJxkhwJRlIGi+7RXzpy7VWFIBGeqSU2Xgp3dKi1OrWXdLGAZ9gYNB3G6E67SNCumLAA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3pZ3SAQZXGyPa2UCSbq4AipLK56hM+8f7efoATgbaI8=; b=WUXKhtEjJpwaD6kGyn/oIIiETCOQX3/xGHNXOrNnVU4novnNBPA6BkJXcrvMEfMtSKYwRnDJCOBfjr37XGSdrw9qmnBKNKfGPt+mGtl0JWOZxS/3NmdnqtcTu4v4BZ36oEaYg547QT3l+JcvdNoIyL2eE6wWaaK+sC5tdUvZ2VHt22lIeOwX+PFnxhdphqhiJQ0lb0pD9e1qEaMgEsfo7IRSR4z2YMsnrAsdABEjuepJxF07uXfilTg7jtMvxGbO0qvk8W7kJRDr1TfhNUWevOanqPmukduauDn+G2x0cxJOVHqdsNtTVIJgC0cs9JZXuXmaeTJ24tELoWBm6tiDyQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 01/25] arm: vgic: its: Decouple HW and virtual ITS Thread-Topic: [XEN PATCH v2 01/25] arm: vgic: its: Decouple HW and virtual ITS Thread-Index: AQHaE9VKJzT3WLMhY0WmBXZ4tHLu5w== Date: Fri, 10 Nov 2023 12:56:16 +0000 Message-ID: <8907b54a03f07bb1f7d4563839aefefe8f5041e3.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB8783:EE_ x-ms-office365-filtering-correlation-id: bb7614e5-ee24-4b9d-5a03-08dbe1ec6d1a x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: d4FOnl8jG6yn3bqdYOqiNWXIC+rcmKc/szbtyzXhLuE75ZMvw/aCp+0NSANa3Wg0BK2UITKvWnJwpxJ2abwBPd6qBeqkE53sbvnLndD8R6d5OtqzXG+BRJYOvif1PseVZlhw/Hp1J6qFrBrNb051Tp0wmg0qn5VGkuziu58OtGyaai94UN3UCu8u+sjZtpOdv5VjSYJ594BMdNfuk9Qfs4Nl93oJDnujmae+O4WyBt9teRLJazPt6HNzRWnEe+rCHYfEbOhOvhG52nVcv96RkqIJcnTzqAoz3MIzaC9Hje2qREyaVJAoS5JVAiODqcSnZmKhYslGEoD+Qpj2HERybagen2qlEBQoPx/9wTznZ+RZ9VB4AwjaxkTt1RuJxoTkLCD/qHVktIAMfjuoWNcjRetuk95Cq4W9Zccy5StLjUO6VC40vHpdHLF+e4ggh6+MM6h6f1LlQPsF+GbMw/RJSJtasY323echsr+deyJhqNLBEau86f5UR2JpxuxRz0LUiUYfmobqpknjWuqPjmTiS6hUmAiptSsnq5YlT22nV9clnWfz6FdaPYU72yPIpurRuZgAKexsj3nbpS5oWGk6gUCipzSkSFzFdBjQr5bgLuFiuWZd7blR8pfA3jrFuif9XHMFOdMYQQnlhoJNAEw6xA== 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:(13230031)(376002)(396003)(39860400002)(346002)(366004)(136003)(230173577357003)(230273577357003)(230922051799003)(1800799009)(64100799003)(451199024)(186009)(5660300002)(64756008)(66446008)(66556008)(316002)(66476007)(54906003)(91956017)(76116006)(66946007)(2616005)(6916009)(26005)(4326008)(83380400001)(38070700009)(8676002)(8936002)(122000001)(6512007)(2906002)(6506007)(38100700002)(6486002)(478600001)(41300700001)(966005)(71200400001)(36756003)(86362001)(30864003)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?YIRLGMRYlNJCY8ej/xACHM7Vsql1Tm80CC0lUTZKND3GL2WiAsjuFTadyM?= =?iso-8859-1?Q?RZioTF5wLnupZPbOe0qnVoYeWv5UBjjArrOXbK10HWtyWtImwFhI+1R6E0?= =?iso-8859-1?Q?c4g0vXdTa9IKpTwgMKCWZoQl48gES32HTX1EDIZFokVZFvZCRXs5XjPN/9?= =?iso-8859-1?Q?0tzGj60ZDeEZhh6L0tDF4e9seJp419MYC/XZy/3lf4b2jf+ozLJHzQ9qct?= =?iso-8859-1?Q?pD/7XZDgxQmAB3lirvu2biJI8nOSolki/kES5rqGDLPOwwOY8bfbQSeHA+?= =?iso-8859-1?Q?0/UWvHXXPEjEvQRnfZzFzOQ1aLuoAbYaboGBTQp9gLrTc5AmN+jSEUJIRD?= =?iso-8859-1?Q?GLAGVqxQ/MXMZqnCFl/8DlRMnYBFqJza00FvFF97w1hHPDImtwcifBP6LX?= =?iso-8859-1?Q?EvrCvY0ysNEz0Js6k2/bgYeqNywxKN/1N+XV4RVO7+M7uynVgs3aU+0EEt?= =?iso-8859-1?Q?3Y2EeWmuhixPcpkLO8z8yDFSbmEC8X/Z57Cla4dt7jsmCTe06HFjWx87JC?= =?iso-8859-1?Q?q+/JURsvxKMJ63Js7DtA1bkli/yZ6uEdBO/8NyNLnNKunTadWpPrligoia?= =?iso-8859-1?Q?94ncu5Skh5NAiPtXtyGo0A2sc++vm0iSIO3a0EaKL1B2DWe55tQK1NxCJz?= =?iso-8859-1?Q?BF8IHNMuwZCqIfcGmndjA7ThlDBN1d0QvwSKQVCT9YodrAESeSke4YwMLv?= =?iso-8859-1?Q?7z+5eSob+tv1dqd9hQ+3de3fwTzIpjxH76Ip5+TiXFl8UFAXvg43kpCEff?= =?iso-8859-1?Q?ZFJNw/xC0wPa6LWFK3RjQ+kXFZ/FUEL/VbQMqZSYJ9g9RuNFKdq2INTcKI?= =?iso-8859-1?Q?QBOQEaHQLnXtFhvsHfK6JVDjLea9DejfTGtv8pBKWo3OPA+nujcmi3Y5Um?= =?iso-8859-1?Q?e5sddQRahin4TR1XrxykpJG5yXZ6F6v6+YArk2hpZMRu6JHW3A70W1qBAk?= =?iso-8859-1?Q?/B2lojtaKWmLVm5UPiIy6VFJlGBGvgnaADf4bx+V/XqJT5wrNr7+I0ADqS?= =?iso-8859-1?Q?zkpNONmRoRsLGxJNYBB2d7fCbF6UhYvwx6QpdpnaJwnlf3PXSXI2eROs42?= =?iso-8859-1?Q?BLV645bcH93D3c7NgxGHLFB0mhvIKqAZh4Hg090bNn6+O3lhRBYqVQb5UL?= =?iso-8859-1?Q?r4o5BJdHU4D/IoY6Ra4Fwp9zw9CVO502gKwvcih1+ls+zr4uNgzCHwHLWn?= =?iso-8859-1?Q?ZEasJk4vwiXoFDT5OLZujanyfxfubs7sHzR5+GNdOaDFN1NiK8OQIC9W5z?= =?iso-8859-1?Q?oi0YhyD6XINBHPex9Bq1aHAX6vkPYmEf8EGMIWCHoh4WGnbTu2XiUww6XQ?= =?iso-8859-1?Q?ZuRtVmJNFO+2kYfI1evOST1yjwEluYXuvuSOMPdszB+x0gSizyN0QxhDHC?= =?iso-8859-1?Q?FHL4Ko5zGv2w4LrIC0SLffnlHOeaeOPY/zv8GmIA3j0T4aO9yFrBGCUQFM?= =?iso-8859-1?Q?Ebir9CWv8wFaWqZ/jH/uKJJnBaSp9wC+0YttI6hvolM4WY3roDuxCK4Zr7?= =?iso-8859-1?Q?Xtr5rs6Etd8Haew+21bjmY7/hbIFt39V1sdA4XcHSxcppaJ8oG9d+jYxXH?= =?iso-8859-1?Q?6d+U/B0CzA8po7fTaCy1b6p2wWv8SshoeXtH4HqPdLhAAs5cc7r/8j3AhQ?= =?iso-8859-1?Q?8cHRAQ+EgSOEuc3Dpt0wrPD8uqoD10Uh+eqrB0rQKPFW39DY6sygDdNQ?= =?iso-8859-1?Q?=3D=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: bb7614e5-ee24-4b9d-5a03-08dbe1ec6d1a X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:16.1645 (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: 8E1uBP2ke6boTsKsMms6w0rNULhHWuZvwbx9AcT8wnvQ/wVRID9TXXM6HJwJ5hND4ZlndvkfFYB6phQmVXf5kA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB8783 X-Proofpoint-ORIG-GUID: DG_Zy7cMUP2PRH1GvgU_jqcS1RNgOdtS X-Proofpoint-GUID: DG_Zy7cMUP2PRH1GvgU_jqcS1RNgOdtS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1015 impostorscore=0 mlxlogscore=604 mlxscore=0 adultscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621037229100002 Content-Type: text/plain; charset="utf-8" HW its directly uses struct pending_irq which makes it hard to swich to a different VITS implementation if it doesn't use the same structure. Rename struct its_device to struct vgic_its_device and move it to vgic.h, so it can be defined by the VITS implementation. Add helper functions to allow HW ITS to allocate/free and manage the instances this struct. This seems like a sane approach, since the instances are already stored in the struct vgic. Also move vgic_vcpu_inject_lpi to the vgic files for the same reasons. Signed-off-by: Mykyta Poturai --- xen/arch/arm/gic-v3-its.c | 208 ++++---------------------- xen/arch/arm/gic-v3-lpi.c | 20 --- xen/arch/arm/include/asm/gic_v3_its.h | 2 + xen/arch/arm/include/asm/vgic.h | 29 ++++ xen/arch/arm/vgic-v3-its.c | 206 ++++++++++++++++++++++++- 5 files changed, 258 insertions(+), 207 deletions(-) diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c index 8afcd9783b..cc3d82cde1 100644 --- a/xen/arch/arm/gic-v3-its.c +++ b/xen/arch/arm/gic-v3-its.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -30,25 +29,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; - 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 bool gicv3_its_host_has_its(void) { @@ -509,7 +489,7 @@ static int gicv3_its_init_single_its(struct host_its *h= w_its) * TODO: Investigate the interaction when a guest removes a device while * some LPIs are still in flight. */ -static int remove_mapped_guest_device(struct its_device *dev) +static int remove_mapped_guest_device(struct vgic_its_device *dev) { int ret =3D 0; unsigned int i; @@ -530,10 +510,7 @@ static int remove_mapped_guest_device(struct its_devic= e *dev) printk(XENLOG_WARNING "Can't unmap host ITS device 0x%x\n", dev->host_devid); =20 - xfree(dev->itt_addr); - xfree(dev->pend_irqs); - xfree(dev->host_lpi_blocks); - xfree(dev); + vgic_its_free_device(dev); =20 return 0; } @@ -551,24 +528,6 @@ static struct host_its *gicv3_its_find_by_doorbell(pad= dr_t doorbell_address) return NULL; } =20 -static int compare_its_guest_devices(struct its_device *dev, - paddr_t vdoorbell, uint32_t vdevid) -{ - if ( dev->guest_doorbell < vdoorbell ) - return -1; - - if ( dev->guest_doorbell > vdoorbell ) - return 1; - - if ( dev->guest_devid < vdevid ) - return -1; - - if ( dev->guest_devid > vdevid ) - return 1; - - return 0; -} - /* * On the host ITS @its, map @nr_events consecutive LPIs. * The mapping connects a device @devid and event @eventid pair to LPI @lp= i, @@ -616,8 +575,7 @@ int gicv3_its_map_guest_device(struct domain *d, { 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; + struct vgic_its_device *temp, *dev =3D NULL; int i, ret =3D -ENOENT; /* "i" must be signed to check for >=3D 0= below. */ =20 hw_its =3D gicv3_its_find_by_doorbell(host_doorbell); @@ -643,36 +601,22 @@ int gicv3_its_map_guest_device(struct domain *d, =20 /* check for already existing mappings */ spin_lock(&d->arch.vgic.its_devices_lock); - while ( *new ) + temp =3D vgic_its_get_device(d, guest_doorbell, guest_devid); + if ( temp ) { - struct its_device *temp; - int cmp; + if ( !valid ) + vgic_its_delete_device(d, temp); =20 - temp =3D rb_entry(*new, struct its_device, rbnode); + spin_unlock(&d->arch.vgic.its_devices_lock); =20 - parent =3D *new; - cmp =3D compare_its_guest_devices(temp, guest_doorbell, guest_devi= d); - if ( !cmp ) + if ( valid ) { - if ( !valid ) - rb_erase(&temp->rbnode, &d->arch.vgic.its_devices); - - spin_unlock(&d->arch.vgic.its_devices_lock); - - if ( valid ) - { - printk(XENLOG_G_WARNING "d%d tried to remap guest ITS devi= ce 0x%x to host device 0x%x\n", - d->domain_id, guest_devid, host_devid); - return -EBUSY; - } - - return remove_mapped_guest_device(temp); + printk(XENLOG_G_WARNING "d%d tried to remap guest ITS device 0= x%x to host device 0x%x\n", + d->domain_id, guest_devid, host_devid); + return -EBUSY; } =20 - if ( cmp > 0 ) - new =3D &((*new)->rb_left); - else - new =3D &((*new)->rb_right); + return remove_mapped_guest_device(temp); } =20 if ( !valid ) @@ -688,7 +632,7 @@ int gicv3_its_map_guest_device(struct domain *d, clean_and_invalidate_dcache_va_range(itt_addr, nr_events * hw_its->itte_size); =20 - dev =3D xzalloc(struct its_device); + dev =3D vgic_its_alloc_device(nr_events); if ( !dev ) goto out_unlock; =20 @@ -704,13 +648,6 @@ int gicv3_its_map_guest_device(struct domain *d, * See the mailing list discussion for some background: * https://lists.xen.org/archives/html/xen-devel/2017-03/msg03645.html */ - dev->pend_irqs =3D xzalloc_array(struct pending_irq, nr_events); - if ( !dev->pend_irqs ) - goto out_unlock; - - dev->host_lpi_blocks =3D xzalloc_array(uint32_t, nr_events); - 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); @@ -724,8 +661,7 @@ int gicv3_its_map_guest_device(struct domain *d, dev->host_devid =3D host_devid; dev->eventids =3D nr_events; =20 - rb_link_node(&dev->rbnode, parent, new); - rb_insert_color(&dev->rbnode, &d->arch.vgic.its_devices); + vgic_its_add_device(d, dev); =20 spin_unlock(&d->arch.vgic.its_devices_lock); =20 @@ -771,117 +707,27 @@ out_unlock: =20 out: if ( dev ) - { - xfree(dev->pend_irqs); - xfree(dev->host_lpi_blocks); - } + vgic_its_free_device(dev); + xfree(itt_addr); - xfree(dev); =20 return ret; } =20 -/* Must be called with the its_device_lock held. */ -static struct its_device *get_its_device(struct domain *d, paddr_t vdoorbe= ll, - uint32_t vdevid) -{ - struct rb_node *node =3D d->arch.vgic.its_devices.rb_node; - struct its_device *dev; - - ASSERT(spin_is_locked(&d->arch.vgic.its_devices_lock)); - - while (node) - { - int cmp; - - dev =3D rb_entry(node, struct its_device, rbnode); - cmp =3D compare_its_guest_devices(dev, vdoorbell, vdevid); - - if ( !cmp ) - return dev; - - if ( cmp > 0 ) - node =3D node->rb_left; - else - node =3D node->rb_right; - } - - return NULL; -} - -static struct pending_irq *get_event_pending_irq(struct domain *d, - paddr_t vdoorbell_address, - uint32_t vdevid, - uint32_t eventid, - uint32_t *host_lpi) -{ - struct its_device *dev; - struct pending_irq *pirq =3D NULL; - - spin_lock(&d->arch.vgic.its_devices_lock); - dev =3D get_its_device(d, vdoorbell_address, vdevid); - if ( dev && eventid < dev->eventids ) - { - pirq =3D &dev->pend_irqs[eventid]; - if ( host_lpi ) - *host_lpi =3D dev->host_lpi_blocks[eventid / LPI_BLOCK] + - (eventid % LPI_BLOCK); - } - spin_unlock(&d->arch.vgic.its_devices_lock); - - return pirq; -} - -struct pending_irq *gicv3_its_get_event_pending_irq(struct domain *d, - paddr_t vdoorbell_addr= ess, - uint32_t vdevid, - uint32_t eventid) -{ - return get_event_pending_irq(d, vdoorbell_address, vdevid, eventid, NU= LL); -} - -int gicv3_remove_guest_event(struct domain *d, paddr_t vdoorbell_address, - uint32_t vdevid, uint32_t eventid) +uint32_t gicv3_its_get_host_lpi(struct domain *d, paddr_t vdoorbell_addres= s, + uint32_t vdevid, uint32_t eventid) { + struct vgic_its_device *dev; uint32_t host_lpi =3D INVALID_LPI; =20 - if ( !get_event_pending_irq(d, vdoorbell_address, vdevid, eventid, - &host_lpi) ) - return -EINVAL; - - if ( host_lpi =3D=3D INVALID_LPI ) - return -EINVAL; - - gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI); - - return 0; -} - -/* - * Connects the event ID for an already assigned device to the given VCPU/= vLPI - * pair. The corresponding physical LPI is already mapped on the host side - * (when assigning the physical device to the guest), so we just connect t= he - * target VCPU/vLPI pair to that interrupt to inject it properly if it fir= es. - * Returns a pointer to the already allocated struct pending_irq that is - * meant to be used by that event. - */ -struct pending_irq *gicv3_assign_guest_event(struct domain *d, - paddr_t vdoorbell_address, - uint32_t vdevid, uint32_t eve= ntid, - uint32_t virt_lpi) -{ - struct pending_irq *pirq; - uint32_t host_lpi =3D INVALID_LPI; - - pirq =3D get_event_pending_irq(d, vdoorbell_address, vdevid, eventid, - &host_lpi); - - if ( !pirq ) - return NULL; - - gicv3_lpi_update_host_entry(host_lpi, d->domain_id, virt_lpi); + spin_lock(&d->arch.vgic.its_devices_lock); + dev =3D vgic_its_get_device(d, vdoorbell_address, vdevid); + if ( dev ) + host_lpi =3D dev->host_lpi_blocks[eventid / LPI_BLOCK] + + (eventid % LPI_BLOCK); =20 - return pirq; + spin_unlock(&d->arch.vgic.its_devices_lock); + return host_lpi; } =20 int gicv3_its_deny_access(struct domain *d) diff --git a/xen/arch/arm/gic-v3-lpi.c b/xen/arch/arm/gic-v3-lpi.c index eb0a5535e4..5f73b2b9f2 100644 --- a/xen/arch/arm/gic-v3-lpi.c +++ b/xen/arch/arm/gic-v3-lpi.c @@ -128,26 +128,6 @@ uint64_t gicv3_get_redist_address(unsigned int cpu, bo= ol use_pta) return per_cpu(lpi_redist, cpu).redist_id << 16; } =20 -void vgic_vcpu_inject_lpi(struct domain *d, unsigned int virq) -{ - /* - * TODO: this assumes that the struct pending_irq stays valid all of - * the time. We cannot properly protect this with the current locking - * scheme, but the future per-IRQ lock will solve this problem. - */ - struct pending_irq *p =3D irq_to_pending(d->vcpu[0], virq); - unsigned int vcpu_id; - - if ( !p ) - return; - - vcpu_id =3D ACCESS_ONCE(p->lpi_vcpu_id); - if ( vcpu_id >=3D d->max_vcpus ) - return; - - vgic_inject_irq(d, d->vcpu[vcpu_id], virq, true); -} - /* * Handle incoming LPIs, which are a bit special, because they are potenti= ally * numerous and also only get injected into guests. Treat them specially h= ere, diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index c24d4752d0..f61a37a8fa 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -196,6 +196,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); +uint32_t gicv3_its_get_host_lpi(struct domain *d, paddr_t vdoorbell_addres= s, + uint32_t vdevid, uint32_t eventid); =20 #else =20 diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgi= c.h index 922779ce14..56a3b6f828 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -317,6 +317,35 @@ extern bool vgic_migrate_irq(struct vcpu *old, struct = vcpu *new, unsigned int ir extern void vgic_check_inflight_irqs_pending(struct domain *d, struct vcpu= *v, unsigned int rank, uint32_t r= ); =20 +#ifdef CONFIG_HAS_ITS +/* + * 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 vgic_its_device { + struct rb_node rbnode; + struct host_its *hw_its; + 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 */ +}; + +struct vgic_its_device *vgic_its_alloc_device(int nr_events); +void vgic_its_free_device(struct vgic_its_device *its_dev); +int vgic_its_add_device(struct domain *d, struct vgic_its_device *its_dev); +void vgic_its_delete_device(struct domain *d, struct vgic_its_device *its_= dev); +struct vgic_its_device* vgic_its_get_device(struct domain *d, paddr_t vdoo= rbell, + uint32_t vdevid); +#endif /* CONFIG_HAS_ITS */ + #endif /* !CONFIG_NEW_VGIC */ =20 /*** Common VGIC functions used by Xen arch code ****/ diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index 05429030b5..0d839f3fa4 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -266,6 +266,200 @@ static bool write_itte(struct virt_its *its, uint32_t= devid, return true; } =20 +static struct pending_irq *get_event_pending_irq(struct domain *d, + paddr_t vdoorbell_address, + uint32_t vdevid, + uint32_t eventid) +{ + struct vgic_its_device *dev; + struct pending_irq *pirq =3D NULL; + + spin_lock(&d->arch.vgic.its_devices_lock); + dev =3D vgic_its_get_device(d, vdoorbell_address, vdevid); + if ( dev && eventid < dev->eventids ) + pirq =3D &dev->pend_irqs[eventid]; + + spin_unlock(&d->arch.vgic.its_devices_lock); + + return pirq; +} + +static int remove_guest_event(struct domain *d, paddr_t vdoorbell_address, + uint32_t vdevid, uint32_t eventid) +{ + uint32_t host_lpi =3D INVALID_LPI; + + host_lpi =3D gicv3_its_get_host_lpi(d, vdoorbell_address, vdevid, even= tid); + if ( host_lpi =3D=3D INVALID_LPI ) + return -EINVAL; + + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI); + + return 0; +} + +/* + * Connects the event ID for an already assigned device to the given VCPU/= vLPI + * pair. The corresponding physical LPI is already mapped on the host side + * (when assigning the physical device to the guest), so we just connect t= he + * target VCPU/vLPI pair to that interrupt to inject it properly if it fir= es. + * Returns a pointer to the already allocated struct pending_irq that is + * meant to be used by that event. + */ +static struct pending_irq *assign_guest_event(struct domain *d, + paddr_t vdoorbell_address, + uint32_t vdevid, uint32_t eve= ntid, + uint32_t virt_lpi) +{ + struct pending_irq *pirq; + uint32_t host_lpi =3D INVALID_LPI; + + host_lpi =3D gicv3_its_get_host_lpi(d, vdoorbell_address, vdevid, even= tid); + if ( host_lpi =3D=3D INVALID_LPI ) + return NULL; + pirq =3D get_event_pending_irq(d, vdoorbell_address, vdevid, eventid); + if ( !pirq ) + return NULL; + + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, virt_lpi); + + return pirq; +} + +static int compare_its_guest_devices(struct vgic_its_device *dev, + paddr_t vdoorbell, uint32_t vdevid) +{ + if ( dev->guest_doorbell < vdoorbell ) + return -1; + + if ( dev->guest_doorbell > vdoorbell ) + return 1; + + if ( dev->guest_devid < vdevid ) + return -1; + + if ( dev->guest_devid > vdevid ) + return 1; + + return 0; +} + +/* Must be called with the its_device_lock held. */ +struct vgic_its_device *vgic_its_get_device(struct domain *d, paddr_t vdoo= rbell, + uint32_t vdevid) +{ + struct rb_node *node =3D d->arch.vgic.its_devices.rb_node; + struct vgic_its_device *dev; + + ASSERT(spin_is_locked(&d->arch.vgic.its_devices_lock)); + + while (node) + { + int cmp; + + dev =3D rb_entry(node, struct vgic_its_device, rbnode); + cmp =3D compare_its_guest_devices(dev, vdoorbell, vdevid); + + if ( !cmp ) + return dev; + + if ( cmp > 0 ) + node =3D node->rb_left; + else + node =3D node->rb_right; + } + + return NULL; +} + +struct vgic_its_device *vgic_its_alloc_device(int nr_events) +{ + struct vgic_its_device *dev; + + dev =3D xzalloc(struct vgic_its_device); + if ( !dev ) + goto fail; + + dev->pend_irqs =3D xzalloc_array(struct pending_irq, nr_events); + if ( !dev->pend_irqs ) + goto fail_pend; + + dev->host_lpi_blocks =3D xzalloc_array(uint32_t, nr_events); + if ( !dev->host_lpi_blocks ) + goto fail_host_lpi; + =20 + return dev; +fail_host_lpi: + xfree(dev->pend_irqs); +fail_pend: + xfree(dev); +fail: + return NULL; +} + +void vgic_its_free_device(struct vgic_its_device *its_dev) +{ + xfree(its_dev->pend_irqs); + xfree(its_dev->host_lpi_blocks); + xfree(its_dev); +} + +int vgic_its_add_device(struct domain *d, struct vgic_its_device *its_dev) +{ + struct rb_node **new =3D &d->arch.vgic.its_devices.rb_node, *parent = =3D NULL; + while ( *new ) + { + struct vgic_its_device *temp; + int cmp; + + temp =3D rb_entry(*new, struct vgic_its_device, rbnode); + + parent =3D *new; + cmp =3D compare_its_guest_devices(temp, its_dev->guest_doorbell, + its_dev->guest_devid); + if ( !cmp ) + { + printk(XENLOG_ERR "Trying to add an already existing ITS devic= e vdoorbell %lx vdevid %d\n",=20 + its_dev->guest_doorbell, its_dev->guest_devid); + return -EINVAL; + } + + if ( cmp > 0 ) + new =3D &((*new)->rb_left); + else + new =3D &((*new)->rb_right); + } + + rb_link_node(&its_dev->rbnode, parent, new); + rb_insert_color(&its_dev->rbnode, &d->arch.vgic.its_devices); + return 0; +} + +void vgic_its_delete_device(struct domain *d, struct vgic_its_device *its_= dev) +{ + rb_erase(&its_dev->rbnode, &d->arch.vgic.its_devices); +} + +void vgic_vcpu_inject_lpi(struct domain *d, unsigned int virq) +{ + /* + * TODO: this assumes that the struct pending_irq stays valid all of + * the time. We cannot properly protect this with the current locking + * scheme, but the future per-IRQ lock will solve this problem. + */ + struct pending_irq *p =3D irq_to_pending(d->vcpu[0], virq); + unsigned int vcpu_id; + + if ( !p ) + return; + + vcpu_id =3D ACCESS_ONCE(p->lpi_vcpu_id); + if ( vcpu_id >=3D d->max_vcpus ) + return; + + vgic_inject_irq(d, d->vcpu[vcpu_id], virq, true); +} + /************************************** * Functions that handle ITS commands * **************************************/ @@ -349,7 +543,7 @@ static int its_handle_clear(struct virt_its *its, uint6= 4_t *cmdptr) if ( !read_itte(its, devid, eventid, &vcpu, &vlpi) ) goto out_unlock; =20 - p =3D gicv3_its_get_event_pending_irq(its->d, its->doorbell_address, + p =3D get_event_pending_irq(its->d, its->doorbell_address, devid, eventid); /* Protect against an invalid LPI number. */ if ( unlikely(!p) ) @@ -471,7 +665,7 @@ static int its_handle_inv(struct virt_its *its, uint64_= t *cmdptr) if ( vlpi =3D=3D INVALID_LPI ) goto out_unlock_its; =20 - p =3D gicv3_its_get_event_pending_irq(d, its->doorbell_address, + p =3D get_event_pending_irq(d, its->doorbell_address, devid, eventid); if ( unlikely(!p) ) goto out_unlock_its; @@ -615,7 +809,7 @@ static int its_discard_event(struct virt_its *its, spin_unlock_irqrestore(&vcpu->arch.vgic.lock, flags); =20 /* Remove the corresponding host LPI entry */ - return gicv3_remove_guest_event(its->d, its->doorbell_address, + return remove_guest_event(its->d, its->doorbell_address, vdevid, vevid); } =20 @@ -744,7 +938,7 @@ static int its_handle_mapti(struct virt_its *its, uint6= 4_t *cmdptr) * determined by the same device ID and event ID on the host side. * This returns us the corresponding, still unused pending_irq. */ - pirq =3D gicv3_assign_guest_event(its->d, its->doorbell_address, + pirq =3D assign_guest_event(its->d, its->doorbell_address, devid, eventid, intid); if ( !pirq ) goto out_remove_mapping; @@ -785,7 +979,7 @@ static int its_handle_mapti(struct virt_its *its, uint6= 4_t *cmdptr) * cleanup and return an error here in any case. */ out_remove_host_entry: - gicv3_remove_guest_event(its->d, its->doorbell_address, devid, eventid= ); + remove_guest_event(its->d, its->doorbell_address, devid, eventid); =20 out_remove_mapping: spin_lock(&its->its_lock); @@ -819,7 +1013,7 @@ static int its_handle_movi(struct virt_its *its, uint6= 4_t *cmdptr) if ( !nvcpu ) goto out_unlock; =20 - p =3D gicv3_its_get_event_pending_irq(its->d, its->doorbell_address, + p =3D get_event_pending_irq(its->d, its->doorbell_address, devid, eventid); if ( unlikely(!p) ) goto out_unlock; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621026; cv=pass; d=zohomail.com; s=zohoarc; b=J+fXCycUSJgQQ882EOz7cjOaipkrlZ/XmBCPJlLsOHw3AEkeEgyGWKaxMTf9x6Kb1K7PoI8N+8HkC5ysRJZR9w9QYxje9YyuHo4Y+jqXej8Pn+rbauHrnEyUcTud0cdmFjI7ggEFqgQYA2+veEtq1ml24V9eNYjCNKspAXMW8mY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621026; 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=Fv2sSS1E8IyyC05BS/b/6K+ysUBbf+47kNcRVhgAkhk=; b=cQsQOyF1aBlhUlllL3xasMJyfrCCyMJXLVuiHRdLPtoxXr/ZCJPpMdcnMugOC58la5EaeKWk5Fv853ve1BDTFXXKLFMJjLgS+uGCRN+OMTbja4yuRsS1CNprndNmdUu78eca+lPk0BK12d2ndjB4JJ1WmpaGtwfe7kV6WIvq7U4= 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 1699621026939652.2636354703329; Fri, 10 Nov 2023 04:57:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630295.983020 (Exim 4.92) (envelope-from ) id 1r1R3v-00020i-EI; Fri, 10 Nov 2023 12:56:39 +0000 Received: by outflank-mailman (output) from mailman id 630295.983020; Fri, 10 Nov 2023 12:56:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3v-00020b-Be; Fri, 10 Nov 2023 12:56:39 +0000 Received: by outflank-mailman (input) for mailman id 630295; Fri, 10 Nov 2023 12:56:37 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3t-0001y0-H5 for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:37 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 9300c536-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:34 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvX025691; Fri, 10 Nov 2023 12:56:21 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:21 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:16 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:16 +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: 9300c536-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ESPjaDO/HhFX35Rcc/hs05aNIlEvWybjwv25zHJ6i2Q0aGcX7EhYfQkKCHoezYhtAQcgQ70Teubb61HKBgxgope1rj2mn/BdRxmqDJ1Ge8cVq/Vgkocc+FUNM/1cH3Xc8fHyYPExUXjLSC7ec3yzgvqnbazW+zE4kE+pgWdsKDYNoGZw429fGjFVChlslt1XN3gLdicsoLjJhiOli2/2Zb8S6DKLsd/25LvfMxmcXuiAOC5tQhzMwvZ2njev4FcvfkOIbeGc6WT0R4i7D4cMjMjLcLKbsO77Q24+KFl2Dmcit8GXhXqHQLOfae3eV7vm5czfHC5bMIWJkA7CWkQKFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Fv2sSS1E8IyyC05BS/b/6K+ysUBbf+47kNcRVhgAkhk=; b=goDXh49b1gCLm7bTXz5Qtsv6FGqVjnMnwjPxE6NjpJvFNcbb+NoLdbWVLqYMjapq3m0KGMiNoY8ENGa5U8rYff42hOxohS9LfLnq2S1cxM0/sYtEVsut7vpkQeTsfgV6pMYfnBThYwjgm3DGd50ySwsgy+hxpvrJXSqaXy4aawDljAEu0NO4pCPX3F6oV+/uCg5A3rz4vBetQCTdl6lTwlUmt1FXOQBi8nPCVThiYpDbS9G7m5FCS84cRu5BxO3p9ZTo4i1FXIJYLxLJHgRpHK9/JF53txdPdxuxiuLAI00bhjkdedJWw/4kxd5sN3TgaqA+X1HGZPW2jqhVDw0USA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fv2sSS1E8IyyC05BS/b/6K+ysUBbf+47kNcRVhgAkhk=; b=r358BQOMZmKsGK0iyJB7HFkxPXv1m4hsLguLMoI4wZXIXsmjPhqq2FweAUEg33Kcx7Cs3BcEW27LJomBCNZUwlNzUG7jQmAeBXin/6RWOuAjujCSaYONzQaNT7VB+3kItBaxeYhGF3U+l95d1G6FgfnuVkOylAt8DVz9AReBBPUt+vv35YgRp8/XfSZGzymdmb15AheLzv8aV23rnPLFauZjD91HeM2FtMcl3kPeocWuh/3t99mJC/920JOsKTr1vlltYmDPEf0W3dhcjP1khFdsVhWXpyB04ey9Uoffff/u9iOPXHcq6jf6VeI+XVw5OKieZAb9pX3UQUNrPyuuiw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 02/25] arm: new VGIC: Add GICv3 world switch backend Thread-Topic: [XEN PATCH v2 02/25] arm: new VGIC: Add GICv3 world switch backend Thread-Index: AQHaE9VK1uiKTlA4P0ytsVfgwtVF7g== Date: Fri, 10 Nov 2023 12:56:16 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 88ed8580-64fb-4807-cde8-08dbe1ec6d4e x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zXAl6yu48qNpAOPDiiHOm+jYILFkTjfBugt2u5N0ejSlDLpX9KeFj+iRqYszUKnfMXTxVLzyqp7XpYsYGTsSUJy6tX3f7wjPDXgTIl8dCoTHbYOPL5KnAUQCYLaKUvBMjazlf+BfSeF1qri8KlnqMGFCQvW5SQiWlyNn6r8XAqkE/LE5qFZD0oReFCAzuX+nYysmCoLIjPJDj15cnUefy4bAplR3st6czxPuH5/CEOycP+LxKHgV/Qy9B1V6lOd/yOkQzp7WpS/xTPJPm561s1mfht3+wwsrBe6tI8iAWR/4bXqX6OEGA5jApDvhEnjWCCrGRAkSZ9vYhByoUJUDh8illBGc0W2ttdMmUgkCrkNd4KmUkLYjGDhHloHZ3L5gYXOcHtKqbJjixg2rc2+DJK23JAXUEdlPGUHq5Eobgz0fPGJmf5WeBK03sk2nh1IA0kVfwXJOzpB7Vxjam6cvYh6ZJNI/wV+ZyKekm58SVP/1VXAQB2wyfty4lBS06EqfMhjiDykI/NM6B5ZHb1pT08SL63z+nqFC9HhfTDO8Yg/1NEkPZv8zvGzMO9HGgvoqpc2hBwj0xj/Sy1MO0x7zZ1uX8Q6u/KNQTWNrulbmMvGM7oNCc+t6ov91z4Y4rA7R 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009)(2004002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?WpkGSQU45JR/IYs05aMOCeIZULHUcDPkvZpyQBJ1AQtP0KYCyqplkHdoNn?= =?iso-8859-1?Q?8Mj7/WKrMD7zeBO2hoWJyVEhuPB6iXWa04CLfs7+2egbe2J6lAT5RVpsQi?= =?iso-8859-1?Q?NDq5YM+8RIzeoK7x4Muu4ZoTXlmQVm+BmFhX8QJfwwYkP1tSghAGALFhBK?= =?iso-8859-1?Q?KCl46U8f0zGIZnVwLMDM66MWmIhGL/mzYrr/y6wal93BZkcjpfMVMbDOAW?= =?iso-8859-1?Q?4dRpR1N4hKHGZ79K67vl4SlxL9j8mC8rMUNNlOkhicFF2C3S3UzAWEZj6F?= =?iso-8859-1?Q?05v6YXlXbXlZR1wh8Hqn+HrrXYcpi6sdxPjBDOp+XCTyJFFkiLHKfJWqZC?= =?iso-8859-1?Q?bv9T6c19XyapFx680/Md9YHG3hUzrwcvI3W4YqnvaOcUZnbXft0q96qZQi?= =?iso-8859-1?Q?69ciXwymTpTcbegI90G/z8Gkk7kP0keioYYIaxIv90fcSbdTyEQJWVPZjf?= =?iso-8859-1?Q?xjcR8pxw0rARGUodZrYX5VM9SVT3M9n9PZLmnzKGjeUab41lbRxACATPxP?= =?iso-8859-1?Q?sak88XPuM+xz1Tzs07a/d+0uoyusPvC0DLz4SSesFEMlybCAotfoCOHpld?= =?iso-8859-1?Q?cqhFlTH44AratdRX0qWrZWJrFCI+Wy13KCfFjfjUUXeAV5lXujy3e3+qMk?= =?iso-8859-1?Q?wDkiwOqOHEbgXxEvHUEGExR3Gfd+ex/FXJB0KbocC9UD0O/KhiTpXuD7vZ?= =?iso-8859-1?Q?IMsNGel6+CItrc+JCD08k7IQ3Ct/QbwQ04lxwr4tVG4sJk35jjzu2gVcXk?= =?iso-8859-1?Q?pEtxfApwHnMW+5fqPdfqVsOOebVPY6I3A9eRA8H2+XRYz1vlgDtBp4C6LH?= =?iso-8859-1?Q?XUhBCEoaIwcj66aVaq+zmsoZIlxSulJgzDtxsIpb1mIvZNObNrvwvZ9hQM?= =?iso-8859-1?Q?8Uxgk+Jr0RR+OTrsq36AMdoXRMwq9O3LfKUzG4R5cI3VA/Pi5GKUHznD+Q?= =?iso-8859-1?Q?4xr1E9e1VtBNVoF+xg6xxtzHHidcqqg2wGwy+PsNf3BOlcNcb57jpVpYho?= =?iso-8859-1?Q?xxWcNPAGamAmvpWNxJ5YsRwusAFV6yQLjrWBAI36aUYtSHE8A3ELn8ctR9?= =?iso-8859-1?Q?85imCnDS+B0wMbltj7pPp4+jmtgFtzMTnpmSQaA3giVsXE29H8inia03fy?= =?iso-8859-1?Q?vjNw0XIZxgiZ/4QjbZgtB9aVWyXrHyqvT4u5bVBbyWVe57IociqY4BeLSb?= =?iso-8859-1?Q?QnZ6HvGXm0+sUkBQeb9noyCbdTr+SZ59pLbnSpX8pAcIpJUuU023Xh7R5S?= =?iso-8859-1?Q?MBqmGhfjLlBU8CVds/FtBh9Wzl4ytmrY1SGwLD2r9GC51FkU9nMOXvpbgV?= =?iso-8859-1?Q?bDvJ802nyMtiuwGDGsXRHeRj3JNIq2FihTsdKuTMRaeUl3THobm14ssx9M?= =?iso-8859-1?Q?ETVETRs46tRSH/3LZfBgUPPaN2XHiMBtjuL7jdjsmgNJV0VkFRMinsdYpE?= =?iso-8859-1?Q?58taAfDd4397YeSOLy+K4vcvNYqUG/0H0kA8vXcNZYObPKxxv++aTyA/iS?= =?iso-8859-1?Q?I4J0/leH0O36lguBrqH+ni/9EQ0Tyx96wWDq/f2RLVa82w6P9cjV3W/Y7M?= =?iso-8859-1?Q?CIUnUQgO/xuvmK+i66/QV7SYdn/TJdlk5su2sWRPE4YxP/UCs5W8xJ+2F7?= =?iso-8859-1?Q?we8L4ffy2OQpP2kwYiOxcrYtp0wb0Lynz0gvHZSS5pAE3SqS82dDkDdQ?= =?iso-8859-1?Q?=3D=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: 88ed8580-64fb-4807-cde8-08dbe1ec6d4e X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:16.4974 (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: BfIsKDZxwvaE3SIXIDKF6rnXbA2rZYb+mCR6mHWZccs4IF2t1B2EQGAU6oS4JnxgZPj+EUFMaauiFQDkCKFOhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: co0qNPOKd4oPybfeeLtcO5E_Hyh4lAB9 X-Proofpoint-GUID: co0qNPOKd4oPybfeeLtcO5E_Hyh4lAB9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=892 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621027188100004 Content-Type: text/plain; charset="utf-8" As the GICv3 virtual interface registers differ from their GICv2 siblings, we need different handlers for processing maintenance interrupts and reading/writing to the LRs. Implement the respective handler functions and connect them to existing code to be called if the host is using a GICv3. This is based on Linux commit 59529f69f5048e0 by Marc Zyngier Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-v3.c | 206 ++++++++++++++++++++++++++++++++++++ xen/arch/arm/vgic/vgic.c | 18 +++- xen/arch/arm/vgic/vgic.h | 13 ++- 3 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 xen/arch/arm/vgic/vgic-v3.c diff --git a/xen/arch/arm/vgic/vgic-v3.c b/xen/arch/arm/vgic/vgic-v3.c new file mode 100644 index 0000000000..b018ee6040 --- /dev/null +++ b/xen/arch/arm/vgic/vgic-v3.c @@ -0,0 +1,206 @@ +/* + * Imported from Linux ("new" KVM VGIC) and heavily adapted to Xen. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 . + */ +#include +#include +#include + +#include "vgic.h" + +/* + * transfer the content of the LRs back into the corresponding ap_list: + * - active bit is transferred as is + * - pending bit is + * - transferred as is in case of edge sensitive IRQs + * - set to the line-level (resample time) for level sensitive IRQs + */ +void vgic_v3_fold_lr_state(struct vcpu *vcpu) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + unsigned int used_lrs =3D vcpu->arch.vgic.used_lrs; + unsigned long flags; + unsigned int lr; + + if ( !used_lrs ) /* No LRs used, so nothing to sync back here. */ + return; + + gic_hw_ops->update_hcr_status(GICH_HCR_UIE, false); + + for ( lr =3D 0; lr < used_lrs; lr++ ) + { + struct gic_lr lr_val; + uint32_t intid; + struct vgic_irq *irq; + struct irq_desc *desc =3D NULL; + + gic_hw_ops->read_lr(lr, &lr_val); + + /* + * TODO: Possible optimization to avoid reading LRs: + * Read the ELRSR to find out which of our LRs have been cleared + * by the guest. We just need to know the IRQ number for those, wh= ich + * we could save in an array when populating the LRs. + * This trades one MMIO access (ELRSR) for possibly more than one = (LRs), + * but requires some more code to save the IRQ number and to handle + * those finished IRQs according to the algorithm below. + * We need some numbers to justify this: chances are that we don't + * have many LRs in use most of the time, so we might not save muc= h. + */ + gic_hw_ops->clear_lr(lr); + + intid =3D lr_val.virq; + irq =3D vgic_get_irq(vcpu->domain, vcpu, intid); + + local_irq_save(flags); + + /* + * We check this here without taking the lock, because the locking + * order forces us to do so. irq->hw is a "write-once" member, so + * whenever we read true, the associated hardware IRQ will not go + * away anymore. + * TODO: rework this if possible, either by using the desc pointer + * directly in struct vgic_irq or by changing the locking order. + * Especially if we ever drop the assumption above. + */ + if ( irq->hw ) + { + desc =3D irq_to_desc(irq->hwintid); + spin_lock(&desc->lock); + } + + spin_lock(&irq->irq_lock); + + /* + * If a hardware mapped IRQ has been handled for good, we need to + * clear the _IRQ_INPROGRESS bit to allow handling of new IRQs. + * + * TODO: This is probably racy, but is so already in the existing + * VGIC. A fix does not seem to be trivial. + */ + if ( irq->hw && !lr_val.active && !lr_val.pending ) + clear_bit(_IRQ_INPROGRESS, &desc->status); + + /* Always preserve the active bit */ + irq->active =3D lr_val.active; + + /* Edge is the only case where we preserve the pending bit */ + if ( irq->config =3D=3D VGIC_CONFIG_EDGE && lr_val.pending ) + { + irq->pending_latch =3D true; + + if ( vgic_irq_is_sgi(intid) ) + irq->source |=3D (1U << lr_val.virt.source); + } + + /* Clear soft pending state when level irqs have been acked. */ + if ( irq->config =3D=3D VGIC_CONFIG_LEVEL && !lr_val.pending ) + irq->pending_latch =3D false; + + /* + * Level-triggered mapped IRQs are special because we only + * observe rising edges as input to the VGIC. + * + * If the guest never acked the interrupt we have to sample + * the physical line and set the line level, because the + * device state could have changed or we simply need to + * process the still pending interrupt later. + * + * If this causes us to lower the level, we have to also clear + * the physical active state, since we will otherwise never be + * told when the interrupt becomes asserted again. + */ + if ( vgic_irq_is_mapped_level(irq) && lr_val.pending ) + { + ASSERT(irq->hwintid >=3D VGIC_NR_PRIVATE_IRQS); + + irq->line_level =3D gic_read_pending_state(desc); + + if ( !irq->line_level ) + gic_set_active_state(desc, false); + } + + spin_unlock(&irq->irq_lock); + if ( desc ) + spin_unlock(&desc->lock); + local_irq_restore(flags); + + vgic_put_irq(vcpu->domain, irq); + } + + gic_hw_ops->update_hcr_status(GICH_HCR_EN, false); + vgic_cpu->used_lrs =3D 0; +} + +/* Requires the irq to be locked already */ +void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr) +{ + struct gic_lr lr_val =3D { 0 }; + + lr_val.virq =3D irq->intid; + + if ( irq_is_pending(irq) ) + { + lr_val.pending =3D true; + + if ( irq->config =3D=3D VGIC_CONFIG_EDGE ) + irq->pending_latch =3D false; + + if ( vgic_irq_is_sgi(irq->intid) && + vcpu->domain->arch.vgic.version =3D=3D VGIC_V2 ) + { + uint32_t src =3D ffs(irq->source); + + BUG_ON(!src); + lr_val.virt.source =3D (src - 1); + irq->source &=3D ~(1 << (src - 1)); + if ( irq->source ) + irq->pending_latch =3D true; + } + } + + lr_val.active =3D irq->active; + + if ( irq->hw ) + { + lr_val.hw_status =3D true; + lr_val.hw.pirq =3D irq->hwintid; + /* + * Never set pending+active on a HW interrupt, as the + * pending state is kept at the physical distributor + * level. + */ + if ( irq->active && irq_is_pending(irq) ) + lr_val.pending =3D false; + } + else + { + if ( irq->config =3D=3D VGIC_CONFIG_LEVEL ) + lr_val.virt.eoi =3D true; + } + + /* + * Level-triggered mapped IRQs are special because we only observe + * rising edges as input to the VGIC. We therefore lower the line + * level here, so that we can take new virtual IRQs. See + * vgic_v2_fold_lr_state for more info. + */ + if ( vgic_irq_is_mapped_level(irq) && lr_val.pending ) + irq->line_level =3D false; + + /* The GICv2 LR only holds five bits of priority. */ + lr_val.priority =3D irq->priority >> 3; + + gic_hw_ops->write_lr(lr, &lr_val); +} diff --git a/xen/arch/arm/vgic/vgic.c b/xen/arch/arm/vgic/vgic.c index b9463a5f27..97ca827fc4 100644 --- a/xen/arch/arm/vgic/vgic.c +++ b/xen/arch/arm/vgic/vgic.c @@ -520,7 +520,14 @@ retry: =20 static void vgic_fold_lr_state(struct vcpu *vcpu) { - vgic_v2_fold_lr_state(vcpu); + if ( vcpu->domain->arch.vgic.version =3D=3D GIC_V2 ) + { + vgic_v2_fold_lr_state(vcpu); + } + else + { + vgic_v3_fold_lr_state(vcpu); + } } =20 /* Requires the irq_lock to be held. */ @@ -529,7 +536,14 @@ static void vgic_populate_lr(struct vcpu *vcpu, { ASSERT(spin_is_locked(&irq->irq_lock)); =20 - vgic_v2_populate_lr(vcpu, irq, lr); + if ( vcpu->domain->arch.vgic.version =3D=3D GIC_V2 ) + { + vgic_v2_populate_lr(vcpu, irq, lr); + } + else + { + vgic_v3_populate_lr(vcpu, irq, lr); + } } =20 static void vgic_set_underflow(struct vcpu *vcpu) diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index 534b24bcd3..2819569f30 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -70,8 +70,19 @@ void vgic_v2_enable(struct vcpu *vcpu); int vgic_v2_map_resources(struct domain *d); int vgic_register_dist_iodev(struct domain *d, gfn_t dist_base_fn, enum vgic_type); +#ifdef CONFIG_GICV3 +void vgic_v3_fold_lr_state(struct vcpu *vcpu); +void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); +#else +static inline void vgic_v3_fold_lr_state(struct vcpu *vcpu) +{ +} +static inline void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq = *irq, int lr) +{ +} +#endif /* CONFIG_GICV3 */ =20 -#endif +#endif /* __XEN_ARM_VGIC_VGIC_H__ */ =20 /* * Local variables: --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621049; cv=pass; d=zohomail.com; s=zohoarc; b=mSfRdwc/5XVAHGaUlvs8aBVdgHL0lraP+d7G2qMinWPCBmDREZhYABK4++jEsNY3FTqw4/9Ug2usBMC7nIToS9JHCqwkJz906zGI3w875IJYzJR4+oFa2P209N+JB7fw3jCVtVnk1qjgt2ttHlmPpFdSerGmRUDkQqxrHDGtoEA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621049; 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=u2jlDSOb6c9i5jMeBlUZxpDiIGDmoeGu3EM5435sgIM=; b=aPCsprBYghuGO95Ti/vYom2FoLmriNZgCMgpef5tNocDslpbCvGw4w3msQBYcEyPwIJsPg9E70u4vXkwL/b/bYGX83cFqR72htWCfU3VWMu76E9Bnmxe7UqBsV+6mlWSwbY/Gh9vOaw/84mR1zoM4xyu89nzs3/bkeLRUJnFEfw= 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 1699621049863139.9534435283141; Fri, 10 Nov 2023 04:57:29 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630313.983181 (Exim 4.92) (envelope-from ) id 1r1R4E-0006bc-0q; Fri, 10 Nov 2023 12:56:58 +0000 Received: by outflank-mailman (output) from mailman id 630313.983181; Fri, 10 Nov 2023 12:56: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 1r1R4D-0006VU-6X; Fri, 10 Nov 2023 12:56:57 +0000 Received: by outflank-mailman (input) for mailman id 630313; Fri, 10 Nov 2023 12:56:46 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R42-0001y0-6a for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:46 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 96ed9a6d-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:40 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeee019156; Fri, 10 Nov 2023 12:56:25 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:17 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:17 +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: 96ed9a6d-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JsIFmvozHm0rQeX4BQM1f2BEgzG+WHXglKe4qcKEk4v5QaFDxdQlxDqU0GOyktKEBlyMETCTege3Y5a0aFksJZeLds74XrcXQrhYzYqj9xnzz15mkpJFEu3bNf8XzYdshDl5AXnlXafwsYmm28AxusAbZuP3oJSg5DTv1buUeBfHeza/nso9FeMJUkVWVBXeOqOEWYOM/QiVJjb1O4v9krAZSKko9J9syDBgtAs9IxrfCYbW+BtpK0cGacaNgzyIBsMwxgmURd++IyXGMu4tzbTszKSNmX6tnqpHQwutm9WotlchzWb0BCLDpZjeTJLH4xsKEhqMk/Owdtbue+3xrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=u2jlDSOb6c9i5jMeBlUZxpDiIGDmoeGu3EM5435sgIM=; b=cPCUTN/VjXCndL+UAznvrUqQmfbvQjBSCgqy7BzcFGJITJPG8erobEqEGrVgFKv+K2/xE0NxNYRGCWby5ttwnDqyL3l1nCehxr1Aa8Eo26zSSkTz9homofmSqoZziNi+1XJHy9GtytzhdyRUouPrLAX7s2eqpszkfk18mMx3Ni1o9pUaqQ1fI+z92ctXz/25b8JNvY1Er2/7kgGl2Fma34j1v3D6Hum395ri3s3Bk1eps8lyPhhhQ2KYBPMP15UExmisqHTDJNXCAdRybAYgno4HGzL3kDkZF2v945mNkaI5EPsAsLZLud1ubEAd6jthHImaSIHxM51kX0DfwqIUsw== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u2jlDSOb6c9i5jMeBlUZxpDiIGDmoeGu3EM5435sgIM=; b=BfD6mW23sBJv10+uDbM3Bgf08lsMbsc2KNUkskxf2K3SOEPLpmjDfTBiTiKWtVY2NauD4rQdIDcGEqrAYV9Xmr479Ux7XA9G772PGmfAzuknSPzJFD0/9MxZwH1CzhR7dD8rdWx++tru9rh4gXgrqsvbLbWiRiEb46/fItTliCsaXscWaaYshR3H+/mjot2ulqb1C6VaowIPpHk8fQGaIJ/06XL/B0nldRr2+GI/KusuTUsV8QgphYblI7u0b//sSihOeIr23dTDIU7rpGA4GuVF4SZAXszOuI/IfccE6NY1bc/Qz4XvSBV8Gb5iH7/1SjMnQH4kNjO3XYYKFc5Ynw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 03/25] arm: new VGIC: Add GICv3 MMIO handling framework Thread-Topic: [XEN PATCH v2 03/25] arm: new VGIC: Add GICv3 MMIO handling framework Thread-Index: AQHaE9VLDiAyPu1VFkGDdkAk4XVJMQ== Date: Fri, 10 Nov 2023 12:56:16 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 4df896b0-e089-4403-186a-08dbe1ec6dba x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CxnlTOxuaZEk7MAN/We4yQQrEM9waDUvPWoZQMJBkhzvo5mMiMFexr7p8xyl5hmFtdFHr1K8owyi1krK//D3vbV2VeehrwRd7imFpQlWjwCX7icMWXYaLaWv1rbS3BHUDlHsqMDYmsnpv7jNNz+XBMy0aiOcmNj519AOPMh1DXaInEls4CI/X1BAbXHLvrXde1xMTRoHY0jVWNL01Yz9ukJAvEfv9LaHeKvjf3BuheeD6VjrhDPfnLIyy+SElflvgs9I4MR+ph0zsu0EOfuxP0F2Ut5wkWD9R+69CrpNWoKwlR+zWq8tJCuW1a4CoSIh4y+ZrgMBuco6S+YfrQt2uke4b2t6cV2paoxb30afz7kfrV/vZzITZtXkhv7JaOpfxstkF9EdU5oCgYhtX//RtuTHXlLPihUjqTq1XoKt99WV5Dbjhe8Ov1eif1yVt8gaqgcZE6OkoxP/M0OxmoSEar6tWhFnYCnyO4S9c2PuwsS6QepVd4DcTqnDBHFaJPr19ATD4JMoqxtu5fPm7QpnI4khDm3mVgGYYJiS8UBuEQGiCejw4VGywUvh0Ho+YCrN1OmDy7ngf6P+WDOWsFEgpvk1FGCFyd3vYDk2sLh6RI4XGwHpSYllfEn2dC3rLsI9oG5vTbiJtLOL+R9dS0QFqA== 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(30864003)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(66899024)(83380400001)(38070700009)(2004002)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?okrUPanjYNzUEkVRWRxgDLm6FPp8+bWsi0U9qpV9Ar4TCzG/GumWZCzcc+?= =?iso-8859-1?Q?8xxuytIiLjydwqyl6eYIykNWFwkHsxpNuJ+vmz8eUi+iU+rrnftn5kkGfG?= =?iso-8859-1?Q?0k50FetzHWbtGBvoJvLerpCLcI08YwbnITgso/abOXMLI7Df6SceJU5nSF?= =?iso-8859-1?Q?o+SEvnfrOqUrbBpjJaIioa5G2o0gJnhszX4ZJPtamKxBwKKdGVG6ZBbpln?= =?iso-8859-1?Q?ESN1fhL9+CG6k4eG2Fr7hUnloUUHiyKjw+1vyxAGyOLTPQzZrZf40IWPwR?= =?iso-8859-1?Q?FND+27Vj1MqCkWXINdk9Banqc8w6YDqKy/35elzgZ7+vZxgGAZC2+fyC1U?= =?iso-8859-1?Q?n7I1hzpPZmeO5mCG3jOIFvqwCWjo0phUtH+SJ46wTAR+vPz+uMiPKdNNEi?= =?iso-8859-1?Q?xo6/GUWvazUD29keIs34jppiZiXBA4+ljktFSayGF3uqSlB5F3s7Pg2si4?= =?iso-8859-1?Q?dore71Ymhnz6ZDic/sP1qKYEqOkrTvenuysCUriaUYH18l5HcZNibnkatI?= =?iso-8859-1?Q?adXHYH0u/OvpoH9P6zlqydSEYzfR10X4VOJG2vAjBVjGjqLRCEYIOFiBy1?= =?iso-8859-1?Q?yQ8UJ4PYrOoTvfrKFdgw6Lw8QNFJrCWJtVt+uAmLN2uFWsO27dptLXTrvL?= =?iso-8859-1?Q?DZxvnRgH9IeBzW4fq/jaBzv/RkyQGKI1MQ8t5pRln55Ii760ieXT7S4ne9?= =?iso-8859-1?Q?I0lmB9socQp64EvUVbVzpBqft+q6ZGBQck7CgGE6KZ0LOdBYOwEfFrZw+v?= =?iso-8859-1?Q?KTD5D4zjB7qj+mVLKkXjM1dYMuAFXp5n3LUW8BEBC90DZkcYreSXw1fPmc?= =?iso-8859-1?Q?tZcOjBiAMBZ+I9wh4QpBmFSx0dEehfFSr1jUp0VSOO0XR3uZEXMQ4CL6ao?= =?iso-8859-1?Q?vFL2XLXw/xjRoEtj0Co7D787K/sIT6nGVV5L3yUnpEczfWVMXTB8FjLTHT?= =?iso-8859-1?Q?b6I802MTo9rNXcqvMXEiJ6BjNnzsD5687zcs6yRJhYvxt3HY1FgN4efndF?= =?iso-8859-1?Q?fxXSNZ+5gfFsCSJFk3bra39PbJrVMwgAxACMKXB72Pv4xx7rmSXs4RXS/M?= =?iso-8859-1?Q?tZiCY6AeHh2f7H8nHKhZ5ClEjNMLv6SIf4LZwNjHqKLmUdD61gFM4tRWto?= =?iso-8859-1?Q?3BDjWX9nR8Ms/5tNBIw3cpAHD1U3sQG/9wicfdyloto0DwL2qDVOD+HNso?= =?iso-8859-1?Q?cswf2vlR5ICPNFHJSuol17+Jin6Y1IrCmhLo0k3MtVC55MvuyGCFtZImO+?= =?iso-8859-1?Q?L7buGcSi807muAUJknlorHAehAnB+H1YfDeu3LjOY02epU27+DtfbrQxTf?= =?iso-8859-1?Q?bE29ZpFDZWdGYzWsWHvWKwJc87Cb0UQnHerCE1144grDQiTrmFu9qPFGvH?= =?iso-8859-1?Q?IIvLesLLGRIaPvWgAEhZnoIbvW9PMaUpnk/2T1oHGo9mcp4vc89dzaLGUA?= =?iso-8859-1?Q?DenUhiI+aMECljG5PGi5iPt9XZiclFNCNyupxQXsGP3oQfikZ76NW+pN9l?= =?iso-8859-1?Q?nQuriBu0FbGfJmKdSPb0/GiFIAnTp/PKo8dsdI8nE8mcmy/Nn+sDQLYCl3?= =?iso-8859-1?Q?gTq4NtfsSqqw3MUR3d4HrzP0HW4gj+gYRuYR5ugFmFytQ8wDnbf3wwFTLB?= =?iso-8859-1?Q?FWpjeJjkJlP+2yzOwMK1mOxxFr9ZXWfwQacl9nQjEseDTWoyB00OdUTg?= =?iso-8859-1?Q?=3D=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: 4df896b0-e089-4403-186a-08dbe1ec6dba X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:16.8564 (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: kyIKvqhbxIV9/E/TCJqMRl2RtJRjNECQHS/ojQHeTX2iY0eDW8y94CRzkeveSCcgCkLRBoWL6gMrs1BY7cp5yQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: fN-zLAFXUvUhOCFYKsTUhp7zIJpitx5j X-Proofpoint-ORIG-GUID: fN-zLAFXUvUhOCFYKsTUhp7zIJpitx5j X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=962 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621051421100001 Content-Type: text/plain; charset="utf-8" Create a new file called vgic-mmio-v3.c and describe the GICv3 distributor and redistributor registers there. Also we provide a function to deal with the registration of the separate redistributor frames per VCPU and allocation of redistributor regions. Based on Linux commits: ed9b8cefa91695 by Andre Przywara 1aab6f468c10a1 by Christoffer Dall ccc27bf5be7b78 by Eric Auger Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v3_defs.h | 2 + xen/arch/arm/include/asm/new_vgic.h | 18 +- xen/arch/arm/vgic/vgic-init.c | 10 +- xen/arch/arm/vgic/vgic-mmio-v3.c | 435 +++++++++++++++++++++++++ xen/arch/arm/vgic/vgic-mmio.c | 3 + xen/arch/arm/vgic/vgic.h | 15 + 6 files changed, 475 insertions(+), 8 deletions(-) create mode 100644 xen/arch/arm/vgic/vgic-mmio-v3.c diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index 227533868f..b7059635d7 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -35,6 +35,7 @@ #define GICD_IROUTER (0x6000) #define GICD_IROUTER32 (0x6100) #define GICD_IROUTER1019 (0x7FD8) +#define GICD_IDREGS (0xFFD0) #define GICD_PIDR2 (0xFFE8) =20 /* Common between GICD_PIDR2 and GICR_PIDR2 */ @@ -89,6 +90,7 @@ #define GICR_INVLPIR (0x00A0) #define GICR_INVALLR (0x00B0) #define GICR_SYNCR (0x00C0) +#define GICR_IDREGS GICD_IDREGS #define GICR_PIDR2 GICD_PIDR2 =20 /* GICR for SGI's & PPI's */ diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index 1e76213893..11d8f71851 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -31,6 +31,8 @@ #define VGIC_MAX_SPI 1019 #define VGIC_MAX_RESERVED 1023 #define VGIC_MIN_LPI 8192 +#define VGIC_V3_DIST_SIZE SZ_64K +#define VGIC_V3_REDIST_SIZE (2 * SZ_64K) =20 #define irq_is_ppi(irq) ((irq) >=3D VGIC_NR_SGIS && (irq) < VGIC_NR_PRIVAT= E_IRQS) #define irq_is_spi(irq) ((irq) >=3D VGIC_NR_PRIVATE_IRQS && \ @@ -94,6 +96,14 @@ enum iodev_type { IODEV_REDIST, }; =20 +struct vgic_redist_region { + uint32_t index; + paddr_t base; + uint32_t count; /* number of redistributors or 0 if single region */ + uint32_t free_index; /* index of the next free redistributor */ + struct list_head list; +}; + struct vgic_io_device { gfn_t base_fn; struct vcpu *redist_vcpu; @@ -121,11 +131,7 @@ struct vgic_dist { /* either a GICv2 CPU interface */ paddr_t cbase; /* or a number of GICv3 redistributor regions */ - struct - { - paddr_t vgic_redist_base; - paddr_t vgic_redist_free_offset; - }; + struct list_head rd_regions; }; paddr_t csize; /* CPU interface size */ paddr_t vbase; /* virtual CPU interface base address */ @@ -174,6 +180,8 @@ struct vgic_cpu { * parts of the redistributor. */ struct vgic_io_device rd_iodev; + struct vgic_redist_region *rdreg; + uint32_t rdreg_index; struct vgic_io_device sgi_iodev; =20 /* Contains the attributes and gpa of the LPI pending tables. */ diff --git a/xen/arch/arm/vgic/vgic-init.c b/xen/arch/arm/vgic/vgic-init.c index f8d7d3a226..c3b34be192 100644 --- a/xen/arch/arm/vgic/vgic-init.c +++ b/xen/arch/arm/vgic/vgic-init.c @@ -107,14 +107,18 @@ int domain_vgic_register(struct domain *d, unsigned i= nt *mmio_count) { case GIC_V2: *mmio_count =3D 1; + d->arch.vgic.cbase =3D VGIC_ADDR_UNDEF; break; + case GIC_V3: + *mmio_count =3D 2; + INIT_LIST_HEAD(&d->arch.vgic.rd_regions); + break; + default: BUG(); } =20 d->arch.vgic.dbase =3D VGIC_ADDR_UNDEF; - d->arch.vgic.cbase =3D VGIC_ADDR_UNDEF; - d->arch.vgic.vgic_redist_base =3D VGIC_ADDR_UNDEF; =20 return 0; } @@ -207,7 +211,7 @@ int vcpu_vgic_init(struct vcpu *v) if ( gic_hw_version() =3D=3D GIC_V2 ) vgic_v2_enable(v); else - ret =3D -ENXIO; + vgic_register_redist_iodev(v); =20 return ret; } diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c new file mode 100644 index 0000000000..b79a63ce3e --- /dev/null +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -0,0 +1,435 @@ +/* + * VGICv3 MMIO handling functions + * Imported from Linux ("new" KVM VGIC) and heavily adapted to Xen. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 "vgic.h" +#include "vgic-mmio.h" + +static const struct vgic_register_region vgic_v3_dist_registers[] =3D { + REGISTER_DESC_WITH_LENGTH(GICD_CTLR, + vgic_mmio_read_raz, vgic_mmio_write_wi, + 16, VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICD_STATUSR, + vgic_mmio_read_rao, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_IGROUPR, + vgic_mmio_read_rao, vgic_mmio_write_wi, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ISENABLER, + vgic_mmio_read_enable, vgic_mmio_write_senable, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ICENABLER, + vgic_mmio_read_enable, vgic_mmio_write_cenable, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ISPENDR, + vgic_mmio_read_pending, vgic_mmio_write_spending, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ICPENDR, + vgic_mmio_read_pending, vgic_mmio_write_cpending, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ISACTIVER, + vgic_mmio_read_active, vgic_mmio_write_sactive, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ICACTIVER, + vgic_mmio_read_active, vgic_mmio_write_cactive, + 1, VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_IPRIORITYR, + vgic_mmio_read_priority, vgic_mmio_write_priority, + 8, VGIC_ACCESS_32bit | VGIC_ACCESS_8bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ITARGETSR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + VGIC_ACCESS_32bit | VGIC_ACCESS_8bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ICFGR, + vgic_mmio_read_config, vgic_mmio_write_config, 2, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_IGRPMODR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 1, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_IROUTER, + vgic_mmio_read_raz, vgic_mmio_write_wi, 64, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICD_IDREGS, + vgic_mmio_read_raz, vgic_mmio_write_wi, 48, + VGIC_ACCESS_32bit), +}; + +static const struct vgic_register_region vgic_v3_rd_registers[] =3D { + /* RD_base registers */ + REGISTER_DESC_WITH_LENGTH(GICR_CTLR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_STATUSR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_IIDR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_TYPER, + vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_WAKER, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_PROPBASER, + vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_PENDBASER, + vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_INVLPIR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_INVALLR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_SYNCR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(GICR_IDREGS, + vgic_mmio_read_raz, vgic_mmio_write_wi, 48, + VGIC_ACCESS_32bit), + /* SGI_base registers */ + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_IGROUPR0, + vgic_mmio_read_rao, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ISENABLER0, + vgic_mmio_read_enable, vgic_mmio_write_senable, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ICENABLER0, + vgic_mmio_read_enable, vgic_mmio_write_cenable, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ISPENDR0, + vgic_mmio_read_pending, vgic_mmio_write_spending, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ICPENDR0, + vgic_mmio_read_pending, vgic_mmio_write_cpending,4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ISACTIVER0, + vgic_mmio_read_active, vgic_mmio_write_sactive, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ICACTIVER0, + vgic_mmio_read_active, vgic_mmio_write_cactive, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_IPRIORITYR0, + vgic_mmio_read_priority, vgic_mmio_write_priority, 32, + VGIC_ACCESS_32bit | VGIC_ACCESS_8bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_ICFGR0, + vgic_mmio_read_config, vgic_mmio_write_config, 8, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_IGRPMODR0, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_NSACR, + vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + VGIC_ACCESS_32bit), +}; + +unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev) +{ + dev->regions =3D vgic_v3_dist_registers; + dev->nr_regions =3D ARRAY_SIZE(vgic_v3_dist_registers); + + return SZ_64K; +} + +static bool vgic_v3_redist_region_full(struct vgic_redist_region *region) +{ + if ( !region->count ) + return false; + + return (region->free_index >=3D region->count); +} + +/** + * vgic_v3_rdist_free_slot - Look up registered rdist regions and identify= one + * which has free space to put a new rdist region. + * + * @rd_regions: redistributor region list head + * + * A redistributor regions maps n redistributors, n =3D region size / (2 x= 64kB). + * Stride between redistributors is 0 and regions are filled in the index = order. + * + * Return: the redist region handle, if any, that has space to map a new r= dist + * region. + */ +static struct vgic_redist_region *vgic_v3_rdist_free_slot(struct list_head= *rd_regions) +{ + struct vgic_redist_region *rdreg; + + list_for_each_entry(rdreg, rd_regions, list) + { + if ( !vgic_v3_redist_region_full(rdreg) ) + return rdreg; + } + return NULL; +} + + +/** + * vgic_register_redist_iodev - register a single redist iodev + * @vcpu: The VCPU to which the redistributor belongs + * + * Register a KVM iodev for this VCPU's redistributor using the address + * provided. + * + * Return 0 on success, -ERRNO otherwise. + */ +int vgic_register_redist_iodev(struct vcpu *vcpu) +{ + struct domain *d =3D vcpu->domain; + struct vgic_dist *vgic =3D &d->arch.vgic; + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + struct vgic_io_device *rd_dev =3D &vcpu->arch.vgic.rd_iodev; + struct vgic_redist_region *rdreg; + paddr_t rd_base; + + /* + * We may be creating VCPUs before having set the base address for the + * redistributor region, in which case we will come back to this + * function for all VCPUs when the base address is set. Just return + * without doing any work for now. + */ + rdreg =3D vgic_v3_rdist_free_slot(&vgic->rd_regions); + if ( !rdreg ) + return 0; + + vgic_cpu->rdreg =3D rdreg; + vgic_cpu->rdreg_index =3D rdreg->free_index; + + rd_base =3D rdreg->base + rdreg->free_index * VGIC_V3_REDI= ST_SIZE; + + rd_dev->base_fn =3D gaddr_to_gfn(rd_base); + rd_dev->iodev_type =3D IODEV_REDIST; + rd_dev->regions =3D vgic_v3_rd_registers; + rd_dev->nr_regions =3D ARRAY_SIZE(vgic_v3_rd_registers); + rd_dev->redist_vcpu =3D vcpu; + + register_mmio_handler(d, &vgic_io_ops, rd_base, VGIC_V3_REDIST_SIZE, + rd_dev); + + rdreg->free_index++; + return 0; +} + +static int vgic_register_all_redist_iodevs(struct domain *d) +{ + struct vcpu *vcpu; + int ret =3D 0; + + for_each_vcpu(d, vcpu) + { + ret =3D vgic_register_redist_iodev(vcpu); + if ( ret ) + break; + } + + if ( ret ) + { + printk(XENLOG_ERR "Failed to register redistributor iodev\n"); + } + + return ret; +} + +static inline size_t vgic_v3_rd_region_size(struct domain *d, + struct vgic_redist_region *rdr= eg) +{ + if ( !rdreg->count ) + return d->max_vcpus * VGIC_V3_REDIST_SIZE; + else + return rdreg->count * VGIC_V3_REDIST_SIZE; +} + +/** + * vgic_v3_rdist_overlap - check if a region overlaps with any + * existing redistributor region + * + * @kvm: kvm handle + * @base: base of the region + * @size: size of region + * + * Return: true if there is an overlap + */ +bool vgic_v3_rdist_overlap(struct domain *domain, paddr_t base, size_t siz= e) +{ + struct vgic_dist *d =3D &domain->arch.vgic; + struct vgic_redist_region *rdreg; + + list_for_each_entry(rdreg, &d->rd_regions, list) + { + if ( (base + size > rdreg->base) && + (base < rdreg->base + vgic_v3_rd_region_size(domain, rdreg)) ) + return true; + } + return false; +} + +static inline bool vgic_dist_overlap(struct domain *domain, paddr_t base, + size_t size) +{ + struct vgic_dist *d =3D &domain->arch.vgic; + + return (base + size > d->dbase) && (base < d->dbase + VGIC_V3_DIST_SIZ= E); +} + +struct vgic_redist_region *vgic_v3_rdist_region_from_index(struct domain *= d, + u32 index) +{ + struct list_head *rd_regions =3D &d->arch.vgic.rd_regions; + struct vgic_redist_region *rdreg; + + list_for_each_entry(rdreg, rd_regions, list) + { + if ( rdreg->index =3D=3D index ) + return rdreg; + } + return NULL; +} + +int vgic_check_iorange(paddr_t ioaddr, paddr_t addr, paddr_t alignment, + paddr_t size) +{ + if ( !IS_VGIC_ADDR_UNDEF(ioaddr) ) + return -EEXIST; + + if ( !IS_ALIGNED(addr, alignment) || !IS_ALIGNED(size, alignment) ) + return -EINVAL; + + if ( addr + size < addr ) + return -EINVAL; + + return 0; +} + +/** + * vgic_v3_alloc_redist_region - Allocate a new redistributor region + * + * Performs various checks before inserting the rdist region in the list. + * Those tests depend on whether the size of the rdist region is known + * (ie. count !=3D 0). The list is sorted by rdist region index. + * + * @kvm: kvm handle + * @index: redist region index + * @base: base of the new rdist region + * @count: number of redistributors the region is made of (0 in the old st= yle + * single region, whose size is induced from the number of vcpus) + * + * Return 0 on success, < 0 otherwise + */ +static int vgic_v3_alloc_redist_region(struct domain *domain, uint32_t ind= ex, + paddr_t base, uint32_t count) +{ + struct vgic_dist *d =3D &domain->arch.vgic; + struct vgic_redist_region *rdreg; + struct list_head *rd_regions =3D &d->rd_regions; + int nr_vcpus =3D domain->max_vcpus; + size_t size =3D count ? count * VGIC_V3_REDIST_SIZE + : nr_vcpus * VGIC_V3_REDIST_SIZE; + int ret; + + /* cross the end of memory ? */ + if ( base + size < base ) + return -EINVAL; + + if ( list_empty(rd_regions) ) + { + if ( index !=3D 0 ) + return -EINVAL; + } + else + { + rdreg =3D list_last_entry(rd_regions, struct vgic_redist_region, l= ist); + + /* Don't mix single region and discrete redist regions */ + if ( !count && rdreg->count ) + return -EINVAL; + + if ( !count ) + return -EEXIST; + + if ( index !=3D rdreg->index + 1 ) + return -EINVAL; + } + + /* + * For legacy single-region redistributor regions (!count), + * check that the redistributor region does not overlap with the + * distributor's address space. + */ + if ( !count && !IS_VGIC_ADDR_UNDEF(d->dbase) && + vgic_dist_overlap(domain, base, size) ) + return -EINVAL; + + /* collision with any other rdist region? */ + if ( vgic_v3_rdist_overlap(domain, base, size) ) + return -EINVAL; + + rdreg =3D xzalloc(struct vgic_redist_region); + if ( !rdreg ) + return -ENOMEM; + + rdreg->base =3D VGIC_ADDR_UNDEF; + + ret =3D vgic_check_iorange(rdreg->base, base, SZ_64K, size); + if ( ret ) + goto free; + + rdreg->base =3D base; + rdreg->count =3D count; + rdreg->free_index =3D 0; + rdreg->index =3D index; + + list_add_tail(&rdreg->list, rd_regions); + return 0; +free: + xfree(rdreg); + return ret; +} + +void vgic_v3_free_redist_region(struct vgic_redist_region *rdreg) +{ + list_del(&rdreg->list); + xfree(rdreg); +} + +int vgic_v3_set_redist_base(struct domain *d, u32 index, u64 addr, u32 cou= nt) +{ + int ret; + + ret =3D vgic_v3_alloc_redist_region(d, index, addr, count); + if ( ret ) + return ret; + + /* + * Register iodevs for each existing VCPU. Adding more VCPUs + * afterwards will register the iodevs when needed. + */ + ret =3D vgic_register_all_redist_iodevs(d); + if ( ret ) + { + struct vgic_redist_region *rdreg; + + rdreg =3D vgic_v3_rdist_region_from_index(d, index); + vgic_v3_free_redist_region(rdreg); + return ret; + } + + return 0; +} diff --git a/xen/arch/arm/vgic/vgic-mmio.c b/xen/arch/arm/vgic/vgic-mmio.c index 5d935a7301..1c3f861887 100644 --- a/xen/arch/arm/vgic/vgic-mmio.c +++ b/xen/arch/arm/vgic/vgic-mmio.c @@ -619,6 +619,9 @@ int vgic_register_dist_iodev(struct domain *d, gfn_t di= st_base_fn, case VGIC_V2: len =3D vgic_v2_init_dist_iodev(io_device); break; + case VGIC_V3: + len =3D vgic_v3_init_dist_iodev(io_device); + break; default: BUG(); } diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index 2819569f30..a8e3ef5970 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -73,6 +73,9 @@ int vgic_register_dist_iodev(struct domain *d, gfn_t dist= _base_fn, #ifdef CONFIG_GICV3 void vgic_v3_fold_lr_state(struct vcpu *vcpu); void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); +unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev); +int vgic_v3_set_redist_base(struct domain *d, u32 index, u64 addr, u32 cou= nt); +int vgic_register_redist_iodev(struct vcpu *vcpu); #else static inline void vgic_v3_fold_lr_state(struct vcpu *vcpu) { @@ -80,6 +83,18 @@ static inline void vgic_v3_fold_lr_state(struct vcpu *vc= pu) static inline void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq = *irq, int lr) { } +static inline unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *= dev) +{ + return 0; +} +static inline int vgic_v3_set_redist_base(struct domain *d, u32 index, u64= addr, u32 count) +{ + return 0; +} +static inline int vgic_register_redist_iodev(struct vcpu *vcpu) +{ + return 0; +} #endif /* CONFIG_GICV3 */ =20 #endif /* __XEN_ARM_VGIC_VGIC_H__ */ --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699622183; cv=pass; d=zohomail.com; s=zohoarc; b=ZEURn6PspO2HxbOU8ulRl8ORSxj1LserPeBLvqd4weU0mo/FNZiJwStWYff7aoTeavnvjlhHFAwBIedl29+c4hBed4bBTn38tjZlwEpMrlXw0EjKr6Eu92SYjl+9er+qjU2AA5nCW4zAaV5rrgQPbdGijXOduTWi+OI7G5v+7Uk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699622183; 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=xDNDFGm/oYNbBFMoMI8YJN0p9d0oR7eDqt+W7CVRHVs=; b=IAVDXwSLcjewGPg96wNGsm17TD1UwxuUazeC2UNQgYreOg/WLmBM2FBd4RGTPBw/A/Xz2kBhMyS+e7K74tOHMx0KjIzc6ifQhF0damIf5TGBtMl/DrrCCcU9bnVfpeAEsYlntFdEiSsmQ2eQvD3mowmxWZr7zXerZN+fm0fkndo= 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 1699622183382727.6740893109003; Fri, 10 Nov 2023 05:16:23 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630381.983250 (Exim 4.92) (envelope-from ) id 1r1RMc-0002Wf-8l; Fri, 10 Nov 2023 13:15:58 +0000 Received: by outflank-mailman (output) from mailman id 630381.983250; Fri, 10 Nov 2023 13:15:58 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1RMc-0002WY-4n; Fri, 10 Nov 2023 13:15:58 +0000 Received: by outflank-mailman (input) for mailman id 630381; Fri, 10 Nov 2023 13:15:57 +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 1r1R45-0001y1-DB for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:49 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 97874b5d-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:41 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvY025691; Fri, 10 Nov 2023 12:56:23 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:22 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:17 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:17 +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: 97874b5d-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e7KWg/e7t6SMQhyvR+eWzfQK7yKpiVCGYHkyR5r9OuV0fCSlJr9+f2jrhKQob4ajnSpR6U8TbHnJCNzlrgycPnmUDUOIFr/tiInu0uvAwRK/9QFphNz4GFrhpQVIwCQ57F62ctD4/RSkf+RxyA/i2qYfJKQljvMIX63OWM8ClGp7n8iulbW/C3Fi2w+3kgE0UCUnOhoDQ9H6/4zoGe/JDlLNkKF0i5nmZ4fDkgbuofTEzz+GwUC4WSdqDW6Lf+GlMgMRObKF3iwiYvIhxCwXE6/+vW/hJSOiO0+TdCQ+507QZj55yW4vuqA1r31f9+sS2U8lrOhMBHZ3CpkzJUZh+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xDNDFGm/oYNbBFMoMI8YJN0p9d0oR7eDqt+W7CVRHVs=; b=atCMus5aTcQVYgMLBq+RFFGQp035wV1DJbNDIMBv8RBcU5+zIuVVvF2UhF31XyC6MTt7WjNSs2cqbLv+Q0nomhf7Z3L20hqvMJkTmsUJTTDItb+RFRdxW6R0fj+1tV5tIqPoEtAGDtb2VbEsezoRiWSenj7bFyf1peMQaYJbYV4RdEQeBRFe/pPpOSv1ktpLlSf8+JTFqUgDK+TG7gZzC6n7wQtcDzZmL1dFRsKDssthGqm5qRW0yMu2avZwxriKV97ifeIUOg/SQ+Mp94wGlE9He36Z3uvqbLceSAKCZR8Kc4SUuY/RWB+t9NI50KXD2GBLj/FM3fedAt10jPWLlg== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xDNDFGm/oYNbBFMoMI8YJN0p9d0oR7eDqt+W7CVRHVs=; b=enztE/TtpiIq2/65FHUvuyY8+Ik9Z6QkFe7njrzvf7IxyGVTlhqD2h25h3VPQyjPa3apptCr17SqD1E1ruZwUTBtuOVtm4HfO550udW0kHLXc6J7zRNHokpFQ1E4Z/dPJVRPWP11gVhSjJ7S47IeVBX+QNixiQXdLNjiS28Dapz4nJ8B6L8g6Tf+8OSnzYg4Rv7vQUEwGoTz6BQMdQYuxw6omd38LN5NzZj7a8yIyDMjiOPPKXOs7DAfz9VabakPYwNKYiYXMPAARKEr2HuLrWfp9Wa+yBH0nONN5MkdO4r1IA3e6RDj0jefkTYtyZ0UcFrgUVcQtHA1uKw4CkGZbg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 04/25] arm: new VGIC: Add GICv3 CTLR, IIDR, TYPER handlers Thread-Topic: [XEN PATCH v2 04/25] arm: new VGIC: Add GICv3 CTLR, IIDR, TYPER handlers Thread-Index: AQHaE9VLWPTx8QfRV0CE+z+WCKth8Q== Date: Fri, 10 Nov 2023 12:56:17 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: a571b0c7-d149-47a6-da7a-08dbe1ec6dfc x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7gJLPvOPQ4de6sALUMupf9rBQoGwwXFnxJAQrlJ3duN5+Jgxd13ctD09QqJwF9RWi2MesGvCSu0/lRPoD6yGRV4Fc249Z100/UudtVN4XdS7RyzyYlFclRMAfxGNj5Brzl06Rmu9ruM9zJW1e9yT7Qb73vtex+8iJD3oJXKIq3R1nSo9ZMYd3EviEatW6TWx9wHK2UrOTg7147LsffCdaeB3s5wzt9huNXhHXjYYUjigX/PObK+kFvs0ymzVRjTa8uUCKFPm25rx+MB9L50+MazqKhuddlhn7kmh2fi4qBBbzU+9luJ/C+xtD3atf7Ky2PQ+f9WhzePuxPWrg28iDmy2X3NnUQeiXUZnu0/xCt1iNkbmKB4b4FjrUI8Gpt4vtWjEjCfpn/TKHGhCXtHCvxB8I4lBX0YiWRZc/ee2SipaeSCoXfsbKLRXxFqQRuleqY7fQ5h4gusG5AJaKYbI5k1sihoQnAxw2Vu35lFKzX8L7/D/tiZvoWPLuihu5kBv4jFak3id2An5PH9wvURsLvDGrAZrBIBBrbez6iTizTuC9X2Lx3GvYlRAdIMDwp1M62RRssk2G3k2A2OqSVExLJ1qfp0Pb1Ss6OuWtOBBWPJ5KthJWLbGq+wzzp/bksw/ 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?16q/IIuG4aHCtSFPsxHduyMTV5n8kO0y8CSiP7+dLNmXFEeI7lyBU7jpTS?= =?iso-8859-1?Q?i3SaE7jO+gd6JzNCgsR7eiRzwbwIsaACYR9fnNIZiyO5DTEr7Z/rOzCFwn?= =?iso-8859-1?Q?7Dfj6BXXfhhmRxR0LZlTXMgvUDJGf5MbdQlnbMY4Hosi7xc8N9EFszTIR7?= =?iso-8859-1?Q?MC8p7fmNN0tH11VliUQW1u9ZnkFWaG1w5zufVuFwQ2i0a6RP8J67QcvhI6?= =?iso-8859-1?Q?/KThKvXaShhV768XRDsBzJUtwj3KqM88QRxjmuSvDzANd3XUxHlppxROq6?= =?iso-8859-1?Q?Lew/ndV10TDhDVXWHVDwyXjZUmLIFqNaC6MgCeVlnsgLEmJR+3V3T+BjRr?= =?iso-8859-1?Q?RAHHDzx/3yXiFAynnSg95+Ze19EeSAkX3YQMz1ZRcY8Qli7Au8za6yHUG1?= =?iso-8859-1?Q?oOJIGxFx5t0OC4cCfm28LWlRJRoTuBL+bpKX36A5QVU0HJq4602jbku3Ty?= =?iso-8859-1?Q?kaPBEFFzGh3Os2JRSZKCGKSuZWUWFpzv5JhIbnXlHEIDrLC+bisZ4MkOrV?= =?iso-8859-1?Q?m7gOZlrvAitsTf7WotsYvvZHaxdiV35bN0q6UUEHIsBiRnb1Q6hhICG586?= =?iso-8859-1?Q?DijWe6ozzmhiUv1drgyQ8+s/ey4jaNnGIjefb36FGgSw6EXb1H18tk+jVH?= =?iso-8859-1?Q?YYO4j3WInaze4s2KD4mEtG1A3S+8ktwQHDYfNRzEsgmowWCgwry/yEXgo2?= =?iso-8859-1?Q?ge5uOZPtWZpXYyVyfdLH7M/xK6IH2C3C/BgrVN10OODyzUgBvdp44Iqd5L?= =?iso-8859-1?Q?qdLj98oZPRf4PUa4geeg4aXw6tqjv1uLMNXYYmc/26Xgyc+by1NIgUCdXR?= =?iso-8859-1?Q?2tmdPMZwZDnq7Kp3pdLDU/KGQk+RxYUfogwDdfjRILcGGmpwohbq6JoVMp?= =?iso-8859-1?Q?FJL1e+r3t7AbTKxaNUxJEtj/SBLAjfM6g63wro0cVYBbm+P8eyIQS4rF/J?= =?iso-8859-1?Q?2LNLV3R5xOxyTkQb6pa2jA4EOFb88vJO+X7BJaTj/hpv7v7dSizIoQuCt/?= =?iso-8859-1?Q?+By0xbBC+Du5BvfvkosN2E9EJ7q89kQe4oR0EXcTc3uwYVApmKg9MQ/Bdl?= =?iso-8859-1?Q?7blgu4/L3sPXB77kxNTsGrNnD6SXXqmFQysUEUPVucHhzgxoisWTiXSVMK?= =?iso-8859-1?Q?IfGEN8TwHUHW6dg3pP5G9gaseTt2+dtsk/aOTSf6w45uaVIPd17jorq9Rq?= =?iso-8859-1?Q?4WAT/PYLrMqL4b977qDIE6xekGFNumQgqNHO9n6Sg+U4g4PmDR/r1hjjFg?= =?iso-8859-1?Q?1W0ll50n5e+DgndhCcdlj6slPCgkty2cZQka6hNwh7mxcV1TCk1Dh7Z38S?= =?iso-8859-1?Q?lTNQxvZs6dXNC7+or/8FJrPBxeKZiQ6U+K4ZX8ZAYpLYoIyB5aWATP53Mz?= =?iso-8859-1?Q?E+72IA9rNOmaHUSCLuPfEn3cSnR2mX2kJhpJ3ig5C28A7V6bCBreuEZ0w9?= =?iso-8859-1?Q?c47BC4xr0Dbjq1+v/fP1ZEypj74CY1tlYrWPYseKWh1umlpn9qdw6GDqIf?= =?iso-8859-1?Q?A+arUUV+ETvOfTrywPUaYcprea56BkZSf76O7LAWTkPTzCmQkESBFlKgMo?= =?iso-8859-1?Q?T3ale2Ip465PmmzJMgbwUjsnFyeIB+MW40pMNnBg72PRGuE057eBiiD8kv?= =?iso-8859-1?Q?knwqD6Na1itaZvoHY4Ax97BcdQwe/yI2y2r4djXDKGdyUgS8UXBgNpNA?= =?iso-8859-1?Q?=3D=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: a571b0c7-d149-47a6-da7a-08dbe1ec6dfc X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:17.2331 (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: caN7i1Rj+smbIMRx6LR+czihsIjyT8Q66iKab/uumUsizAeHd9HEy0YCHVChIql5GdG4qgQ/KrkhPQKDuqcYIQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: 5PDy9eZtwdV906AuYLrt5Ou7JaXknPj2 X-Proofpoint-GUID: 5PDy9eZtwdV906AuYLrt5Ou7JaXknPj2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=955 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699622185028100001 Content-Type: text/plain; charset="utf-8" As in the GICv2 emulation we handle those three registers in one function. Based on Linux commit fd59ed3be17e41 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v3_defs.h | 2 + xen/arch/arm/vgic/vgic-mmio-v3.c | 71 +++++++++++++++++++++++++- xen/arch/arm/vgic/vgic.h | 1 + 3 files changed, 73 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index b7059635d7..e0d536e887 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -25,6 +25,7 @@ * Common GICD registers are defined in gic.h */ =20 +#define GICD_TYPER2 (0x00C) #define GICD_STATUSR (0x010) #define GICD_SETSPI_NSR (0x040) #define GICD_CLRSPI_NSR (0x048) @@ -57,6 +58,7 @@ #define GICD_TYPE_LPIS (1U << 17) =20 #define GICD_CTLR_RWP (1UL << 31) +#define GICD_CTLR_DS (1U << 6) #define GICD_CTLR_ARE_NS (1U << 4) #define GICD_CTLR_ENABLE_G1A (1U << 1) #define GICD_CTLR_ENABLE_G1 (1U << 0) diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index b79a63ce3e..beb3d6ad2a 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -22,9 +22,78 @@ #include "vgic.h" #include "vgic-mmio.h" =20 +/* + * The Revision field in the IIDR have the following meanings: + * + * Revision 2: Interrupt groups are guest-configurable and signaled using + * their configured groups. + */ + +static unsigned long vgic_mmio_read_v3_misc(struct vcpu *vcpu, paddr_t add= r, + unsigned int len) +{ + struct vgic_dist *vgic =3D &vcpu->domain->arch.vgic; + uint32_t value =3D 0; + + switch ( addr & 0x0c ) + { + case GICD_CTLR: + if ( vgic->enabled ) + value |=3D GICD_CTLR_ENABLE_G1A; + value |=3D GICD_CTLR_ARE_NS | GICD_CTLR_DS; + break; + case GICD_TYPER: + value =3D vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; + value =3D (value >> 5) - 1; + value |=3D (INTERRUPT_ID_BITS_SPIS - 1) << 19; + break; + case GICD_TYPER2: + break; + case GICD_IIDR: + value =3D (PRODUCT_ID_KVM << 24) | (VARIANT_ID_XEN << 16) | + (IMPLEMENTER_ARM << 0); + break; + default: + return 0; + } + + return value; +} + +static void vgic_mmio_write_v3_misc(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + struct vgic_dist *dist =3D &vcpu->domain->arch.vgic; + + switch ( addr & 0x0c ) + { + case GICD_CTLR: + { + bool was_enabled; + + domain_lock(vcpu->domain); + + was_enabled =3D dist->enabled; + + dist->enabled =3D val & GICD_CTLR_ENABLE_G1A; + + if ( dist->enabled ) + vgic_kick_vcpus(vcpu->domain); + + domain_unlock(vcpu->domain); + break; + } + case GICD_TYPER: + case GICD_TYPER2: + case GICD_IIDR: + /* This is at best for documentation purposes... */ + return; + } +} + static const struct vgic_register_region vgic_v3_dist_registers[] =3D { REGISTER_DESC_WITH_LENGTH(GICD_CTLR, - vgic_mmio_read_raz, vgic_mmio_write_wi, + vgic_mmio_read_v3_misc, vgic_mmio_write_v3_misc, 16, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICD_STATUSR, vgic_mmio_read_rao, vgic_mmio_write_wi, 4, diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index a8e3ef5970..b3bba7b5f3 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -28,6 +28,7 @@ #define VGIC_ADDR_UNDEF INVALID_PADDR #define IS_VGIC_ADDR_UNDEF(_x) ((_x) =3D=3D VGIC_ADDR_UNDEF) =20 +#define INTERRUPT_ID_BITS_SPIS 10 #define VGIC_PRI_BITS 5 =20 #define vgic_irq_is_sgi(intid) ((intid) < VGIC_NR_SGIS) --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621052; cv=pass; d=zohomail.com; s=zohoarc; b=W7XHtNwzYwun0hl8ejmsaO/SCxExmEADiutZhnkj8VAUUqM5O1qi6EoETm5fz3xys7NvDcwDNWMw3sdoGREEvMbPZyygynvFgEgXeAj7A0rugOjkeR4TJRfX9eKnFgnAKrzLGzyDd19+Px216djdldHSndJ/uOEx7hHMINAr3tA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621052; 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=O5jdN5uXcsNiZFC3fCVZlqgLJLq+GNIYO2Q9vhRpzs4=; b=JdPoAc3IjWk68iyExovdB11AQ/DOsW3wDq2ftDUiYdVgQ6GAd2kF7VYlAXQPDMzmmoD3U9k5ls0C6ZSVNpLsZAYVc56A0oxs10IBs0KHrjLiqPGdSFU7fXNgzr5vc1GPU0TVdbrfHyk3qX6K/Fkar4YB2c/KWzYaMglhXYAhgnk= 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 1699621052694561.9351745718536; Fri, 10 Nov 2023 04:57:32 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630314.983192 (Exim 4.92) (envelope-from ) id 1r1R4I-0007H9-JD; Fri, 10 Nov 2023 12:57:02 +0000 Received: by outflank-mailman (output) from mailman id 630314.983192; Fri, 10 Nov 2023 12:57: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 1r1R4H-0007Am-4b; Fri, 10 Nov 2023 12:57:01 +0000 Received: by outflank-mailman (input) for mailman id 630314; Fri, 10 Nov 2023 12:56: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 1r1R42-0001y1-Ck for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:46 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 96cbe06d-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:40 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvZ025691; Fri, 10 Nov 2023 12:56:24 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:23 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:18 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:18 +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: 96cbe06d-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KmfMeDiLhV50Jd17E0cA7jEFlvs14Z8ha/cIB3Y5MAeJ2WxdX9d4KQ847V3L/TXBEt/CK2X98ooWv3idvTOHtY/sKOOeC6rahTtBgeXZ8LD0NhGJnfvJ0ez3niG+boCI0Nfc090GYw+uOOTwwgSTyXpl+KG8262xCoHqhniQteY+TM1jrwdwx6Gm7/+SQ5ediseMWslw6STjLbvU323Nhuu9A0jf8Voo1uk9VRDcp8iMLU5R32KAZf2GzLZwQQIwUjvoLaqqz9VhzTaM6Hiv9BeFvW54hSoZWI1ssaltzaiS6Ksrp6pGkCymLCR3jUhjpZq/0tkPqwFVmQcY+xOsMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=O5jdN5uXcsNiZFC3fCVZlqgLJLq+GNIYO2Q9vhRpzs4=; b=Lxlb/Ai+1G4CkRgeyOocmc1Kw2+mI5Pu66T/BN0hvC05zewUZygxv1b1A++RHvieiTYLOoWq02yY7+uMHhJ6o90sRaKZWLgfNVfLbci1ES+kpMVra8MDT0I7v96TYnvPumoRNNqUNBoKEeLfHa0ECfSptdxzcrP1lNp1l5u64m7XKmggty16VI0dPnJG+ZWeqCNAM3rFnTWwZhijRtuM7zu4a7nu++ERSKnN2sNNAsFVZhumAHU3oI5Iu9cVjNnJ7Dz91wr73kXdKye69yoD02Dt/1+f1yoHq65orEoif3CNPWf8lGNsV6sQmMzceb2uzT/Y1D9gIogDbR+eUc/GtQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O5jdN5uXcsNiZFC3fCVZlqgLJLq+GNIYO2Q9vhRpzs4=; b=lu3re+7kF1jLfxjAoZeIv/sBC7OJJNv+e9gFmYaQPn/Zii0oSqXFdk13b5uxKwaV+nVe6p+7XJX7V4bD2hZhlUCZwHQyL2B+/Xnl9MiNK/amwpLq6Hvix41yNVzPK92jPYS0PoCV+usUeLOA6d+yVf73hl92SdatiXIfB8DqEmNGcLwx0lj+4CohXQjnBACJJG4F0PyXV6coUjbQwy+4gTh62BAYull27OaD3jsRTwX7rnqSpFpt0jFQmmz/bhh7mHXVjsJPSULJizMaZcodTfDpCuQn08LJXE/NDZdtLH2hADxQhWqScFFbZIdGL+xUihFgUqalGLqD3y2YCB+oog== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 05/25] arm: new VGIC: Add GICv3 redistributor IIDR and TYPER handler Thread-Topic: [XEN PATCH v2 05/25] arm: new VGIC: Add GICv3 redistributor IIDR and TYPER handler Thread-Index: AQHaE9VL00f8rSPwJ0KirkGhv4uq5Q== Date: Fri, 10 Nov 2023 12:56:17 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 0f7f8033-a143-46f9-2709-08dbe1ec6e2a x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: efwsLLG2yZFY6Z8jyywI3ZQPhNMVYHJKLdQeDsLVLGjwKCxy4HJ3EUh6u6rWnWEVKf8NhyvSF8kCeXv83ZiGlcPKFAH05AhYTiCMTMsJV6UphkmX71hzf+D/XRKI8c1F9uvUAHG0eGUpzmQ3dFveFPK1R/bLAw2XG5yQh/PjGKDXaKNE68DbTB9V8DjGF26109mq1BHZqyZIf0Z8Blb19k9R9Zu9tuECBM+ZB4EN7JmQwM2uq7rVNFQ6wxSfH+TIMHNW2fB77yuNnXpnf7uKrMwMQB/kIe33QQGCLRqEOyPP1o+HRG2CRxO+yPqBzxuwBpA8SNh+EJsegW93IxjFspsmT/DbdvdtIFbTtVAQfAqo//G1aeN47Hbg5yjAc6c6UFE/fn6MlZWVwDLsiS+md2cZBuzxYZTiSfvPbKJCmRvKeeuQ7ZrJMMIR6bGeqhuGKcS10p0cfxIrLDC5CsOQpmTAvV0uLGPhjVK5tqulZPo0UGDovlhyYDYbWWbkXzQC1co9ZX5PJIF8JkCHa74el3/etnmHq8us73pgNFdxhaZZfsadMwQskTqg1d2JjZWKUDE07tROfZOPJ6pkj2nEjifA/vzmzug3OC6P3o2KzhypjIFxRLdwwftvVgCmxV9+ 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?hZh1ks05FwnMIzJLppAdA70WnCx89WQTWvXJjZ9pBd4kJLCn9ca1v/tg8u?= =?iso-8859-1?Q?j5uoO0uC/ys670+SCySOOS+SzPgpuYW3R3NwTa4U5Cx+Hew66JJlqumm/7?= =?iso-8859-1?Q?TaaxMLDg1v9siK4OUoSG7yj5MLuCFrxrMIim2qqTVzUfV1TgUMXWHBc2Na?= =?iso-8859-1?Q?xaNxH6Z/r/nBAxojo22PQK9g3/j2TsjLCvuXrq92ERJIHQWGH5ECU/ns1k?= =?iso-8859-1?Q?Fizq/fbzM8ohtrLO593D4YOCbJdrQVWLNo4eNzUQKymsviWZwChMY9pPC5?= =?iso-8859-1?Q?H/D+OFLevEv4+CoG09BkvgROUlOLTw3TSGT0Mr7vVY9kxAhdeNnbRcKygW?= =?iso-8859-1?Q?PfkRim0HjqkaqnLzQKReDHty71Xv/8WD3bPIQptYunbnUboK+VuhZkH+2F?= =?iso-8859-1?Q?nAEv6smi5M8XvRbXUVdU1jDleRhZHoAFPJonC/pBWp1WNgTsu0uTmDxmL0?= =?iso-8859-1?Q?FsuMjnpEc/OOaPwWhdz3fB0I+MxvPTIPakEvzgZg8Ssuq4+uz/UTqkY7u5?= =?iso-8859-1?Q?kejBVFJRFCM+aSM2MuoY8oxHN+68dC/8SV2IJanuEb4i1HPKIgWkd/SKe7?= =?iso-8859-1?Q?AguBl5BlmPi9+HPm5TNCys0kBVYLuFfNsnAR5nOkKyZmi5oEcya/NS/wD5?= =?iso-8859-1?Q?+ZToq8p9Q6UHFaTzQ6oJ8IGcjsZb0NNip9P0zdlu7eju5HwLOaxzyoPUS+?= =?iso-8859-1?Q?UG5gUQZ5J7d4doDPPEm+I9QknMWL8SxZRGCOdlSZ0/DfvCXJjkeLC+hmXJ?= =?iso-8859-1?Q?QpcIcy8bqqUsSUnlXiqQAZZQ0Oj2h470eLeaM0qFfJJYP5fGfCfIMfSTVT?= =?iso-8859-1?Q?NWrROyydoCiE7piK39Xpz3qDPHxby0Z67TvrIeJYB6dmwXMQEoJNhN5Ate?= =?iso-8859-1?Q?AI5XynQaZPvV+PHHDvQug00Fl2esPeObTN0bIrDt5L/GRN5eG2DnalawLL?= =?iso-8859-1?Q?m1rK1AsSdyrgrwCwogyn36XNeFYIycghX3RL8w2wEYQNngdsKRoiCHDi3v?= =?iso-8859-1?Q?Fwq4oJ0hKjZLQECzgLwnBf+3crdGn3bMTGygVRtaJOc2PSac3gjGPbGh8o?= =?iso-8859-1?Q?Ss+Q9ACP8UQrrjo1ukH/KYmGPAed/7EY6VqU97X8eH53wLXA5ZhEjUp2cS?= =?iso-8859-1?Q?OWIXcNEkVHrYotwvNhc5KVVzErpzubVSoVC5iSQIaH5c6wBCK0/aHf+ean?= =?iso-8859-1?Q?QKa98jGoakJEC1Nv7p6tsbVWFvxPjr6f8lgtOHhKNEHYPDFG6LtUCbr467?= =?iso-8859-1?Q?o8LQ3F8lVZt9d5DxCCIpaOD6RzXXy2V00qaiACqJRtfId36ZUPUK5lKTwc?= =?iso-8859-1?Q?ymWW7HjX3alCSOXaBu2Waa4jcJAQDqIAkw1+gu3JDOKsCbg9P2+r6lDM3u?= =?iso-8859-1?Q?BDZFwlXRnxGFYNeMqKAjFU86SKPKKytxx5oZHSHLfwfngIol4Zp+84f0DC?= =?iso-8859-1?Q?0hoOp1yNJScj+lRleCMFbCopvg1UY32c38ltFndY54mNjOrMcXClf3iD2z?= =?iso-8859-1?Q?SMzLcw5MFYUeFTfuy50NF/ZK+n2gw+5rQhe6HvmvZfaAXr2XNGtXDubcMK?= =?iso-8859-1?Q?sS5bJF3bjGC6an2H6KQXAKsxGQF6qCPmqROXFVLhkvrNOQvF2UeN3N6FXs?= =?iso-8859-1?Q?ZGgGSZJOJkHpomdzUWViV9jM9vcjwV8jes442SV2rRMi9andtsBVZw5A?= =?iso-8859-1?Q?=3D=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: 0f7f8033-a143-46f9-2709-08dbe1ec6e2a X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:17.6259 (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: DqkaOknF/vZrURWnSXlUj4ySUD6kW3a5aL18z9ub0S278IHmP3D2VIzh+WiFUvNhMDnVkD7XcajTFr95DGtx3A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: YkRQIsWeqjlxtxDB-HdRWnhZtjNIiqKL X-Proofpoint-GUID: YkRQIsWeqjlxtxDB-HdRWnhZtjNIiqKL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=994 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621053260100003 Content-Type: text/plain; charset="utf-8" The redistributor TYPER tells the OS about the associated MPIDR, also the LAST bit is crucial to determine the number of redistributors. Based on Linux commit 741972d8a69ce74 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-mmio-v3.c | 65 +++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index beb3d6ad2a..707a38c727 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -22,6 +22,13 @@ #include "vgic.h" #include "vgic-mmio.h" =20 +/* extract @num bytes at @offset bytes offset in data */ +unsigned long extract_bytes(uint64_t data, unsigned int offset, + unsigned int num) +{ + return (data >> (offset * 8)) & GENMASK_ULL(num * 8 - 1, 0); +} + /* * The Revision field in the IIDR have the following meanings: * @@ -91,6 +98,60 @@ static void vgic_mmio_write_v3_misc(struct vcpu *vcpu, p= addr_t addr, } } =20 +static bool vgic_mmio_vcpu_rdist_is_last(struct vcpu *vcpu) +{ + struct vgic_dist *vgic =3D &vcpu->domain->arch.vgic; + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + struct vgic_redist_region *iter, *rdreg =3D vgic_cpu->rdreg; + + if ( !rdreg ) + return false; + + if ( vgic_cpu->rdreg_index < rdreg->free_index - 1 ) + { + return false; + } + else if ( rdreg->count && vgic_cpu->rdreg_index =3D=3D (rdreg->count -= 1) ) + { + struct list_head *rd_regions =3D &vgic->rd_regions; + paddr_t end =3D rdreg->base + rdreg->count * VGIC_V3_REDIST_SIZE; + + /* + * the rdist is the last one of the redist region, + * check whether there is no other contiguous rdist region + */ + list_for_each_entry(iter, rd_regions, list) + { + if ( iter->base =3D=3D end && iter->free_index > 0 ) + return false; + } + } + return true; +} + +static unsigned long vgic_mmio_read_v3r_typer(struct vcpu *vcpu, paddr_t a= ddr, + unsigned int len) +{ + unsigned long mpidr =3D vcpuid_to_vaffinity(vcpu->vcpu_id); + int target_vcpu_id =3D vcpu->vcpu_id; + u64 value; + + value =3D (u64)(mpidr & GENMASK(23, 0)) << 32; + value |=3D ((target_vcpu_id & 0xffff) << 8); + + if ( vgic_mmio_vcpu_rdist_is_last(vcpu) ) + value |=3D GICR_TYPER_LAST; + + return extract_bytes(value, addr & 7, len); +} + +static unsigned long vgic_mmio_read_v3r_iidr(struct vcpu *vcpu, paddr_t ad= dr, + unsigned int len) +{ + return (PRODUCT_ID_KVM << 24) | (VARIANT_ID_XEN << 16) | + (IMPLEMENTER_ARM << 0); +} + static const struct vgic_register_region vgic_v3_dist_registers[] =3D { REGISTER_DESC_WITH_LENGTH(GICD_CTLR, vgic_mmio_read_v3_misc, vgic_mmio_write_v3_misc, @@ -148,10 +209,10 @@ static const struct vgic_register_region vgic_v3_rd_r= egisters[] =3D { vgic_mmio_read_raz, vgic_mmio_write_wi, 4, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_IIDR, - vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + vgic_mmio_read_v3r_iidr, vgic_mmio_write_wi, 4, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_TYPER, - vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + vgic_mmio_read_v3r_typer, vgic_mmio_write_wi, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_WAKER, vgic_mmio_read_raz, vgic_mmio_write_wi, 4, --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621037; cv=pass; d=zohomail.com; s=zohoarc; b=O/RlNxUk1+nkwGy/UBC0xtFksxSgpopnn/7NTbwsm8qHrpTwL6qx4NaSO0uU7oWbgp7INDAJCnbPxSPj56xVT4vnMVCjXrI8FpR3QOzvX8rUCgD1OvKkG4afzybCOkCfErZXexUOtKMJlclE6/6RDvQTfm5ofsKJJrghK7ZAtUI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621037; 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=8BO6CE7jJalbeGAgdrTFV8nvHA8V1OULfNTQToPec3E=; b=FS7oGzuoEGsRNnrvucho7atJtoBg9HriE+4JcVYvemTkuCywSpJNFqSvG99dvygXbleIzLny1dBuGNQk6wzFFFSnKC62QDqqptd/PCENv7OZq7kl0Tdh07fPSeutcAZPn/hKvpAocGMrCxx5jqf78z5Uo/UDMHH+HxjyfZLcaUo= 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 1699621037512307.05611680723644; Fri, 10 Nov 2023 04:57:17 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630309.983142 (Exim 4.92) (envelope-from ) id 1r1R47-0005Dt-I6; Fri, 10 Nov 2023 12:56:51 +0000 Received: by outflank-mailman (output) from mailman id 630309.983142; Fri, 10 Nov 2023 12:56:51 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R46-0005Am-RW; Fri, 10 Nov 2023 12:56:50 +0000 Received: by outflank-mailman (input) for mailman id 630309; Fri, 10 Nov 2023 12:56:44 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R40-0001y0-6Z for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:44 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 961ccc77-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:40 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuva025691; Fri, 10 Nov 2023 12:56:25 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:18 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:18 +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: 961ccc77-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LGvA/t2f94c/luHukq+n5yhivan/BrS5nFOp4FOmiaHHs+AgR1GrZwO2wwMy5yYGlTzEBAS8SZMPNM3Sboh/GYSlfB695dfdw9HEhdtZr/3UmNNN1kNo1wmiq25/FBjnMuYFn6y/VtCndyDL10C3eqYXmP9nkBgCNMOwZOaRrc2/FrLV6TopNShX2eUP35gKLFv1U1pMm+Btno27UGiNiQFGqFFcKlBTZpz80z1JpLKrECHvSrhdJ+1JWRrauCLt9g3HX+CJ+NDac3eMce0VqgceTlMvLl2SIQoyZfUprp/6LzwsM83EirKgD4CxbStuCzdgSqxodtkhbIM4GSIuXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8BO6CE7jJalbeGAgdrTFV8nvHA8V1OULfNTQToPec3E=; b=S5LuMvMCuJfbgSvqkGpDC+Lwgj6PsjgIYNQu/pXCQHajiLBZ50NJxWeKSjBD+GXMGDlez/23z62m4PtpP2xYexb8DuoAf2YPobgg996VsPuVBQu65mIMc5jKxllfnncH9d3ZmWtBozSIx+BNIGmg7mcUK/FTjB6w9oADuz2ZS0B47KlmPwjLboWnXzhDUIcuBDww0WSKNMhJtWrkMwzMavM7KOMjfg+18K1hXAQypn/gEXq0Wn2odxdf5HHqHJfqZNw3OIsI+o9CFsydpe/QUD+jjN4EliYeoQI0J7RDul4n7WlvQy55r2QXnTiAysmKlDl/OpcR0YHMBRwcPuo+wQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8BO6CE7jJalbeGAgdrTFV8nvHA8V1OULfNTQToPec3E=; b=EKEeJGDCLw/bKdYVsMEC+fdc7TRTeMJQHPi+ARQmKebVLFYZl5H33/LuELJ/LGEN83uCgd6JbOSH3WsJBqOIWOrkOgqngUq9xjqkUlbrIWxcOgTwYjufx+bPRUXAob3yD+qtMtq2I/1lVfqLjjVIPzFP0byk9WCosRbkoBU3VmJNOskrvDeauN7CvyXewfNc+07LSzxpy71g/9jy6XJarAi1BV3QHuz2e7FCbUzhqQzXYUjIQJpCFmnC1Tht2vdZwXQK26IQgABjFBBoFNVwsvJZVI3KgrApEWx3YYUuPhWEEoDzG/hABw197MA+YBlRFkHjZU5aWp0DM7VbOXnGkA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 06/25] arm: new VGIC: Add GICv3 IDREGS register handler Thread-Topic: [XEN PATCH v2 06/25] arm: new VGIC: Add GICv3 IDREGS register handler Thread-Index: AQHaE9VLeDi6QUYO20y4T5ZlvdbpBQ== Date: Fri, 10 Nov 2023 12:56:18 +0000 Message-ID: <7c563e5745c14123c8124e765bfff1345ad73c6b.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: aaf61761-28bb-4a91-73dc-08dbe1ec6e57 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qpCXGix4xYfv4cNyjkYxJDMiDudvZ8CH659vynCNVf0+0H2NcPJMDIwAMtXuAF5M9ilfTKfqJNtnnjKvHjav64kExvQDaMn2M6T2DVyR6EqCCCCmbf9g0eAz+AfBFOExdLLes/nbqbdQPfHZBA3PUvQ5Yyj1nu7ocm9uhtynlerQcK/zCISaWvByuv8qli4FoxRJ4U6O/M1IiKOPd4xexYbA4z/72s/aO8MZipxqbxVixYT6zUfonJyVbcPoSMdDD1pwHLtQ1W+qCgW2P2GVpSH4KEU0DxWTelaWTVOu+qq5/Zx1TVadfuI4GPo6tEUOvti3YugxnmWz3Qvzye8ocqYuH2xwOvweTVcvmoJR8jPA7wR+dgN9KriR9WPJFHWKlHDgHon8Gq+9GWpVrf53zyOZ2ColgouxsnSbeUNSln/FifhKF1dBa8sX/bZkbFqpbFTV6h5Rhzbc7WNzH1K62O3VNSL9Z+KOEGlGiTKDZsONcOzpfmy5WydxzKCh/1tc0WRmEqmkGVWVZYgX3gqPqCFk6V0blBmHlKiFjInZq+sRtMaQlHmyLbPcQBv8DjUc0999n1k3if4tNKFi4b1kXage10vfPMsW/Qf0rFtgBoo= 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?QLW/D/QU0LQlBdIFj1yTIS+ji1mQR1NBnq/GywTh4LPncYs5wSSPoUYX/Z?= =?iso-8859-1?Q?RW5r4zd0gvFcgbMq+YnTHaU7g+8D3xCsK5RpjiBOh0VceJWidj40QNsJsg?= =?iso-8859-1?Q?ExZa24LRPtEAmMV7BvaCPnm7EvHReZFjv0ThaU2H0nYsk4Oyz3nD8/R19b?= =?iso-8859-1?Q?7JkMgQ2rD4CmFWIKwI5eM2qu33+edok3fuRXX4hbWGgdVgVKTQJZDu4wgB?= =?iso-8859-1?Q?MKIx6lvIJNesZFKM55Fbi1QeDfwXU2vte0jQ6mh/ROy6heHalFHQCqvtQC?= =?iso-8859-1?Q?NAxbKUi2RxPxMMIfxDTkKVkGFw4FHatGl1hzEtrA5UiojQAjm3CURUBayg?= =?iso-8859-1?Q?p4Y0SsYa9NfF8IN2XI43laegtL3CVGWDP2b8Dx9jd201U9Vb7SaCS5b7Jg?= =?iso-8859-1?Q?pkuZD6V+BQgXJMMBEUPXXr63cJFhI4xYaNTXyFkMwkTQ2PqqM8V9jGC07K?= =?iso-8859-1?Q?dI5OY8pUUvzfJTSL4YbmFVpCdDgmjdV7O8GyOl133xKT24UVKmVTDdHoqw?= =?iso-8859-1?Q?1Eb0bkwZzi4WB3RPN/dux8uBYxWnEMCE41MqoZ2+BcWz7gpBwzUNnKJ7QO?= =?iso-8859-1?Q?BaJuCx/UwkZcDm+iWPcVXMT3bOLdr5TTuj6+ApngVBVHaCSk6+6nr+Rkg0?= =?iso-8859-1?Q?q4/6pauudYBg6IYt84k7hMGto4lYycl02JmLqjsI7Pq1ZgAhHOZQQHGYPJ?= =?iso-8859-1?Q?fzX/BYMpkaKzz6M7o8VD3n0ZrC6CJRkyzoyie5hvDXwug9LWk7d4V8gHbv?= =?iso-8859-1?Q?xZsw+WrcnpPA2jF8Do4sCGXanvbSoeuhwUN986oufhGeZNlJJHnvzTnzyp?= =?iso-8859-1?Q?vLh88bOyf+BwKpFNLDGFN5Vy8ujBzln8tjmebxJb5vqJ0JyvfSPFfv8oRs?= =?iso-8859-1?Q?7u8P7DuEht1GTSjYKhmMHiTD1OF67s1oaQmViocwCS1KjWtM1ydZvb8fmU?= =?iso-8859-1?Q?CncNN6cnPOHjU9euVnRa0K7DbLxTngHBAGFtRoAhq7YbyMta7G8MMViQDZ?= =?iso-8859-1?Q?CznPKcd7B8yxaYLH6mGj1lcF4GKthYUtMAdIaLX2xRxuyp27C+zAb4lwdg?= =?iso-8859-1?Q?95H0ypMir2nYcUYlwbiBmRxKejikSCmGcGJmeys5uKmXXX/qVhlyOHddju?= =?iso-8859-1?Q?7kqvKM+ja4t9HrFg76KgtbqVqizGxPSX0boa0wZHLGatb4deQQKVwsOhA4?= =?iso-8859-1?Q?g7WgVdj6GjCaxtqu7N5/4KNFFvE2AXKz0UwbrsTGY+qCGXm6s0ZWfQ9wP7?= =?iso-8859-1?Q?cgGvHKnfGnLhyrfc+JtbssAr97drc0zWvLm03nJhXFtCrVBVSYPpOspy3Y?= =?iso-8859-1?Q?jS7v1iVZrS7SiNWugDxomtS6yQ2NI4XFdhURNA5cdEu8lLlDqVQDpbzWWo?= =?iso-8859-1?Q?Wd4tllIM+h8YhZRUneJlWC0LnuWfgvsgfzNEBxkgW8mCOSjkstKbykNXgU?= =?iso-8859-1?Q?EWDamH/lnGB9kedblTDX3ONfLXO3NHrjGRoChJ47De1fuFsWwJg8u2sHBs?= =?iso-8859-1?Q?kqc7WUAXblFlCyqGmRdC/9zIeK5zP4Dex2/6y8OHi+dViQVNJu7T9jLYIi?= =?iso-8859-1?Q?wSc+w589A+12xFHD7+WucujGQQ434+yP8uuGO85xRIka0Gl1TtyUnfFWKU?= =?iso-8859-1?Q?3T2HhC5H1nAZwwhcUW6AHRvXMq8xynFj+0rfsVeja0KebI2HjSIbw1wQ?= =?iso-8859-1?Q?=3D=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: aaf61761-28bb-4a91-73dc-08dbe1ec6e57 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:18.0617 (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: ajst6DjVWkcKMj/7LgAyeF3Opcd0rawNRTa+1Y7ThkfTOxaZMtiUkNO2Di9zSX7UJp967XcK76iwk+Mmncz3Jw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: ziJpkV0cqFYKprtbIa06v7z8F_fOUAqd X-Proofpoint-GUID: ziJpkV0cqFYKprtbIa06v7z8F_fOUAqd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=906 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621039240100005 Content-Type: text/plain; charset="utf-8" We implement the only one ID register that is required by the architecture, also this is the one that Linux actually checks. Based on Linux commit 54f59d2b3a0a3d by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-mmio-v3.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index 707a38c727..ccdf3b9456 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -152,6 +152,19 @@ static unsigned long vgic_mmio_read_v3r_iidr(struct vc= pu *vcpu, paddr_t addr, (IMPLEMENTER_ARM << 0); } =20 +static unsigned long vgic_mmio_read_v3_idregs(struct vcpu *vcpu, paddr_t a= ddr, + unsigned int len) +{ + switch ( addr & 0xfff ) + { + case GICD_ICPIDR2: + /* report a GICv3 compliant implementation */ + return 0x3b; + } + + return 0; +} + static const struct vgic_register_region vgic_v3_dist_registers[] =3D { REGISTER_DESC_WITH_LENGTH(GICD_CTLR, vgic_mmio_read_v3_misc, vgic_mmio_write_v3_misc, @@ -196,7 +209,7 @@ static const struct vgic_register_region vgic_v3_dist_r= egisters[] =3D { vgic_mmio_read_raz, vgic_mmio_write_wi, 64, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICD_IDREGS, - vgic_mmio_read_raz, vgic_mmio_write_wi, 48, + vgic_mmio_read_v3_idregs, vgic_mmio_write_wi, 48, VGIC_ACCESS_32bit), }; =20 @@ -233,7 +246,7 @@ static const struct vgic_register_region vgic_v3_rd_reg= isters[] =3D { vgic_mmio_read_raz, vgic_mmio_write_wi, 4, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_IDREGS, - vgic_mmio_read_raz, vgic_mmio_write_wi, 48, + vgic_mmio_read_v3_idregs, vgic_mmio_write_wi, 48, VGIC_ACCESS_32bit), /* SGI_base registers */ REGISTER_DESC_WITH_LENGTH(SZ_64K + GICR_IGROUPR0, --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621048; cv=pass; d=zohomail.com; s=zohoarc; b=GhVcgUn4HMPucxJkvFRb7NcxbkAbCXxSB0ei+lgV4JuYZuY/M0351NJOC3LWwXrvxDpiy6RJT2J0Qjs+EHvgdWC5Zfqfvx4beq2k/JYZvI1upcKQ9aO6TXJSuLznqnTHem8LbXQR7AcTVXVbWcinqiOrsDn3QDKNt5H/GzXV5B8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621048; 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=LH4NgNUrJb7AxU4A2c+rBJ2vFrRhnJveRhbmQXTv6fw=; b=OC2ohDZJSTrCaEbDVYoJoF0Xz/XCaOj6gDiKzqi8iINcYPXtE5V2VHYpESTd4FvJJHSXRftLzr6IBcCxAnO9XvJ1IVpRjQ29xgu/IVPWSuEOTIG1tpT2lBOsIMBeUfp6QTuT2juUwqTHUXqGjiVO6KCkXlhEgihc1d2+buNJqJA= 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 1699621048153158.57137024026997; Fri, 10 Nov 2023 04:57:28 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630312.983175 (Exim 4.92) (envelope-from ) id 1r1R4D-0006Qf-Ee; Fri, 10 Nov 2023 12:56:57 +0000 Received: by outflank-mailman (output) from mailman id 630312.983175; Fri, 10 Nov 2023 12:56: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 1r1R4B-0006Kl-Uy; Fri, 10 Nov 2023 12:56:55 +0000 Received: by outflank-mailman (input) for mailman id 630312; Fri, 10 Nov 2023 12:56: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 1r1R41-0001y1-Ci for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:45 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 968078c6-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:40 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvb025691; Fri, 10 Nov 2023 12:56:26 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:18 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:18 +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: 968078c6-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hvvFHBt08JO68HN7bS3Hof2SYwY/O00FDSgU5K8GfXIaTUWOsRaGG9Ev5K7JCE1tSscWL52tsNaFS+aPlfA7VHcMv5gcaPKv5x5bW0gHg4F0sFZRubApRVQxo6AFNDswTK7movwwZ+XOLxX82rB3inUDroMUZ9Ccz04rk1Y2jZKtpcTPL1emBRvRSqSyXPpBHPRd+D1GkJKGwqmvMviVnle/2/H9nVoF4mQQ9tSvOz8VxTYwAu48PrBzYrdXs610vBG3QIfiRJBZDIBu0y6Y2+Bg+V9TEvO0wQFfqvE4GgaGxhAl3VAXKCuv7Gj7MBCZ1MDvo+NgUVMunxxQANI4jw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LH4NgNUrJb7AxU4A2c+rBJ2vFrRhnJveRhbmQXTv6fw=; b=SxazRw60CKtbVwqbewk/IkWTyBZGNghINtv3xghoJXZRbXWsziXgPATZdbNhCz3X3AVpx7VYme4BvmkTk15Zvobw1v/4PiiLgAwNW6lsFu8nxd3lBiwsetlevC8DzlYRUn6L2d3P23kLCIl2q8C0+dSYk/IxOaXYHOhKAKdRm+NmEfyRcquKexFI9P5Xap4DSETS2A2BSuTn4qU7qjis3jE9kEgzsP+rcdFAWTA9Mqa4jd7mm2Zkvo2aBDTPRyFizWc/Rkf9aMO34fTCLEA6oczEWnaTDweioMeXqflzUoJuyobi2t2VtmTWsZfRwZTF6decyG2ecxDYGlzLDxAv8A== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LH4NgNUrJb7AxU4A2c+rBJ2vFrRhnJveRhbmQXTv6fw=; b=UutzairtowihEfQvkt8uXL404ZOdD375UtaCJr4q364m7Dl3c8s8NrQuLL2zuB7dvdugssSdpJX93CFktt7tADZR1SixAORNjfe9MaiCSS04kjqTNbnSW9p+RPuRONSH0qzuhFJx0OLQ3YV8ZH4fZCa6L2vFzzgbl3Td0oyWtOl9zvaUZTrcS3wMXz6tehUigIpDBKdTB5AblOHmw4id6uPdJUvoFf/dc5eIgw9EF2Q8rE0wwtzqrJBOL+LMLimK4/2PhfW2aaFnMgvhJflE14TQX71MCRU+9L1eajXHcnzDTi04FWKa0Rr5XcXRsbH7eI3oVWyrJXDSPTyAU5CNZw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 07/25] arm: new VGIC: Add GICv3 IROUTER register handlers Thread-Topic: [XEN PATCH v2 07/25] arm: new VGIC: Add GICv3 IROUTER register handlers Thread-Index: AQHaE9VLou6qA6symUe+SqqE2YPjzQ== Date: Fri, 10 Nov 2023 12:56:18 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: abf56879-3d2a-46e2-acac-08dbe1ec6e90 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +d9qAtnqYZ7C/VzIhfI+yfOAOHZlElwqyqTMxs7+OCoFk8j5BTx9DyCX1WzY3B5wIrms8WQq+iynL0LM7iweDfNIoEClFgvQOzu507Vr1pU0waBuqpHf55Gx/KJPynee/0WMGplG2iwGknlk0GnCg7ee3EONug36z2i3eLOWCWzYSTAmfwqss83HpEwH/+E9DU/GsFZMzrJ94qta8G/Iz9mCSaL5Am6d2mBZpm4lNl0mhdgAVKltfGgYG2Sy6GhN5sh1MBV3a9yJdAM9nbeAmFqfrVS8Dm6YA9zj0D4AAggZVfi3JgIb3+mcbj5IUg9Ohk0CuT9gnKj4364POosv6gbPILiLG/3iPIZMvu+eWSXrV4+peSYK32wxbauAJmVXbm4PnoU6BOVGlq5J44zFI32dJwXsHY9nP522nRtreYRnDEtnmhGu6U1VhLQOzeKvCYA6uspQubju4Z7K6cA4yrXe9vszGj9CMSGwn1dVQrAa+C7sHIalKA32ixLfxeXtZXzC0CpQ+qgrN1hurlgHXGNgOI6aOGqxugOQI1piWfE8VmUAbghV3d9HEoq/EE4MNq6XTWbmJ9x4Gcu5DVOmLcJfOr+BtBU1DcwqhAH76e54ozcDUCxr10dVEaUcFW4y 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?YinFnRPE/5XM8TMG+RC7xubF8VmO30iOrbRWT/Xutl/O6q52oRIGUbmDAN?= =?iso-8859-1?Q?opwMcC/sKIfPOwTKsbywsf5ZsHhaTy3eTks3bzGpBZxDLLbCDfyZnZeHdp?= =?iso-8859-1?Q?L71zL5bFAC+Zw5Hr9qd+MQNR/3JsL5VaLPdZcddQisp2wuQ9rZWof3rFTI?= =?iso-8859-1?Q?m0DoNHonxKw+uGNqTb8rgHSyXknJB8Q2wzppbwfcQ3TMzLabLvuadXHeLt?= =?iso-8859-1?Q?SUvrV5oLebwBqU+Q2iLL5cy0zE3YrVqMtdOQCxXjD+09H7fPjWSx7lGS/5?= =?iso-8859-1?Q?KaErOZFnkKR8M+K4J2W0r+mzcx47iB3KVzBrH5O5szB34qjkXEJF0I3qxu?= =?iso-8859-1?Q?BkwCFSNqkApMplYWeqSrKm0NyfCP76BeS9DVfloTg8BZgfXsn0570o1F2U?= =?iso-8859-1?Q?3/dFxRf77NAF3Xv2pvaw+I4oj+JUOJgAPkXwt4MppE6XUVdq9TRZdGaPDB?= =?iso-8859-1?Q?0Li3gjkiGOwq7QSWKbi7GpH4d1pooRmTW7CYJ8V39iCGZQjDIfD9QrtXHo?= =?iso-8859-1?Q?1CZ8SSNW3brlM023AHOuDt3ndbpMzN5mAqOYDEvGuuWCO4TD2LFM8zs9ex?= =?iso-8859-1?Q?1IBmPTEYO9DRAGxrcPOLy2sk0/CG8dT+RU7IANHooPzwfNOAmm47w95dd8?= =?iso-8859-1?Q?f/Nr3bglI7lyL7hjCefqzHVk+SCXQdRJtT6AaD9rFat+KUL8fBvpVOyxJV?= =?iso-8859-1?Q?dejInEdCyBRMKzPfbMxNl1QZgFTK8+mC+RCEFtxVrMF4Qzn2ZMt0u4lSVB?= =?iso-8859-1?Q?M3Uo/inGZEYr8DfqqOPQNTRGse8vL0xnoxSSkNdt4wE+tQ0VvLok9Vw/Sz?= =?iso-8859-1?Q?gaom5kqkbTIL6411rgITdtV3e9SiMfjONDZRJZIfeygQdb0UYuuhvFkkrT?= =?iso-8859-1?Q?6WyWjoe/8l1b0vXN0hgi12gW4PV1uutm7VxKH8JXLaAK243/G7ifxFEr87?= =?iso-8859-1?Q?aq3LRgYbSzeJ09zB47Qqy8CdISJNBFYmHOwBKDJdrQY4aI3yE4XYx2RCS7?= =?iso-8859-1?Q?qTmH5AptjFtnlYDVIhtMr0xzkLgLxFPy/AytPtmNGiT/yPQITZkXuV2yM8?= =?iso-8859-1?Q?9rOE29x8zVRUjWulW7Mvfpc06bzC+LdNRS2rNmY2oROEA0C7JNR0GTFLDz?= =?iso-8859-1?Q?uy8xk9/rKIeEnItibuO4VowdNOmvUVxuFNUpOg5NgyKGHcXwTzg1GYMWqa?= =?iso-8859-1?Q?OhazMJqwimulUVzEoaAeR5S2JnVrBgjJd5sQL99hjXCopoNxnvkH5tzvG2?= =?iso-8859-1?Q?yN43AvSKmQil6yR79f5OCDoYunJUehY9Eym9t/7DMg3uTety1fEs5ZYBAy?= =?iso-8859-1?Q?mpEPMSgaKgIPhbN5sGSAZITnAQcDO7/U3HkJPZ3OaRs2IIndFY0pM5cSZI?= =?iso-8859-1?Q?EwsTjxrPNA2ly5U2UV8GMGwv0G9D32ixUG7HOQaUjigr0aQGZ8aDg1fImF?= =?iso-8859-1?Q?RdJz3Ei0ptbgiJmKAMX+p8nJMR4/dVSCPRnf0P7YJed7GXunYOX+MCZghM?= =?iso-8859-1?Q?LmsElnF/Ls/pvOCwXQ56FwaLX1ugr13L4UhfFI/4ZJiEGa5muda2cRkEOJ?= =?iso-8859-1?Q?Ps00X93KkEaXAq5EOwtyuUmhw2dUQKe9yUKX4S96SrvAkBEbhsPP91juOT?= =?iso-8859-1?Q?2Lrr8mX2vK/+zuBSLDDZ5PklqqbB8TWEVMeyTsPwaUyGh2gjlAdxtLTQ?= =?iso-8859-1?Q?=3D=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: abf56879-3d2a-46e2-acac-08dbe1ec6e90 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:18.4267 (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: TXMV9z3B58K+PF7vXxNKopjHfIrpNjs5jTuXvxcHwOqiKXNm7v8BYNEcxV02qoUoRsfVk5TLq5KuOvBfxnb5/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: o6iGCl1vHwd9BVrGE0bIHk8fV3Vwwvtk X-Proofpoint-GUID: o6iGCl1vHwd9BVrGE0bIHk8fV3Vwwvtk X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=999 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621049233100001 Content-Type: text/plain; charset="utf-8" Since GICv3 supports much more than the 8 CPUs the GICv2 ITARGETSR register can handle, the new IROUTER register covers the whole range of possible target (V)CPUs by using the same MPIDR that the cores report themselves. In addition to translating this MPIDR into a vcpu pointer we store the originally written value as well. The architecture allows to write any values into the register, which must be read back as written. Since we don't support affinity level 3, we don't need to take care about the upper word of this 64-bit register, which simplifies the handling a bit. Based on Linux commit 78a714aba03039 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-mmio-v3.c | 59 +++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index ccdf3b9456..3d892a68cb 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -22,6 +22,19 @@ #include "vgic.h" #include "vgic-mmio.h" =20 +static struct vcpu *mpidr_to_vcpu(struct domain *d, unsigned long mpidr) +{ + struct vcpu *vcpu; + + mpidr &=3D MPIDR_HWID_MASK; + for_each_vcpu(d, vcpu) + { + if ( mpidr =3D=3D vcpuid_to_vaffinity(vcpu->vcpu_id) ) + return vcpu; + } + return NULL; +} + /* extract @num bytes at @offset bytes offset in data */ unsigned long extract_bytes(uint64_t data, unsigned int offset, unsigned int num) @@ -98,6 +111,50 @@ static void vgic_mmio_write_v3_misc(struct vcpu *vcpu, = paddr_t addr, } } =20 +static unsigned long vgic_mmio_read_irouter(struct vcpu *vcpu, paddr_t add= r, + unsigned int len) +{ + int intid =3D VGIC_ADDR_TO_INTID(addr, 64); + struct vgic_irq *irq =3D vgic_get_irq(vcpu->domain, NULL, intid); + unsigned long ret =3D 0; + + if ( !irq ) + return 0; + + /* The upper word is RAZ for us. */ + if ( !(addr & 4) ) + ret =3D extract_bytes(irq->mpidr, addr & 7, len); + + vgic_put_irq(vcpu->domain, irq); + return ret; +} + +static void vgic_mmio_write_irouter(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + int intid =3D VGIC_ADDR_TO_INTID(addr, 64); + struct vgic_irq *irq; + unsigned long flags; + + /* The upper word is WI for us since we don't implement Aff3. */ + if ( addr & 4 ) + return; + + irq =3D vgic_get_irq(vcpu->domain, NULL, intid); + + if ( !irq ) + return; + + spin_lock_irqsave(&irq->irq_lock, flags); + + /* We only care about and preserve Aff0, Aff1 and Aff2. */ + irq->mpidr =3D val & GENMASK(23, 0); + irq->target_vcpu =3D mpidr_to_vcpu(vcpu->domain, irq->mpidr); + + spin_unlock_irqrestore(&irq->irq_lock, flags); + vgic_put_irq(vcpu->domain, irq); +} + static bool vgic_mmio_vcpu_rdist_is_last(struct vcpu *vcpu) { struct vgic_dist *vgic =3D &vcpu->domain->arch.vgic; @@ -206,7 +263,7 @@ static const struct vgic_register_region vgic_v3_dist_r= egisters[] =3D { vgic_mmio_read_raz, vgic_mmio_write_wi, 1, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_IROUTER, - vgic_mmio_read_raz, vgic_mmio_write_wi, 64, + vgic_mmio_read_irouter, vgic_mmio_write_irouter, 64, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICD_IDREGS, vgic_mmio_read_v3_idregs, vgic_mmio_write_wi, 48, --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621044; cv=pass; d=zohomail.com; s=zohoarc; b=XM2Neynz21DnHiJEWSegecVWyGeUf96F3nHdTIvoqHxLxcwdrn0ePXcga+IZQ9ptn74yldIwcOKlF1yD7s4N18mYjHnW17OLm6yfTyTOwH3WnRKB6SapM/osp2qHS7tIrgcgmj0HlD0aNZeceiEZ44zmWig24Ts+++D3kWjAEcg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621044; 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=CsuUkMvf5gI06/kh6Aitv9g+GlzsqEZAOIWBAFgXeMY=; b=ZqTEj9D3O5dXAAXXv8yte1i4eo8dRQAvLiTzk7esmjuO2rmBQgcEQLQ56Pgy4xneA6RELq/KL/tg4lT5VzNbUnAaw2pteaIPrgWFHYqM7RAHgUR2BNGH7H6i2I1xtFIuXT9jwBkY/83xLRfu78NSa+dGVE/7CxvETHrVtwWBKHc= 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 1699621044828906.969749512121; Fri, 10 Nov 2023 04:57:24 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630311.983161 (Exim 4.92) (envelope-from ) id 1r1R4A-0005zY-Ow; Fri, 10 Nov 2023 12:56:54 +0000 Received: by outflank-mailman (output) from mailman id 630311.983161; Fri, 10 Nov 2023 12:56: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 1r1R49-0005uQ-TB; Fri, 10 Nov 2023 12:56:53 +0000 Received: by outflank-mailman (input) for mailman id 630311; Fri, 10 Nov 2023 12:56:45 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R41-0001y0-6Z for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:45 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 969e15bc-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:40 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeef019156; Fri, 10 Nov 2023 12:56:26 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:20 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:20 +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: 969e15bc-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RDoMlsltv1Id5HvBr6cJHeq4tVbHIE0zBAXvg5Qfy/oidW93shzwlOyqDmik3oRqdi29W16GlJngUIeWkg2ya62JDWAB94QN2UDKWmZMyPRDJ2mCFqmvF6HU9N1v6mgPUgQ41aP4cFenJDvaE4/j+FCFaAlOPrBi1K7YWNaToHDZKmhOFEXbxj/D6Ba9MlM56xDZf/deDqgmsoPaU2iDTDHVXGeFE/aPVknurNJUuV0N1W614ONSOI9T7yvZI8Thnp1yQkYgFmPON+TkV45KyL10PK4ZzqKLib/Ycjaepy6KHYAxW0IuA2xYHahjxkPsK+O3kHzNbEkf3LwcMFqJ3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CsuUkMvf5gI06/kh6Aitv9g+GlzsqEZAOIWBAFgXeMY=; b=bZxCZQy/qzCEKWnbvx2bGBXUxp6XfIMBiVn5vKUByHC7Le5zVjGXewyAlPIKAsVdmgsJywZsZRUj6NCS0Ohhf8sdpROWEZjN+G3yybbuDo617Md0NVmLbw42XWpOBuzW822XutQTEpzPqL2TiIOzd98WrAxU2JTRuGjhNTf+Qe3jQN3V2rScBgSoDk2Y/MOxfEdWadgeznd0owZFkkDdcchCi7o1ZY3E8Gs22PwiI+4T7G8FfbG2fl/yit8mi3NYf7wGNQH1Matuck8INIKc/QsJvq1qUw5sBg2xsoEOKudlaOIODqp6ZLemeVeckuY9cOcM0PO0U1A+SPCeEJXoGA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CsuUkMvf5gI06/kh6Aitv9g+GlzsqEZAOIWBAFgXeMY=; b=jaHFayV9G2AsrzkbQk3JXidD97APvOKlPa8GrBZB7FXbCeYk3+acbv3FvdmybI6VKl2Tosh+Pdd+R3O6ySSET+F+E+YA9hk843l6QN0S8ymzU31uamD4ZBM9xMZro/9eB2BH45EoAfdZk5e6VOD0cKuF3O8LftwQwtXRGkdsAiDqtOombBPceiIW1xIDCoI5BXONr/yXoBEM/vr3jWUM3MpxgXz/vDbVGE7HTO/RliOff5GWmMZq0zIfgEQjd6IIviv6o0agBFoSeMBkN/pUqDXnz4H+cROeEqk4+Nl02Let88FW2WRZEFBlErJ4hh94R6q06ENPzQn8uhZfw8Z5vA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 08/25] arm: new VGIC: Add GICv3 SGI system register trap handler Thread-Topic: [XEN PATCH v2 08/25] arm: new VGIC: Add GICv3 SGI system register trap handler Thread-Index: AQHaE9VMyTFmCIij9kWiuYpeUQUfzA== Date: Fri, 10 Nov 2023 12:56:18 +0000 Message-ID: <8819e1bd76ea4ef2c7057e3d91badd476921c1b0.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: b67e61ff-d329-415f-a27d-08dbe1ec6f88 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: eR9KgbFXUe54FBb92xOc4XYQb7oIXU7MCcObfCZ7hj72K3GXGa74SarO5oagGC7ovLEq0dVSCpPJDcgNsDIkRxZ0m2Zh29c5rV7VlVkr7jQODXwrWzDjX4z8srgHao2cUg28Ql+XEgn8ZogrbfaEEEudpaiezFA/AfGPWu4z7NUUy19mqY4pP5W4RS0oq6x6P3VMIZjNmdfg7eGPnDmv2qEG1DgvJxxGOm0prLZ2UF3M3NAngxjYFSp4CfG+/w6z8iBihQB+e48v++x/NakFEqTNIeV+GOdWX66BHQu+rA2sqnr6QONkDFBsoJOVKJo6lt5PFBwLk3C+fnmXlNNPiFOzJDR/dIWS7yqqkkGm4MKulVkSENPv+13q1z4qJKq4NqSc/89hVYkiMvRp2Dfega3z1kGuzgXTtfSvxbfMsa/SsvQClZfPsNyTTgXlugziHOdnvRvdu5gEiuTkNhSOUq3GUtfH3dudOqUuB9R/ih2ecdG8HjkhYqRlWBHJ+GBrrHeUY9YGiXLIkhUuhBuM4006Y499owGCi4todKPPgX9ibrn6ZrzRoHTITVOFWHLh2RBwyZYnQmqar+hE1eaE2KfoWs1uQ1p3o4WYplusZmT21sSqMrfnSiD+eTXg+9m6IvbzjDYlYgV5U94SH8j5CpjaP+8hncf9Ld/tKO31TeM= 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(230173577357003)(230273577357003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(66899024)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?3+GSE4qJeIbMgHkYbKCL29Zb67ceo+3nwWp0oB+nfOp7I9zuCYarUHst9K?= =?iso-8859-1?Q?Kj/xjOZII//n/6cuXl3J4qzjnv7CUxjFHoFIC0XImDos3GkPSUm+cN2Qp1?= =?iso-8859-1?Q?xPL41kYkogvN4SuBekfZx7JpFghRDkHGy3ZozH00DYZLRo0SUvTc5M7bym?= =?iso-8859-1?Q?awIFif9S5or/KdUnaEO3a50u+qbzj+C0ejW0PEX8dispI2B7dns7DKQH+f?= =?iso-8859-1?Q?hy9BwQh/pl5UskQrrZdnFkCjBDwjE0SHlIuLL7KcPZpTGcyKJrMy8wiMqi?= =?iso-8859-1?Q?Dd+VnoYRKd7TsUubEuxNZea45FPaKjpMc86aS03gYqd8ZxjLcyei46mA4V?= =?iso-8859-1?Q?2L9B053R27HFaOFY2Pidp/mCnYP9flcyZhKmwcT19vs2Q1shwJeRL9Nosi?= =?iso-8859-1?Q?a2XJFHn0b/2SP7twxFyuk3/I9JqzZqXKYhEb85soKEGM0QnfebBRu972fi?= =?iso-8859-1?Q?Y0iVSvxpKCgHm4COxcdu04AOB40hjad9TrbYbimtkRexSiQ+SSskLga8n8?= =?iso-8859-1?Q?vXyeS2TlsG+lOMDSp0yfeYi9u1KPaHnlrSQGNGaMtRqjDzmJBjUkwftpyF?= =?iso-8859-1?Q?PHzsNFPl5+gZuGgPhf/bOQHwElS04Ox7ak1YZjS+vdXL7KOohfTvH7NZ0y?= =?iso-8859-1?Q?7vVSe2D7bn1bCoQA15tm+Nw8KqJatq9ud3tUMfdqNQSvOcDZypzori1QdP?= =?iso-8859-1?Q?/X7osdDZhtl/2ry6WMZqv1a9g4gNnyIXEFjtAY7Tg9qV4z4BV7j5foHxUm?= =?iso-8859-1?Q?pI2fLF9EgSretKJqCxYIJWhhkp1Gu5VdIeFvVQyx6AS8OtDZjFcUSivH+C?= =?iso-8859-1?Q?jewUcagAZPblGAa63h8Fx5kVkj5/0QSkMu85r8fwpYvk3QfpSoPhwJ4qYv?= =?iso-8859-1?Q?cEXIj00byGyoy6SiyK0YvYgyBH9HsEOL773clw9PrU/1ykxVQDeEdGxLBw?= =?iso-8859-1?Q?khBHi6r7RonD3aRxchj6+cfQa/yqnNdD/eM5u+N/0HrT3RxDI/I6TLQtKo?= =?iso-8859-1?Q?vHQ+HcjFiHr5lIH4npxEvkrvzxbLqrqhuLqWc77LZY09jpiYizM/D9Peep?= =?iso-8859-1?Q?/JWhn+dDOXmRWYrN8SQoELe4QHj/EF7UEL3kUB5MP9IZHq7f5XPDgrpI5Z?= =?iso-8859-1?Q?XplOnYUBVbOVI4zLYv69mEF64u7Kd1v7ZQPXW+9FivuHnyHU0mVPgAtOB4?= =?iso-8859-1?Q?nGo+jA/t90d7kQJRS661ku5hGFiv/VkaU9MJiqv4u5XW0B2j448DdxwMay?= =?iso-8859-1?Q?g9j1PtVBZBvhbD/9kldIStoM7Uiv6P60qex4DEDvYtGAS/J7xXuLel4G2y?= =?iso-8859-1?Q?kXObSRA+T1mB8dkQROObxqx+bDuXN5N2v6UM7dWs7i46Tv9fZN6mQrngK4?= =?iso-8859-1?Q?O8hjWUMgOlo+cLPEnjp+fALBrPwAF0HrTT5WpLIOrYkDD+YtF+Up8e2vPl?= =?iso-8859-1?Q?Kbg9c47m03gcaLDiPDnBBFbnz0TZ0A5dO1D67HKmiSV0bjvLlImY/fudmD?= =?iso-8859-1?Q?SpCjben6DfB6VIIZUhTAH2a2IUH9pgP1S/FY0oxZvfZIA3aRjIOASmWUy+?= =?iso-8859-1?Q?0wx+nsedNmI/WT6mcXl4DqVCtVUtIee59r1DYNAbcoe6QrJbfmY1fCYM+G?= =?iso-8859-1?Q?AWCcbWxEwvyvKBrPE9rLYsHKyr+eE9IGSeK1TuodFNHjN5LMVG3hcPvQ?= =?iso-8859-1?Q?=3D=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: b67e61ff-d329-415f-a27d-08dbe1ec6f88 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:18.7631 (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: BKkbniO+WhjZynZ9VqKW7c/DklKNxlvUHA0vy7Qpdc3S8Sf3rsTtoZG0cyjaeW6Jy/jsANMwdYwCx9rn434Ygw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: Psa6Il3WoqtBmCIJYySScdTGoJoGFJQJ X-Proofpoint-ORIG-GUID: Psa6Il3WoqtBmCIJYySScdTGoJoGFJQJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=999 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621045268100001 Content-Type: text/plain; charset="utf-8" In contrast to GICv2 SGIs in a GICv3 implementation are not triggered by a MMIO write, but with a system register write. Xen knows about that register already, we just need to implement the handler and wire it up to the core Xen/ARM code. Base on Linux commit 621ecd8d2123bc13 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v3_defs.h | 2 +- xen/arch/arm/vgic/vgic-mmio-v3.c | 147 +++++++++++++++++++++++++ xen/arch/arm/vgic/vgic.c | 10 +- xen/arch/arm/vgic/vgic.h | 5 + 4 files changed, 160 insertions(+), 4 deletions(-) diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index e0d536e887..1e81687818 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -204,7 +204,7 @@ #define ICH_SGI_IRQ_SHIFT 24 #define ICH_SGI_IRQ_MASK 0xf #define ICH_SGI_TARGETLIST_MASK 0xffff -#define ICH_SGI_AFFx_MASK 0xff +#define ICH_SGI_AFFx_MASK 0xffULL #define ICH_SGI_AFFINITY_LEVEL(x) (16 * (x)) =20 struct rdist_region { diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index 3d892a68cb..19ebf723ee 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -42,6 +42,153 @@ unsigned long extract_bytes(uint64_t data, unsigned int= offset, return (data >> (offset * 8)) & GENMASK_ULL(num * 8 - 1, 0); } =20 +static int match_mpidr(u64 sgi_aff, u16 sgi_cpu_mask, struct vcpu *vcpu) +{ + unsigned long affinity; + int level0; + + /* + * Split the current VCPU's MPIDR into affinity level 0 and the + * rest as this is what we have to compare against. + */ + affinity =3D vcpuid_to_vaffinity(vcpu->vcpu_id); + level0 =3D MPIDR_AFFINITY_LEVEL(affinity, 0); + affinity &=3D ~MPIDR_LEVEL_MASK; + + /* bail out if the upper three levels don't match */ + if ( sgi_aff !=3D affinity ) + return -1; + + /* Is this VCPU's bit set in the mask ? */ + if ( !(sgi_cpu_mask & BIT(level0, ULL)) ) + return -1; + + return level0; +} + +#define SGI_AFFINITY_LEVEL(reg, level) = \ + ((((reg) & (ICH_SGI_AFFx_MASK << ICH_SGI_AFFINITY_LEVEL(level))) >> = \ + ICH_SGI_AFFINITY_LEVEL(level)) = \ + << MPIDR_LEVEL_SHIFT(level)) + +static bool vgic_v3_emulate_sgi1r(struct cpu_user_regs *regs, uint64_t *r, + bool read) +{ + struct domain *d =3D current->domain; + struct vcpu *vcpu =3D current; + struct vcpu *c_vcpu; + u16 target_cpus; + u64 mpidr; + int sgi; + int vcpu_id =3D vcpu->vcpu_id; + bool broadcast; + unsigned long flags; + + if ( read ) + { + gdprintk(XENLOG_WARNING, "Reading SGI1R_EL1 - WO register\n"); + return false; + } + + sgi =3D (*r >> ICH_SGI_IRQ_SHIFT) & ICH_SGI_IRQ_MASK; + broadcast =3D *r & BIT(ICH_SGI_IRQMODE_SHIFT, ULL); + target_cpus =3D (*r & ICH_SGI_TARGETLIST_MASK); + + mpidr =3D SGI_AFFINITY_LEVEL(*r, 3); + mpidr |=3D SGI_AFFINITY_LEVEL(*r, 2); + mpidr |=3D SGI_AFFINITY_LEVEL(*r, 1); + + /* + * We iterate over all VCPUs to find the MPIDRs matching the request. + * If we have handled one CPU, we clear its bit to detect early + * if we are already finished. This avoids iterating through all + * VCPUs when most of the times we just signal a single VCPU. + */ + for_each_vcpu(d, c_vcpu) + { + struct vgic_irq *irq; + + /* Exit early if we have dealt with all requested CPUs */ + if ( !broadcast && target_cpus =3D=3D 0 ) + break; + + /* Don't signal the calling VCPU */ + if ( broadcast && c_vcpu->vcpu_id =3D=3D vcpu_id ) + continue; + + if ( !broadcast ) + { + int level0; + + level0 =3D match_mpidr(mpidr, target_cpus, c_vcpu); + if ( level0 =3D=3D -1 ) + continue; + + /* remove this matching VCPU from the mask */ + target_cpus &=3D ~BIT(level0, UL); + } + + irq =3D vgic_get_irq(vcpu->domain, c_vcpu, sgi); + + spin_lock_irqsave(&irq->irq_lock, flags); + + if ( !irq->hw ) + { + irq->pending_latch =3D true; + vgic_queue_irq_unlock(vcpu->domain, irq, flags); + } + else + { + printk(XENLOG_ERR "HW SGIs are not implemented\n"); + BUG(); + spin_unlock_irqrestore(&irq->irq_lock, flags); + } + + vgic_put_irq(vcpu->domain, irq); + } + + return true; +} + +static bool vgic_v3_emulate_sysreg(struct cpu_user_regs *regs, union hsr h= sr) +{ + struct hsr_sysreg sysreg =3D hsr.sysreg; + + ASSERT(hsr.ec =3D=3D HSR_EC_SYSREG); + + if ( sysreg.read ) + perfc_incr(vgic_sysreg_reads); + else + perfc_incr(vgic_sysreg_writes); + + switch ( hsr.bits & HSR_SYSREG_REGS_MASK ) + { + case HSR_SYSREG_ICC_SGI1R_EL1: + return vreg_emulate_sysreg(regs, hsr, vgic_v3_emulate_sgi1r); + + default: + return false; + } +} + +bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, union hsr hsr) +{ + switch ( hsr.ec ) + { +#ifdef CONFIG_ARM_64 + case HSR_EC_SYSREG: + return vgic_v3_emulate_sysreg(regs, hsr); +#endif + case HSR_EC_CP15_64: + printk(XENLOG_ERR + "vgic_v3_emulate_reg: HSR_EC_CP15_64 not implemented"); + BUG(); + break; + default: + return false; + } +} + /* * The Revision field in the IIDR have the following meanings: * diff --git a/xen/arch/arm/vgic/vgic.c b/xen/arch/arm/vgic/vgic.c index 97ca827fc4..946877bbac 100644 --- a/xen/arch/arm/vgic/vgic.c +++ b/xen/arch/arm/vgic/vgic.c @@ -865,9 +865,13 @@ struct irq_desc *vgic_get_hw_irq_desc(struct domain *d= , struct vcpu *v, =20 bool vgic_emulate(struct cpu_user_regs *regs, union hsr hsr) { - ASSERT(current->domain->arch.vgic.version =3D=3D GIC_V3); - - return false; + switch ( current->domain->arch.vgic.version ) + { + case GIC_V3: + return vgic_v3_emulate_reg(regs, hsr); + default: + return false; + } } =20 /* diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index b3bba7b5f3..0e0cf7b213 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -74,6 +74,7 @@ int vgic_register_dist_iodev(struct domain *d, gfn_t dist= _base_fn, #ifdef CONFIG_GICV3 void vgic_v3_fold_lr_state(struct vcpu *vcpu); void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); +bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, union hsr hsr); unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev); int vgic_v3_set_redist_base(struct domain *d, u32 index, u64 addr, u32 cou= nt); int vgic_register_redist_iodev(struct vcpu *vcpu); @@ -88,6 +89,10 @@ static inline unsigned int vgic_v3_init_dist_iodev(struc= t vgic_io_device *dev) { return 0; } +static inline bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, union h= sr hsr) +{ + return false; +} static inline int vgic_v3_set_redist_base(struct domain *d, u32 index, u64= addr, u32 count) { return 0; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621036; cv=pass; d=zohomail.com; s=zohoarc; b=ZqAb3uPQKylzjQ1K3RE9lZNFj3Y4Ourz2P7GjByNH7OHdChvj1pU9WIE9LjE35l8V9A6pIo3OUGcm5BYbSVAHm1HzrZ8pJD+NeCMUcxiKj8aVHPPQrb2lyK9a4/146l+qgkTizrqaHBJa0ksTOB+jO7/Mlenx/Gitzgc/d0EhBs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621036; 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=LBDVOyba/BI30WH6KKbB8Uk/B+zX3ZAsejH38vpaBkc=; b=adfF4+CxRig1tdYbPhMk8x455x0L1A+RHt0fAhstUcqM6WMbb0e0IqYFs7lSMpQuH3cgGC4AWDkrJjX0sDypV5HhJt4hsksQ9+71HVOYnLaA5lgH4as+1AT2ImXsuKnbtB3C6zT9uZUIyjcwDWitduA9EFhklhFxTsFq7qOr910= 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 1699621036477593.9353492544471; Fri, 10 Nov 2023 04:57:16 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630302.983080 (Exim 4.92) (envelope-from ) id 1r1R3z-0003Lo-NL; Fri, 10 Nov 2023 12:56:43 +0000 Received: by outflank-mailman (output) from mailman id 630302.983080; Fri, 10 Nov 2023 12:56: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 1r1R3z-0003IE-8p; Fri, 10 Nov 2023 12:56:43 +0000 Received: by outflank-mailman (input) for mailman id 630302; Fri, 10 Nov 2023 12:56:40 +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 1r1R3w-0001y1-Bj for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:40 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 94bb3bf0-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:37 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvc025691; Fri, 10 Nov 2023 12:56:27 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:20 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:20 +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: 94bb3bf0-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L5bVoaHtf9hbfKEfPq+WKJEeFvOK9PVEaZ731Bk8Q92uFWHuIezEtaPZc2JXmBaEt18pWYEkQo344KBoKRHNGDSSYklg3BOKCOe4iA3sqKLyXA5X77ycK43qFKUwkvctIoTvUbZVWF49nXpdrYvjM96xo9Rc2J+4PN3JsaTtGQi2iZINqPp1D885T/zPLdjDQU9QKC/peyQhq8cmtxX01wxbSSMmJlThXT06P4YDpU4AoKDS1vR03qnjrBdAXlXRJ/0ObMaZISjrbjaVJnp6q+R05oEDjWkNey6fveQAwGXH+DXGRRwYt7shoZTJYbE9HyGTbmMvN3Y1wXrJ7bk9hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LBDVOyba/BI30WH6KKbB8Uk/B+zX3ZAsejH38vpaBkc=; b=ZoaDWZ9GamKaLk2O5bkA8irxeorDFJcIVW13Uhi9gqFd5Od7pvWSZTQqpR+JBzu+apIQmHN9nuSjtuB/lodUfb6BxVVIKbeU7JB+IqXcRL775gI48zExEmhCTPypab+y3CtnHC4DwpIHJdj7FaUuChUcIiNJj8AKrErxuK7uUMAKoxKslSAHGQm76j2GTlST/4bUTSFjED1KF8BERahDqmYbGYcFyMHJKt3vyijWLtF0gbMvTN2XSDdHnpSi5vokOaz53F4p74ErulR9tCojAnfQX9u+901E8piqBIZE/UKJdXdHYso/mHO8EBfNSYRoZwP4OfU8vVst19Me5MX3FQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LBDVOyba/BI30WH6KKbB8Uk/B+zX3ZAsejH38vpaBkc=; b=qxkN6sMV1jhWw7E2lLql/Ynf8bmJ/jUjlImF/IaWOF1rNESiKqiY1G/fIPITWLm1wgwnl1G0bqdVFRRp18oLmYK73CFS4JcvklGDOISftUiZj7Y3RC3graXOg/dL9xmB5lUXmf7pMb5m0sFef1gNLRFzuGgCVHn2bLT8pkRNqb6aCyjXGWV8jJDTHavqQBIVuBnSl0pj8onVI5cR7/B5izrt+rqoGv0XOmgSTbD6bJVVqyfuZKyNmtnXZWkgGPeM3LUoijBbKxxveNYlkcrtCXbspBAgT01Q4C7g5W3FnMBLZTR1JzELfgAtOBW9EjswuIiCg5qh3c7w6yYgtBkOxA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 09/25] arm: new VGIC: vgic_init: implement map_resources Thread-Topic: [XEN PATCH v2 09/25] arm: new VGIC: vgic_init: implement map_resources Thread-Index: AQHaE9VMePQXqYRQtUG5KTRNHOZuvw== Date: Fri, 10 Nov 2023 12:56:19 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 2c58c5b2-7f8c-48cc-7889-08dbe1ec6fbf x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PkzxPl5B/QmsrBEsUDDqpZkFYvOvdWfIS8Xrfo9nD/dZMUO3UjNImN5SiGZlhpUyittFr0ZlwnU/GtqqrY9bUn/ntU9Ix6/3ZwQWlhPR5p9lXpEy/yTgf6ESdjW7KrFcFWZBKiUUmPH5XsaBTausPgDyqyV1WGZkRrM9jEtEftNgZH60uUsHw8YRFV1k2J/3rDN0RGdSLQiBQdDNnAAkmjxg8v4icaS2cGmJPAyi9LA+gXMX5gwArGYto/2d81nRPHtxytq6ZAPuVdAlPSok9mCybDt6v8a183J6rJJX3snHlNoFvS7zDFmgwq7/QWLI78URg6kaZa8B/rnlr3RfNL5tbqfmcNGui/ysnG4rWFQS+6lg1ViSbdvHbItUH3Lq8k1VIYOTVQo5gWfUx9fT9+AQK8rGRSryLnLp5/GkxiLaXJk5woy9UbnlaMTnepPjNjof7tpPZu/Cxx/ha13eAbIBU2PfQ68I8WUCJgsfF50L8lD5fBbGi2WqcEkhmJ87KdS0W5ttbs3g86NEoLaGQLbOkVBVsa7pyTimztHG0GfLm/x/q0Av9JFacOZybX8pNnK+Wiok84rrQfgumSraP6yYPe/Q9ipITU/QYL5reLg= 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?fJyGsfRLBczsfPEqRRa01ztgP+UAGIMwOTGEQf7Pv33x6Trhfg62bMDB9t?= =?iso-8859-1?Q?K6a14T4ohBzRngFwqc+TFOzW1zBcPwBsQQ+dfRYM9KE/dx1v6iMz6R0WXQ?= =?iso-8859-1?Q?9rCzp7Fbv8Mvxl66zTVrwmturERReYr/gWNc73Xz1vJ1Z7l6rQOxnfdziE?= =?iso-8859-1?Q?mSie03C3Gyth78IdhVWtF+3lQq2mO96kCLtOzMA9ZQX6VMIujhPt0nfGVf?= =?iso-8859-1?Q?kdBPnoGB0udy80aJxQwDOsCtulYxaafAtJvbZUP0Tbp6f1m0M4wms3eYGj?= =?iso-8859-1?Q?WtUJv1mLfQcxazNcGg4+m6RwigG82kh58cudJBgDDJLP4vt6vhMQDDcmnO?= =?iso-8859-1?Q?QUMMeCGCNhQTkyZvnmnnAhl9iObXcWgdGcEudQ3mCbPAGzRIj8pwPWEAPd?= =?iso-8859-1?Q?VRoU9cdvFmphhRlJKl4SbKkzLycGTEknoiSfdXv8cwMAiCWqs1iOC3WqrW?= =?iso-8859-1?Q?m/TAXS1PW8tP8u8+QQctSbc0nvAMAN71YMCvQq3m2wM8lDwgEvmffvwgrB?= =?iso-8859-1?Q?ecxnpuIGOkxzYfEXORjiayrZwHXEmykiANu2PQKxPqszYKzzECESEZi6/o?= =?iso-8859-1?Q?YaTGTJMT3+AeNzes+ZB/Nxn49fkj3JFuJCd77PGq5Epw3jagGxWIxVHyCR?= =?iso-8859-1?Q?ak3ZkLNmGKwqHoEoqeurzBAlV+AdbTYP+ZVGD3QjRF8bKvr2QOPMmuqcbd?= =?iso-8859-1?Q?ZvuSjQO8gAjDF4fbh1aZF4Aa3sfQA7vj6qQV6mAAaXSKdfu25+mgqJ5mxA?= =?iso-8859-1?Q?g/DccID8MmJhdAbNJMOzNdvVLNrw6nXPf5+7ipLF4p6cF5bnJVk9uN5+rY?= =?iso-8859-1?Q?YTSFJpF9EDLQGGz/3XA7q969yeiJfHHOoYWW0K7V84bnnQXbvZUKRUR0Ao?= =?iso-8859-1?Q?fSF9xmeOPc2XsnqPC5ghPrvfhhEm6xUtDLPNtpzZ5vp7y22FY3Ra/ixni1?= =?iso-8859-1?Q?EgTkAnxtokrjPVoA4T2+IrQx1/opJUC4YVGWvBrIJ5nrGN8iMFpTH4ZLGO?= =?iso-8859-1?Q?x2Mif8ZJ5sk8WuSdcFsm8YELAqHrTTbqpfI/kMcNzZ+753rFsXKt2sGgHp?= =?iso-8859-1?Q?TLfnUlkjC5Bdw32F8hP4UHrqLfGlQpKi6ZLbTiGz9R6ZfRK9jx+SR78t1D?= =?iso-8859-1?Q?GYmxW+QAiZ1L9g9PDxGMhsMzz9cy0Tip5jYzxgIIsOAONhCOAPwc4424BQ?= =?iso-8859-1?Q?egvYi9ZPAcdXu9+3u4m/PqrbSmN0QnFq2Gr8BqPtbGJnFVx8JlDaJgiMLn?= =?iso-8859-1?Q?WPpGREuvDEEKZ8dJtDG29Er8rcBLWrdZ+rPEIkm45wBNyzYtKlZsZB9F3W?= =?iso-8859-1?Q?p3v4hjs2LLTuA2HrvWVH+3Z/QzIch5LJgfjOMQ1E+DptxlmUghjS688SYO?= =?iso-8859-1?Q?J3Eh9PLRw65bmPZbJ14RWF6S4CWB9G6NGsuNR5EW2RGHp3TjxD3QZpICsj?= =?iso-8859-1?Q?AHCgioaN3Z4mDCxkegLjDxKb9MSPn6OL87l7h0BMnqP+hGc/9gI2+noutE?= =?iso-8859-1?Q?78IwCWYrbjopCFpOKdZKJE+CV87/hrpraz+Q28fuQrSbG8sO4tDPEaMXxu?= =?iso-8859-1?Q?l9+kbl+t/x3wq7obLgB4NtlLSt7gsqBLWH20q+QtDSamT+tOdYSjQOQSiU?= =?iso-8859-1?Q?2ZbCaOizXW+NCbaZ+SzKnFeqeXrHSfq3BmorP6a/z8bkcvSQ4nd3vpWQ?= =?iso-8859-1?Q?=3D=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: 2c58c5b2-7f8c-48cc-7889-08dbe1ec6fbf X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:19.0708 (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: qHB946+1kfUjcY0U/ZYmcQXwJYpYASYLrVJoA30wclSDYG5DwNY/EPpQ0zLxbgMW4rHHJSmrRKXC8A6aequnIQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: GE0xtHXiOjiNtZbiYNHVHIKMpUx1L2Id X-Proofpoint-GUID: GE0xtHXiOjiNtZbiYNHVHIKMpUx1L2Id X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=714 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621037225100001 Content-Type: text/plain; charset="utf-8" map_resources is the last initialization step needed before the first VCPU is run. At that stage the code stores the MMIO base addresses used. Also it registers the respective register frames with the MMIO framework. This is based on Linux commit b0442ee227e826af by Eric Auger Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-init.c | 2 +- xen/arch/arm/vgic/vgic-v3.c | 85 +++++++++++++++++++++++++++++++++++ xen/arch/arm/vgic/vgic.c | 13 +----- xen/arch/arm/vgic/vgic.h | 5 +++ 4 files changed, 93 insertions(+), 12 deletions(-) diff --git a/xen/arch/arm/vgic/vgic-init.c b/xen/arch/arm/vgic/vgic-init.c index c3b34be192..ca13cf385c 100644 --- a/xen/arch/arm/vgic/vgic-init.c +++ b/xen/arch/arm/vgic/vgic-init.c @@ -178,7 +178,7 @@ int domain_vgic_init(struct domain *d, unsigned int nr_= spis) if ( dist->version =3D=3D GIC_V2 ) ret =3D vgic_v2_map_resources(d); else - ret =3D -ENXIO; + ret =3D vgic_v3_map_resources(d); =20 if ( ret ) return ret; diff --git a/xen/arch/arm/vgic/vgic-v3.c b/xen/arch/arm/vgic/vgic-v3.c index b018ee6040..470bb63147 100644 --- a/xen/arch/arm/vgic/vgic-v3.c +++ b/xen/arch/arm/vgic/vgic-v3.c @@ -14,11 +14,33 @@ * along with this program. If not, see . */ #include +#include #include #include =20 #include "vgic.h" =20 +static struct { + bool enabled; + /* Distributor interface address */ + paddr_t dbase; + /* Re-distributor regions */ + unsigned int nr_rdist_regions; + const struct rdist_region *regions; + unsigned int intid_bits; /* Number of interrupt ID bits */ +} vgic_v3_hw_data; + +void vgic_v3_setup_hw(paddr_t dbase, unsigned int nr_rdist_regions, + const struct rdist_region *regions, + unsigned int intid_bits) +{ + vgic_v3_hw_data.enabled =3D true; + vgic_v3_hw_data.dbase =3D dbase; + vgic_v3_hw_data.nr_rdist_regions =3D nr_rdist_regions; + vgic_v3_hw_data.regions =3D regions; + vgic_v3_hw_data.intid_bits =3D intid_bits; +} + /* * transfer the content of the LRs back into the corresponding ap_list: * - active bit is transferred as is @@ -204,3 +226,66 @@ void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgi= c_irq *irq, int lr) =20 gic_hw_ops->write_lr(lr, &lr_val); } + +unsigned int vgic_v3_max_rdist_count(const struct domain *d) +{ + /* + * Normally there is only one GICv3 redistributor region. + * The GICv3 DT binding provisions for multiple regions, since there a= re + * platforms out there which need those (multi-socket systems). + * For domain using the host memory layout, we have to live with the M= MIO + * layout the hardware provides, so we have to copy the multiple regio= ns + * - as the first region may not provide enough space to hold all + * redistributors we need. + * All the other domains will get a constructed memory map, so we can = go + * with the architected single redistributor region. + */ + return domain_use_host_layout(d) ? vgic_v3_hw_data.nr_rdist_regions + : GUEST_GICV3_RDIST_REGIONS; +} + +int vgic_v3_map_resources(struct domain *d) +{ + int rdist_count, i, ret; + + /* Allocate memory for Re-distributor regions */ + rdist_count =3D vgic_v3_max_rdist_count(d); + + /* + * For domain using the host memory layout, it gets the hardware + * address. + * Other domains get the virtual platform layout. + */ + if ( domain_use_host_layout(d) ) + { + d->arch.vgic.dbase =3D vgic_v3_hw_data.dbase; + + for ( i =3D 0; i < vgic_v3_hw_data.nr_rdist_regions; i++ ) + { + vgic_v3_set_redist_base(d, i, vgic_v3_hw_data.regions[i].base, + vgic_v3_hw_data.regions[i].size / + GICV3_GICR_SIZE); + } + } + else + { + d->arch.vgic.dbase =3D GUEST_GICV3_GICD_BASE; + + /* A single Re-distributor region is mapped for the guest. */ + BUILD_BUG_ON(GUEST_GICV3_RDIST_REGIONS !=3D 1); + + /* The first redistributor should contain enough space for all CPU= s */ + BUILD_BUG_ON((GUEST_GICV3_GICR0_SIZE / GICV3_GICR_SIZE) < + MAX_VIRT_CPUS); + vgic_v3_set_redist_base(d, 0, GUEST_GICV3_GICR0_BASE, + GUEST_GICV3_GICR0_SIZE / GICV3_GICR_SIZE); + } + + /* Register mmio handle for the Distributor */ + ret =3D + vgic_register_dist_iodev(d, gaddr_to_gfn(d->arch.vgic.dbase), VGIC= _V3); + + d->arch.vgic.ready =3D true; + + return 0; +} diff --git a/xen/arch/arm/vgic/vgic.c b/xen/arch/arm/vgic/vgic.c index 946877bbac..2f9644dc18 100644 --- a/xen/arch/arm/vgic/vgic.c +++ b/xen/arch/arm/vgic/vgic.c @@ -968,23 +968,14 @@ unsigned int vgic_max_vcpus(unsigned int domctl_vgic_= version) { case XEN_DOMCTL_CONFIG_GIC_V2: return VGIC_V2_MAX_CPUS; + case XEN_DOMCTL_CONFIG_GIC_V3: + return VGIC_V3_MAX_CPUS; =20 default: return 0; } } =20 -#ifdef CONFIG_GICV3 -/* Dummy implementation to allow building without actual vGICv3 support. */ -void vgic_v3_setup_hw(paddr_t dbase, - unsigned int nr_rdist_regions, - const struct rdist_region *regions, - unsigned int intid_bits) -{ - panic("New VGIC implementation does not yet support GICv3\n"); -} -#endif - /* * Local variables: * mode: C diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index 0e0cf7b213..7dbadf7501 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -74,6 +74,7 @@ int vgic_register_dist_iodev(struct domain *d, gfn_t dist= _base_fn, #ifdef CONFIG_GICV3 void vgic_v3_fold_lr_state(struct vcpu *vcpu); void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); +int vgic_v3_map_resources(struct domain *d); bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, union hsr hsr); unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev); int vgic_v3_set_redist_base(struct domain *d, u32 index, u64 addr, u32 cou= nt); @@ -85,6 +86,10 @@ static inline void vgic_v3_fold_lr_state(struct vcpu *vc= pu) static inline void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq = *irq, int lr) { } +static inline int vgic_v3_map_resources(struct domain *d) +{ + return 0; +} static inline unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *= dev) { return 0; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699622772; cv=pass; d=zohomail.com; s=zohoarc; b=JlTU2OjIFyenhcxfEcP6iVHoKmN/rkqM/c+eTxp7v4Srlldd76c/OHEQO0uUYx5z8kXmRr98/6pyeB4Os0A8AyWIMdKLP1/jsdUjZMupu4umID8YJ7TXIM1IlmdQ3ddNbpBonKQUMFafPuUtbtIQmcHwDZbzr0NnkwZQOTOnbPM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699622772; 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=OrJr290kqOYWcHNBNqtriz0Bdb13RzHLmBg6eDZlzlM=; b=O0ZVDK9ItbdLBaYJuNfnUQIEjUFSnsxZ4WBbClLwRhacEi171sPY7e3/EJeFP7TTh4ouMp2mQXcc1x0EfbLA6CrAqSryDjKU9ZfCUrnxXa7t63J6hE5+9T6Ej3gyS6zPTTIfLSolnNVLj69VGLnYcGJnDepUuuPMqvPkRzk3ii0= 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 1699622771939281.3509624279858; Fri, 10 Nov 2023 05:26:11 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630409.983280 (Exim 4.92) (envelope-from ) id 1r1RWF-0008VL-Un; Fri, 10 Nov 2023 13:25:55 +0000 Received: by outflank-mailman (output) from mailman id 630409.983280; Fri, 10 Nov 2023 13:25: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 1r1RWF-0008VE-RY; Fri, 10 Nov 2023 13:25:55 +0000 Received: by outflank-mailman (input) for mailman id 630409; Fri, 10 Nov 2023 13:25: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 1r1R43-0001y1-D3 for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:47 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 97490aac-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:41 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeeg019156; Fri, 10 Nov 2023 12:56:27 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:27 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:21 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:21 +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: 97490aac-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i1frpE2z4v6SX/MgVMj4nB6SmsMeVg6hrI6qpEPqseyifEwCaviV4mMw3/5FCD4tr780NbnHcAts7nM03HQGxfUXTY8ZRVt0p/lxK2pZ/+HYZNaa2LxZvV5m2+LnUayyx4C5MbzFOAThZSarGukIjGs0C6pjgBM6WmCdVWk1cMhYkjYC4706KV44yKhCUnolK6ZZr01dO0bUEV9xw/+An1doX7Jgm1qZbV8nCjFFHwyHreC4bEOzmxqO5hYoUwuviAth2Bu+aj4fSmyTdSfLgHVJsEfsRv4JTmpxLavIF/RHDOz3DzYc2Xiju9bNt5j3/pm1VHR2WABOhp3YBJo/Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OrJr290kqOYWcHNBNqtriz0Bdb13RzHLmBg6eDZlzlM=; b=dV+Mj8IOE42jVaEK+ZOYfFoKSTMmOy8jeDgakR9PBYQ386+CALJQbbPk5UlYpOoOKZ5y8FgEbA+p3UbPMr9VqHfG/3JS3DmRXKRPUxR53auW1gzpQqHo+SSU0INKGNvBHMJRBVz3ntScdE8js6Sn36IHrGIc2HM2+FQ6otU8PJvSf8N930BWllcqWS/GapkFrqDW6rYpNSQAPY5R9C9e+GhHDYqcvn4x/YJ4cnYCGXbsDgbqZk9d9sLKlm01H3RQ4SfHfX2wIYOVLWRdLRiMhqytOtTCRtA2aCuodptdWTT5TtxpaORfIDXiMrT3RXV8yrzEIFmUtf0kzK9WmQjOdQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OrJr290kqOYWcHNBNqtriz0Bdb13RzHLmBg6eDZlzlM=; b=nZHN8yzEfuiQ8wxfnsfCDLe3q5LJ7yVODOHD7/PDofSr2JxRpP5IaRRFxG6OilcdQKvHqNi2KL0rUjFGkhyfUTNYONQYs9LbUuau8+iDp55bK2oaLx4bzZZr/hmXiodv9D55hwvwsihEuuEr9QmwNzFn5QSAg0upDl25hGbPM9iZbEUMK57Opk60XEz2wmN6CjDBUUYW2HgTODXHjYL6GW5YK7fzVw7AZpRmp+zrnzk54byfZGwdM8rDQ1vKVFxWQq8LBTLoSXN5D5VVv7RQ8xQTBlxdsqv0isOp0VdKibpn18qQBIv49hCu8FGe46Pb1WqOKOIEZMidPZe5SEYO2w== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 10/25] arm: new VGIC: Add vgic_v3_enable Thread-Topic: [XEN PATCH v2 10/25] arm: new VGIC: Add vgic_v3_enable Thread-Index: AQHaE9VMc/Cvb+GfokOTI4WmaNuX9Q== Date: Fri, 10 Nov 2023 12:56:19 +0000 Message-ID: <60813d95cee1619888864a76cf398b8b41c854b4.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 9e2187c0-c9b3-4ced-b127-08dbe1ec6ff8 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RTiK9ZqikpNPAAr+EZfZq/7ui6aq0q1Kfp8yt6KJa9yhCxXQK4E4temDRzDLEasefXxmk2rkWCCJe5HksrSc0b3N6SGHQ6xh3SbyE1omk6NE4OHD9UH1aa45B6jvdDJJEiM2NYgAmILvLW57MsqREua/2Bshio/K2jfxQZTlUl95y/ow2lRyCGczcBJ6kPpW6EwbCuoZOBuCvkMLk46qZmbzkBB7L4FlG4bDIwL473xb+4SbTqcmeOnQLTW1Tnyjtf1jGEtrouThAATdxBq5ktey9skAeGJnwmnvPesd+AkMi4nS9dNuxPGBwYvqk/E1OPAUT3txvcbmIKfuPmhVaqgaqWXMcs7UiheX0np05xxeIFpjFpRbUKf6FUKGlg8eeOvZj3zBBPj87iKLJCMTg2+p+XX0KHZxoqV8+/D4/qMQbCFV+q5S0sG4al7S3iCdffIr5aDOSTH2U2q+CeQrFe3RU/Vzjmg686bOxXq21IHJgSQwoAZS9oqAPg5Nb/iLjnmXgB1RPlqHKGcZdt0tYwitpqiLgDwFcy0QzsIbXG+3kod8tF+rLRkznyYrEHMSVazVhGF0rj2Jv78rXVuUpJFEx19CrhkDXNxpieGZ3E3ERHcf7Xn4Z7zPujiZoZAv 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?57UktyYXTGFPt2O38mubjexz85OKEisTKqMCz5yaY/YnyJC9fl+wbsuvAp?= =?iso-8859-1?Q?5ExmxgEhoQQXJ5NRCLlYyGcWO+HftumZ86v+bYjM91avs1UQleqdGhMssB?= =?iso-8859-1?Q?EuaMta38SsJzyE1EEm+68+s3T1lf/OK93c/bxMl+//xYQiAbDGXt+cGJHW?= =?iso-8859-1?Q?eXj31MGfqSBtyV56zEB14RcJVCEGnhpdJ2TRyEoIrEPl3TrfGgrSmJIOeB?= =?iso-8859-1?Q?9LFYG7gMHztzDtgpwFl3D4wnzemLyXL7gDlK1eazkSTnRR9QnHnJw2K8wF?= =?iso-8859-1?Q?5J3veDV1f1pFneAbBH8/O3kzswzjZlEn36Bauuk7mxTPBHMbSkGecKEAT0?= =?iso-8859-1?Q?uOkgsysKWKbJxHewChOJPsl2VG29R5sK+/k4lJLxdrNkWPm6HCsBqlo5N2?= =?iso-8859-1?Q?hMACHsvmIH64MnsajGG5MzmrRnPgED+Ar8IoXzgC+1qKeNur/oU63bh+p3?= =?iso-8859-1?Q?dUtkj1mxpoRqS57WftvAvslMJfuCftx2RWZsJ8JtffT9lGb3GDn+UP4Cpa?= =?iso-8859-1?Q?tXi2WjI7w1d8pME9Ou2AXvhCeQdH9bKhgCmklbuFJi75sgxLKaVOmdUOJ1?= =?iso-8859-1?Q?EN9gKRVVPSdsw+1N0vOr4AgP/d9LCZ6mQflYD+40tPwZ/tRHHLNJf12lmI?= =?iso-8859-1?Q?35ijFsWc/auEXC9+y2trRI5u41PZEhole4z+J43QJ3cXKjZiVuRjlyCgYT?= =?iso-8859-1?Q?ZjfKPfGyj2l1FR7rrTR3y1rN134rhxp2F+DAGkKH3aOh9On/n0BEPCpjO6?= =?iso-8859-1?Q?rWmn6kqjnopnvMR8E0gwcFt0dYa5k2WR+ZoPn5hm1hhHulDUVKW/6TxX1v?= =?iso-8859-1?Q?K9lPcLHYurvMB673a4JaGTbYUjBfg9qqTPmeOUnyg/damSLojGBiJsfWRS?= =?iso-8859-1?Q?0DD46fDftB078RXQNSR/foPgOuKexHNt1XbAAvmSpLeSANg9hE8C/lxHln?= =?iso-8859-1?Q?SW71ztjvl4lqkl2+sffRG7n2v5N9j7TdkJkx/88sxMhp/lqEuGHtQ1+ALs?= =?iso-8859-1?Q?mQyCpp76HT1zDOysuE8p2ObsuhqgSGaiHpZpD+Ch2gcCGln+x0Tv7WiLs2?= =?iso-8859-1?Q?U4eleNYfWEPDBZteZMz/QYghLkYybdLNKm7ZHmCPa5+mS1h3zkz6nFpQcd?= =?iso-8859-1?Q?dZrdELnVEmUdz4BV48XbR6Q5MDSgK6PGDQ5S1iqTfBbt6yT+7ul1HrGnaK?= =?iso-8859-1?Q?rbB3sizupjWXQxqNdjSvJsZiT++JRQyHXqaAgzODDABCiN6WnebeN5pHHo?= =?iso-8859-1?Q?FaBDNg02Cr2r/vCJz1n8ioM/HuuWV3kWAe5Ugdz0i9d92F33/fx6leEujj?= =?iso-8859-1?Q?ZqVsdZxOzCHH1neV7Q9dW27yL0sFpi0rTAMC0YzdqdZmAXf4u/B/+sHvG+?= =?iso-8859-1?Q?RSHQRXC08WlTX8aav3Of14UhDJFgORCCvKVU9DUo8WUk2umri2R+ZY5nXl?= =?iso-8859-1?Q?Yh5nRiZo2hhQY8pI7snsSk+cbeorHqnMLM37Sn5Mt00t0JjAE5/EcccTXb?= =?iso-8859-1?Q?hAx4HfoT1WumQGQCY3iE3TL/WUXbfrt3HO0B4MTxsbo8b5oiYkbZkDJN2s?= =?iso-8859-1?Q?PrSLQ1nwLk+PEBvHfrUwMhggAIZpV2LbR967wgHi4i14xjKiFYNG3zg35f?= =?iso-8859-1?Q?VEsLJ3Cx5JLaXNwdetNGjaRkNOAXAyOZesNV5J0LHM0nNZW/iTfFVBIw?= =?iso-8859-1?Q?=3D=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: 9e2187c0-c9b3-4ced-b127-08dbe1ec6ff8 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:19.3505 (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: v5LhBS10ioGB4f2yjY7iko1aL0RINlU61PVVjEZBjRVlpkdmpqEDJDI0OPEzhJKPIIn8wnz98m0VPlVPBxMURg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: toLST6ZKplUglxq6PFeRgOIJAWB0HxxG X-Proofpoint-ORIG-GUID: toLST6ZKplUglxq6PFeRgOIJAWB0HxxG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=657 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699622772545100001 Content-Type: text/plain; charset="utf-8" Enable the VGIC operation by properly initialising the registers in the hypervisor GIC interface. This is based on Linux commit f7b6985cc3d0f by Eric Auger Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-init.c | 5 +++++ xen/arch/arm/vgic/vgic-v3.c | 6 ++++++ xen/arch/arm/vgic/vgic.h | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/xen/arch/arm/vgic/vgic-init.c b/xen/arch/arm/vgic/vgic-init.c index ca13cf385c..96f6669d38 100644 --- a/xen/arch/arm/vgic/vgic-init.c +++ b/xen/arch/arm/vgic/vgic-init.c @@ -209,9 +209,14 @@ int vcpu_vgic_init(struct vcpu *v) vgic_vcpu_early_init(v); =20 if ( gic_hw_version() =3D=3D GIC_V2 ) + { vgic_v2_enable(v); + } else + { vgic_register_redist_iodev(v); + vgic_v3_enable(v); + } =20 return ret; } diff --git a/xen/arch/arm/vgic/vgic-v3.c b/xen/arch/arm/vgic/vgic-v3.c index 470bb63147..682d57b476 100644 --- a/xen/arch/arm/vgic/vgic-v3.c +++ b/xen/arch/arm/vgic/vgic-v3.c @@ -244,6 +244,12 @@ unsigned int vgic_v3_max_rdist_count(const struct doma= in *d) : GUEST_GICV3_RDIST_REGIONS; } =20 +void vgic_v3_enable(struct vcpu *vcpu) +{ + /* Get the show on the road... */ + gic_hw_ops->update_hcr_status(GICH_HCR_EN, true); +} + int vgic_v3_map_resources(struct domain *d) { int rdist_count, i, ret; diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index 7dbadf7501..791c91ebb3 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -74,6 +74,7 @@ int vgic_register_dist_iodev(struct domain *d, gfn_t dist= _base_fn, #ifdef CONFIG_GICV3 void vgic_v3_fold_lr_state(struct vcpu *vcpu); void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); +void vgic_v3_enable(struct vcpu *vcpu); int vgic_v3_map_resources(struct domain *d); bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, union hsr hsr); unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev); @@ -86,6 +87,9 @@ static inline void vgic_v3_fold_lr_state(struct vcpu *vcp= u) static inline void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_irq = *irq, int lr) { } +static inline void vgic_v3_enable(struct vcpu *vcpu) +{ +} static inline int vgic_v3_map_resources(struct domain *d) { return 0; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621026; cv=pass; d=zohomail.com; s=zohoarc; b=h5BaXbOBxoS0Clt03YaV3gLY/BUUPE2akeJh6k/6nutjWL6Ypr6vbRY88yMD8x+3XwGf6WCOwDkifF7kezMJnJ3Y+aVFcyaBFV12ROL6DQukXB70+ruQo2xRcWBBknmzlKmcdLHLGzKUqsShahcJ8FrAXbkfNlbuSnrOsqzoazk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621026; 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=pfknAyVbOV3k83G7QQT0Ng9GKon0GixOx1/IoSh2cog=; b=FDTX+fc4K2r8AWvkC/TiB2W5x1QURbSZZTBnCmY6ylubP/apLXtGX+DJffsiRXXxMuKQJO70JagNliYEX+lx72fk7NWmf7ZEk0MGgkFYfiyOmgx/hVKHL5MW95wHg89ZIPs+kNGcUaC3sqruAJeQjytszHy5Fi3Mg0jhQ7ASxKg= 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 1699621026872747.0070395732957; Fri, 10 Nov 2023 04:57:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630299.983049 (Exim 4.92) (envelope-from ) id 1r1R3x-0002Uf-8J; Fri, 10 Nov 2023 12:56:41 +0000 Received: by outflank-mailman (output) from mailman id 630299.983049; Fri, 10 Nov 2023 12:56:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3w-0002Se-Tw; Fri, 10 Nov 2023 12:56:40 +0000 Received: by outflank-mailman (input) for mailman id 630299; Fri, 10 Nov 2023 12:56:39 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3v-0001y0-5t for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:39 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 93eee4b2-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:35 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvd025691; Fri, 10 Nov 2023 12:56:28 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:27 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:21 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:21 +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: 93eee4b2-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RA2RnrvW+EUyLfp/seqNTbfZQD+HllClxQpdD5raPdsNB7R5KOjyfjEJl4l2Te+y2ua2hAs7sAUlZu1AgV2AJS+cOrdFfbNmHAWVNiCe75JlSiUL/JaVK8OMKLlUSZmxQQLXc063qOheCbYOl/+g5QfJM/LVbNGtX4gsfIN1lOIxjgaWJaQBrPKJBzuec2SE09gQTk7IMTLMbGNsvFSgpPFO9dmemrmS0dq9NShF/SOtM9QKAMSQEEcQf+1k4EyBq+1uYirytajDJefK6YC74T6i+xXe2D5iaoUqk0rwe+QWSoNk8Ofodru1En6nSmNAlv7MgLkoxGWYbDOTgQCfsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pfknAyVbOV3k83G7QQT0Ng9GKon0GixOx1/IoSh2cog=; b=A2zPt+dCn0CfV12FoUsMbCTm1zpPCA1Ro9TzeKn7zWPfhGlXbKaLSYsXc0LhpRVDuxMFd/rwHbRKieJHX+BaIdebMcb046L4QKKA35phXnXD0LYm+ZQw7Df4p1EYEsD5Sywp1dSoM6Dr4Ze/ypYnI1HWPtEaI6w936tgij0b6KKHz1bAT2dnKZhRlen/v9Ub+lrDbTWUo4rbgaazkw32v12pG5yHbLZF+Pj/GR/TH3pcOIxDjAvyZ3PD6tBwxTMf/aRr0keJv+qdivX9wsNwbQ0SYQH0SkDhf0UU9YG+l6nkIzCWS1HalJ4iZXDiRFRvc0Pk8EpQuq8vK57lWU2nJA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pfknAyVbOV3k83G7QQT0Ng9GKon0GixOx1/IoSh2cog=; b=gsKMP8leoDMVzcuJ0whbz37FOkyL82LDh67dN9S1yv5emLdq24yI07tsgpg9uh2rC0snpba5VOnc2kDPfHhPqP2ql+Oojc4iFZYOrBIEquV5uRtki1zdGkvytTTvu3MkCG/IZTbwntnnm7OVxVj8Ir9m7XfVhqXSRgYnEjavdcWaTF8FEktlg+dQqMDrvojoE5d51Eib2Fdj8RsE7e9riWcyLvdOneiOEpsJQnafmiFztcqZqIInQKP/2zxsWwkQrwphFa36vGxt2lgKPhncj9aWUKh7vrVJcpn+NP9F32aGuGzBvVARw44Lc+xIT4Ze2pInx9UVeM0tXb3lyOWMIA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 11/25] arm: new VGIC: Add alternative redist region storage Thread-Topic: [XEN PATCH v2 11/25] arm: new VGIC: Add alternative redist region storage Thread-Index: AQHaE9VMKrSrAG80rkWu3ywErkCXJw== Date: Fri, 10 Nov 2023 12:56:19 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: d5e38e5b-f027-4703-6035-08dbe1ec7028 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: njVjzRlEbJNg513Y949S68kLcaBYQghHaVDo/pIj5L1uTkkJ+H66b3gjMORkzU/dCaVHuvKmitIvzzH3bSZNuhVuwvGcFHHJlqu1du9noUjIo/ApeiGNeicNxG86/Pv16IK/+ZGEIaxk2wfpwWBYZYu3WgIP0v7kpwIqyUlwt/t3/sNDZmgPz6ha4yXlrpTw/LcDaWPXIhrKNokACMhQaGSx2z0ASBWb0dChGdgYjMZlOk9F/8niRxHJ4RKr+Qsn4yl2kNX8CsxMrbOuHPX2KKt/986fTTgFboN5U3XEGrbfHDu5KvXHn1ShMMh2gVx3oDG2CZV6b9FkfWgZJQp2v6tUaAqS4PN+1QvPVu+yMO+ihjYg/aUJVQ4f56bC1WDXR3DWcN4uwlzlDfxRspM+0qB8ceuSTF78zD9d3tHRo+OEJK3yl7UK/OLXyMnGPYQRbu/UND7rm0Cq4cZZSdXTMfiH7DPi28jRNcvWOq4m0z32cNBfMjA10ORwFZ6+Tl7y8UeOy+UgvdDssyPT9clqQay7wjcv0WcD0nj7BSDR87xsX75kf447sw/nZhiUes+NAR5+kdQthmXgavw3pCIytTuUpyUZGTu/zexVoqvu+1HZGLX3gMxYN9mt8cvt8uQG 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?Xqx1cVDnzGqacjSCtsYEGgZKJBzvO2wYKF3erN3mXoS7A2BVJBL1mxnKJc?= =?iso-8859-1?Q?Ly304WSN7rtHXdMKe08Nosm4nAcXnbr2uA4e8AVNx9Kl/LKl2cgpBwlnGP?= =?iso-8859-1?Q?VfBdvcj5aYvvbX1hjaOfhhzUqs/1N6hTWlwUoJnM7RWq/hndYfrsRkwI2j?= =?iso-8859-1?Q?SV72P3b9+N2txHsa4llfCWZiABZZVRm+bAXeM7bnZFw6pT3aPTxdXfy5Xk?= =?iso-8859-1?Q?RxpScGOGnoz5fZDfkioMJ/xG5HgvkMOjRU3H0CFkZVWokva9hqaxJMhYyh?= =?iso-8859-1?Q?dE9G4k34T7pXafhhbonwpQtdi6g+VasKM0esoQHWFoQglpFCeu+xxNWBPZ?= =?iso-8859-1?Q?qgbGy8CuDsct/4v+6eymKL30VNKFE42rjKV2ri9JL0LNPlYO0FX/WL1GIR?= =?iso-8859-1?Q?ZfaRLica4VtPsTbUBxEPzBn9s/NTJOZ3cD+koiuCG6m8RBkjOBxx1991A/?= =?iso-8859-1?Q?DTAdd2NgyK6qcf+CkIq89dJVLd8C/q+LOb83BXRVrLQsf97ZG6GRyHCGXu?= =?iso-8859-1?Q?9ivbjkZw2BGennoqseq+Q7XymFuJsqQbfM1t3gfZ2thMO+XT7FQR4MYT2P?= =?iso-8859-1?Q?JxHsWUWsVH70zjBll1fMa/GTkC7Obvj0LcxlXjfwVyWH1iaDDpSH8RdJGd?= =?iso-8859-1?Q?5OLjpRgqlzTyXRoUFWbO3q8u5h0CTrgvaqxSqDPXV1ibntk/kDnoWasg44?= =?iso-8859-1?Q?ANN44wdrMmf+I1C2EDzT2sPoKFDD4ZHYZdLRJtqU9BB6I6zJnwXBV5MgNP?= =?iso-8859-1?Q?ATZ7Xieh+7o5SqO0+c5jzKsfeBE1u7FFh726PXIAg+iEfdQ6bmVaGmz5Gb?= =?iso-8859-1?Q?GwI+zA+Idq2gUgfw9C+6XNiLJuSYlqlvFUoaHDOH8342LJnxFGseXMkFxT?= =?iso-8859-1?Q?whomadt9zC/3acX8+EZu84ninIcwBgfNN08bmzIOxUQrb3UxIhYjGES+DR?= =?iso-8859-1?Q?ukRXzvwMe39H9fWQWzcPERrePlsRdnzC3z/nKGdNmw3A4/M3nLJVtYpfm/?= =?iso-8859-1?Q?dXvYxN8EzzAfGDAENef4op5yJEXJ86IlaiiqkrmpFGHlj/OFUU03QpYv3N?= =?iso-8859-1?Q?Ju7g5OgHah0yCw9QFcPVuQraILwzy+iRz6mBCsUk2imDnIoLWl7bhurSEq?= =?iso-8859-1?Q?BbHlzM65EH7h3nCrQ46i++8Mu2Ln2+mLTz0DpjaOU+yUY0z9AlN/WJyM7Q?= =?iso-8859-1?Q?STqWViQDkyMuHD2EtZiO0rfXpKM3seS4/lfnSqNdfm27OMLbNE9M2MP4W/?= =?iso-8859-1?Q?++0oWKUvLheIcyP3U5VythO8sAjnEdBN3Jxg6c2d5aU71YWIcTdvr88Yq7?= =?iso-8859-1?Q?uxry8Ccc0UHMr+UAwqX/jmcUGfnoakc/P3uuzUoe1Qj3mZFDL+gfvfEEig?= =?iso-8859-1?Q?zLPAkYRsoPBqLQf5JzUvtuDwU6RURutCs4zthA0AyiTAffNcCizvKO926m?= =?iso-8859-1?Q?5KC+NEiMBCE1FCZZOsT6SwjSQux39NGfWxgwEZxH/JYiNlvOgWSj5YzAIT?= =?iso-8859-1?Q?Iu3Cty+8L0zEdmDs3Z7iIi+1Ja2JL/qGIzi3VIEN2lsSfIIY/9xg54WGlo?= =?iso-8859-1?Q?55yT52QhlHDSBc58LIGGNDdIJ6bQiIm7sTM3oKwPVoLMPpXz7s+fJTC74e?= =?iso-8859-1?Q?eSWitiUBARNhIp+gVBuqZY/B7kPDRcslLnVagAIxYcaS72ygB2OdOLBA?= =?iso-8859-1?Q?=3D=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: d5e38e5b-f027-4703-6035-08dbe1ec7028 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:19.6495 (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: d7oGc3Sh2VU/tPQ5AMz8IEOAVDUJJhrU5+jEn6N0iRPKyASmyBd85gVSOHa2hmnZaitqv9LojiQnrGALX8Oe4w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: 6scE0qSUuU3Iv047aeFKDrMXG_n1zH0s X-Proofpoint-GUID: 6scE0qSUuU3Iv047aeFKDrMXG_n1zH0s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=656 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621027169100003 Content-Type: text/plain; charset="utf-8" Guests DT creation requires redist regions to be stored in the specific variables in struct vgic_dist. But in new VGIC a linked list is used for that. To not clutter the DT creation code with ifdefs, add alternative storage for redist regions in struct vgic_dist. Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/new_vgic.h | 5 +++++ xen/arch/arm/vgic/vgic-v3.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index 11d8f71851..9eafab45ff 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -21,6 +21,7 @@ #include #include #include +#include =20 #define VGIC_V3_MAX_CPUS 255 #define VGIC_V2_MAX_CPUS 8 @@ -136,6 +137,10 @@ struct vgic_dist { paddr_t csize; /* CPU interface size */ paddr_t vbase; /* virtual CPU interface base address */ =20 + /* for compatibility with guests DT creation*/ + uint32_t nr_regions; + struct rdist_region *rdist_regions; + /* distributor enabled */ bool enabled; =20 diff --git a/xen/arch/arm/vgic/vgic-v3.c b/xen/arch/arm/vgic/vgic-v3.c index 682d57b476..8b700609f0 100644 --- a/xen/arch/arm/vgic/vgic-v3.c +++ b/xen/arch/arm/vgic/vgic-v3.c @@ -257,6 +257,10 @@ int vgic_v3_map_resources(struct domain *d) /* Allocate memory for Re-distributor regions */ rdist_count =3D vgic_v3_max_rdist_count(d); =20 + /*For compatibility with hwdom dt node creation*/ + d->arch.vgic.nr_regions =3D rdist_count; + d->arch.vgic.rdist_regions =3D xzalloc_array(struct rdist_region, rdis= t_count); + /* * For domain using the host memory layout, it gets the hardware * address. @@ -268,6 +272,8 @@ int vgic_v3_map_resources(struct domain *d) =20 for ( i =3D 0; i < vgic_v3_hw_data.nr_rdist_regions; i++ ) { + d->arch.vgic.rdist_regions[i].base =3D vgic_v3_hw_data.regions= [i].base; + d->arch.vgic.rdist_regions[i].size =3D vgic_v3_hw_data.regions= [i].size; vgic_v3_set_redist_base(d, i, vgic_v3_hw_data.regions[i].base, vgic_v3_hw_data.regions[i].size / GICV3_GICR_SIZE); @@ -276,6 +282,8 @@ int vgic_v3_map_resources(struct domain *d) else { d->arch.vgic.dbase =3D GUEST_GICV3_GICD_BASE; + d->arch.vgic.rdist_regions[0].base =3D GUEST_GICV3_GICR0_BASE; + d->arch.vgic.rdist_regions[0].size =3D GUEST_GICV3_GICR0_SIZE; =20 /* A single Re-distributor region is mapped for the guest. */ BUILD_BUG_ON(GUEST_GICV3_RDIST_REGIONS !=3D 1); --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621023; cv=pass; d=zohomail.com; s=zohoarc; b=WovGRYtTcOJaSnA+7vI8BlKZbyIfkBDYx1p7HinqlMMLG4XUSwA4c/9t9A143D54qLW5KgCAFq1KVVQxY/gTsQpHjdxiWewxvSmsM74nMBTyFb/FkQR3WUfvy4Q/y/wyetYRQSFIw/D2pm+w01muBgovWxSNQ7RevXyAw1M2cMY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621023; 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=tSPiK95kipwtC6I3hCNGMy/9HCeBgCvnJ9pxXmqknj8=; b=YKcaf6sfX6U8HHhAdv8RrUV8AZ0+2GilaC2M9CWCIXmu4QPWGleK6gUwDcdS2oz/M8UHTaASVyS3lixjlOMUgTMp3xr0MvQkejm4aWgvvIhfz8+PcEDvfwnUGBTjA/pqnyBw5LZlUYLVLZt0n/iCud8G1GhQ1UPdYY8CGDlIto8= 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 1699621023745340.5226209031657; Fri, 10 Nov 2023 04:57:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630297.983033 (Exim 4.92) (envelope-from ) id 1r1R3w-0002Bg-3n; Fri, 10 Nov 2023 12:56:40 +0000 Received: by outflank-mailman (output) from mailman id 630297.983033; Fri, 10 Nov 2023 12:56:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3v-00029Z-VL; Fri, 10 Nov 2023 12:56:39 +0000 Received: by outflank-mailman (input) for mailman id 630297; Fri, 10 Nov 2023 12:56:38 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3u-0001y0-5l for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:38 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 93db860f-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:35 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeeh019156; Fri, 10 Nov 2023 12:56:28 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:27 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:21 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:21 +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: 93db860f-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UrsWcyC+UHEaDmnvbeJWM9HFzQmmECxldzd2ClYbqQzk7JjcADZxwH6bw9LW3VukH+gtGh4+JtA4INF4EVPwrpotFlJS79nbifrlZYWHM9RSwxs0ulYFjJETu5ehthZ9g3dauKUmmPWENUbUxMvGJcE7dr9BBkaGWQEZ0Y+BIRC/bfGoWN2nTpK70Fnj74TucuF1kdoVtiYHU/CRrY7/oVTfN0Fp9b/dO8QGR4tGKAsK+uW2ADHQ4I02TZtAj3ICSZSkKR/Uny5+EX1/vp1bfmjq9TFIwvSauZJB51akX6SOotUFVobbh95LBA9bVs+iodlTTfq1ixlR9Ixhq1ohsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tSPiK95kipwtC6I3hCNGMy/9HCeBgCvnJ9pxXmqknj8=; b=Psc6iroDwQtFqLtYz573AVV7yZunO7S4gd7JQ7SeOvKWGn6wabdMfpBk70pVoys0v2Vd8ZIB3cMgA3RzXHYx0F8zuMtuAfJZL1DfHLqZZlmyUHW+hA+GaHGDqC2PVIidextaPsH2HEAN//SJvgHG0e+lBdMoDGJCMZv6SIsVcAt6RYnDy6yIPfTkecUMvWnl0n4/G1m387/pSCNO4UX5OnEQgUpUzzMgND8u6AIh+SF5HdfzWI50+kedcvqWxjf7tkGBON3zyPxAQQJfPw0RizvELhQz15M0ldcgqO1Sz7SzEcKmWOTJE8uRM4nqEYHZdca4f/hO2CtM2NBaqq+iKA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tSPiK95kipwtC6I3hCNGMy/9HCeBgCvnJ9pxXmqknj8=; b=oPxJDntyaL5kEP7JdZcQQWjO7HLQfvhDDUfQRgv4B8PBBlmsLvGat5fIgfXbEo8uYU9zWq+RuqaNHdnptguWRSMlanmdyVwVDWqYfy8Q0opoqlFfTbv1JZP+85q6ZJLCLQVafYuXNd7C7kcagFJLI+gjvN1hxS4+6dRgjAu7GmpPJWoUXEApOH+fsDQeAAOBPlsn3mmJ7EEpc7G8CPrrjlnqWUJKJR/oAHm6buz6ZafwsP42SmgOARm4QYo8wivdVu9mjJE8UKJOhdiO5JvdN8DkCEo39ivIXvPrnWGVWDwfku98r9/lG6hOnX/Zu0Mf6h+XNq5lV7MqLqEDTLAcyQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 12/25] arm: new VGIC: Wire new GICv3 into the build system Thread-Topic: [XEN PATCH v2 12/25] arm: new VGIC: Wire new GICv3 into the build system Thread-Index: AQHaE9VMxtczAj4WwUSEIvU5E74CCQ== Date: Fri, 10 Nov 2023 12:56:20 +0000 Message-ID: <17d6dd8df0ca5fa60429dcfbc8c089b88b0085ba.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 736c2b3c-2393-4cd9-c009-08dbe1ec7068 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7dQExTISd4kpFDB61Fr5UN6/XGdZw8mwryck8VRmnK9vDxlNhh2TiEjlh3MSiv5jdAPs/+Heh7o+VMVtgmV7Mr2J3VdMVU3isKgxnQk+bA9iFk+kjo3exEutr7IenjpfZoh5/0vgfPHrnXHBtkGOPx8QFQAVpSS7Q/N4sa0pvdd1ykFlHVtHxlitObIGTbUCQAVrF/XYd32LunaJq5veQs5EJzxHJIE8XczsHMKIAhY1YctFxfK3CfzBCztxZ7F1NGhwzqRUKNGVfyMAGBi15uKpKK4uiVlVKUtw8GElOM37E/spckN+oMXBHr8VmhmFXG3sa3t1/7Akx4ZpLvNiFrQ8rqdP3klno2Y2wSjfow/SvJmTuv2YKvKrZv0QNfWqurL1CEqKcvs4/PhCkCKRB1XiQ6WvG+/3vEotZ2sA8XCEAVz3z6yWICrJ/+ZxVHVPj3SOCF0gLMDAuakv2PDfQY8wJ1IWBVcoTCWTnmikoAdHo8Ujp9f4LRQL313DOi/LqEOtD5xsFwhiU2CX7zQttYdMo8Twq0YdU/wjmM70yryGizsGJqAxfI3mOH+BlIwClDlrxdODdzsDJOCScmk2/OvmaBaV6LB2fLJ7SZ7AdJ8= 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(4744005)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?atZFypU/ChBfZlHnuLSbuTPXb7++vH07W4eauYqTW8o3ljfvMTz1nIkldq?= =?iso-8859-1?Q?8NJbW0AKJlrTtbV/pFsEbg9BqrZ/wDCkutgxfl12dMAScFrvZtAss7FDEy?= =?iso-8859-1?Q?LTgtOdF1fR1Lu6nmA6iwSweudgg3jYNMU8glCLcQmukGeajl2hqC5VA9QK?= =?iso-8859-1?Q?XKsIbRtN+MkOmnij9GDzl9DRlSUEW8pQeztuNIuZYAAMQt2c5H3VAZjPe6?= =?iso-8859-1?Q?KEvjvE00czGqKpDG9bhYtDYGgurA2hRu/W64EF5YCcUilacQ4JO7PkFh9v?= =?iso-8859-1?Q?eyKY39jmX6pTtxfomg9VsJ4oJTDr3KUMHQ+cLNTLTZ9HdXC2XqCL9X6akA?= =?iso-8859-1?Q?ldkJ+YjgxT+V5LGip7UU8hqVERY73MYNI/pfHTLMdBMEazH+Apu2ffxyQ3?= =?iso-8859-1?Q?87jv+W97TNHXSM24mhB5tlGsIGJz9mXfcV9DbE1lfiEgEsJvuVRH3a4o1y?= =?iso-8859-1?Q?60AhFOJXGzyYI/73EAZrLiuWOpNM2uGbvVk81vJYbTF8/CCXHXC52rLBkg?= =?iso-8859-1?Q?VMtWipnTZRjDvEdGUOeWIQ7tF9pDSsiunbAYI5c44MJMIJhLnURQ09ftmZ?= =?iso-8859-1?Q?2PuJyC41HAz6hRNYTJjy1M5zxbyy+LdvUAFXAIBkWSlyfuGd92BEdiSfoW?= =?iso-8859-1?Q?BBMoqhHpQq8OpMWH9M5HXcQpAQmSCslZ3oKg6nvS5FgYg8oQOZiOFNbndE?= =?iso-8859-1?Q?Pfa7pRM4M4JM2wxv73SOE78OWHR8ouJmG4awJkq7BLKjWjM5oHWXkcGE9p?= =?iso-8859-1?Q?TJzz5YbfZxSQx5FIwdgI+mcvUaTJx3yipLfBstAS9ZY5vWQfXNIgcd7SO9?= =?iso-8859-1?Q?Rj2kbw/bTn9Z9BAimor7aWeAwpuVuoxChkiEmu8nfpYc7WPTRwicbBLlLm?= =?iso-8859-1?Q?bNGUdYPinIvDxzukDsSAe9o72Wf+X4WqE4H/yjDX7Z8TOasKC8sKOlDsy0?= =?iso-8859-1?Q?5omIHUhooBSior2zGCIbh9HQc43NIkjDB6hgtUd6zERQAo4uSP6jUjTngO?= =?iso-8859-1?Q?fj7SMGmKRpj2yamWwixXLnITNM/wlvrJtCQ5gajvnY3Dv1bDFQkdhyTW8+?= =?iso-8859-1?Q?qU52S07nshBIZGTVt1Ch6lKATGzFXw0XC70y7f6tSCq69Q7agvZPdbUjT5?= =?iso-8859-1?Q?FXOGsLLatrJPsh4w4DqQl6QxcIHle69LQgkTYIoAv963MFFSQHZg3vIHer?= =?iso-8859-1?Q?9xGOisoki/WT0+qAm1GPjVNrxVDRrcaDdqwRumyBA0SRtSFPwg9bOwXbOp?= =?iso-8859-1?Q?W3Ln2qMP0DFVCqo+tA6083gW4H8Vjr+42tNKwh5v3trcnmJ9xIEWvhuXrT?= =?iso-8859-1?Q?oLo0KjqiPRM0nus0YOINA1sC7YPtAJUZWhJ8PJh4evUvclqFWtJMcCZOwy?= =?iso-8859-1?Q?A7sj6PV9jtTE13LRfqVtOXs5IPSPvG8tTUQ9/TkXs6XnhaxjmC5LjxYqKT?= =?iso-8859-1?Q?xZjM3re3+Jx3OglsM983JYv+8Y87ZcUF7a8LBepWAIJ1F4gO/RBCNiz6Fb?= =?iso-8859-1?Q?/JXIqB/FPuXotQe8QEMbCmwF/EB10X2Y5+hYABRsEquLyn2ADMId87l6x9?= =?iso-8859-1?Q?cualdt79y7TtushDVVp9k4O4Tttuw5AhJLvu403LsII/QxI7LrZXYveRCn?= =?iso-8859-1?Q?62uOQfZ96EPAyMQwoqq8H8TZm2IB0Hfa2iOgnJOYpYNdoE9ECkEciIHQ?= =?iso-8859-1?Q?=3D=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: 736c2b3c-2393-4cd9-c009-08dbe1ec7068 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:20.0637 (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: LoRwKn7GZbK9VlxEyYwN88ksRCE4hClwrEnBYzuGNYXv902l00O3tZB+IgXHtmkRS5HwW1DCGlvyOVuWvxA/0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: qKrW8wEgGFGBOofE4ce49iJXqA5n41Y6 X-Proofpoint-ORIG-GUID: qKrW8wEgGFGBOofE4ce49iJXqA5n41Y6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=736 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621025176100001 Content-Type: text/plain; charset="utf-8" Remove !NEW_VGIC dependency from GICV3 config and add new GICv3 files to the build system. Signed-off-by: Mykyta Poturai --- xen/arch/arm/Kconfig | 1 - xen/arch/arm/vgic/Makefile | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig index 2939db429b..c91011bc15 100644 --- a/xen/arch/arm/Kconfig +++ b/xen/arch/arm/Kconfig @@ -82,7 +82,6 @@ config ARM_EFI =20 config GICV3 bool "GICv3 driver" - depends on !NEW_VGIC default n if ARM_32 default y if ARM_64 ---help--- diff --git a/xen/arch/arm/vgic/Makefile b/xen/arch/arm/vgic/Makefile index 806826948e..21a71d2502 100644 --- a/xen/arch/arm/vgic/Makefile +++ b/xen/arch/arm/vgic/Makefile @@ -1,5 +1,7 @@ obj-y +=3D vgic.o obj-y +=3D vgic-v2.o +obj-$(CONFIG_GICV3) +=3D vgic-v3.o obj-y +=3D vgic-mmio.o obj-y +=3D vgic-mmio-v2.o +obj-$(CONFIG_GICV3) +=3D vgic-mmio-v3.o obj-y +=3D vgic-init.o --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699622722; cv=pass; d=zohomail.com; s=zohoarc; b=gX5GEA7Ol3TE1q2mYNnZia1ZA/jC8+Pmjgcsuh8xFhXJJwFnMzC8mMKT86lN0o528zZx2pzEeV7fivNxCD77EjV7CNS/PEifebfLD+oRYGziccv30KVCYFBcJRqRQstTi0e3LaetaJQtZF7YiJ7YD2qQxKtT3/LU6uKDcID18kg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699622722; 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=uUBkCvuEESmq7r0a6CekkNPCW4U9CXDKahAfynlOBYo=; b=V2+PSu1STxDz6qetCuqC7MamzpSYmyvXBYIhQ4KubsT9nwbTzIPb5QPT9gqVzUtrPeiP0XBEPBDiQCYCua/qBhH3lOoGNhxl5xQXme5sZE9iGURuoyBSVHYIEzP5S7l1ZgkkSj84Uh7PDqVO+UDkKoLVLnBeCmphRpYvt2BPdhA= 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 1699622722669850.4562942650075; Fri, 10 Nov 2023 05:25:22 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630406.983270 (Exim 4.92) (envelope-from ) id 1r1RVI-0007KX-Iu; Fri, 10 Nov 2023 13:24:56 +0000 Received: by outflank-mailman (output) from mailman id 630406.983270; Fri, 10 Nov 2023 13:24: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 1r1RVI-0007KQ-Fs; Fri, 10 Nov 2023 13:24:56 +0000 Received: by outflank-mailman (input) for mailman id 630406; Fri, 10 Nov 2023 13:24: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 1r1R46-0001y1-DN for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:50 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 986c3da6-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:43 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuve025691; Fri, 10 Nov 2023 12:56:29 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:28 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:22 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:22 +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: 986c3da6-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cwakm3dedQbbCRT58GmfcLpH849mY1mzaFkP6KfSaPEncNut7zMW2V4ZuksjWtd69Hd9VFdjHrDiwpZXfkP6ZYZRtRXEcerG+ZD+W095V4d3mOBHot1GV1AvlCYZWusSFy5HtB0J7xMABzKTiDU3H4c5WcDsml6LlydmFPkP7di3xIwe1feX2W8Lcgbd3cM3B5NGvjEzeyHbmo+eEkuwW36W3luVOa8y46qJyUQHuvQIV/0V/Vcv+s+VH6q5VfBhXQ42n08sVTcM5PVHNY7Gs5velv4IXgt7oAJ5U8gflDhxasnHuccvDzs9ueGELgB2aL1Eq8t4EL8NZpkK8T+4FQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uUBkCvuEESmq7r0a6CekkNPCW4U9CXDKahAfynlOBYo=; b=P8lr++2ljXrtIhLYjHVPczJDl8fp8t7Jn1EJMo1IsVi/UFvKIIQPMuWJj9JUK3QEFmYiuoscNZm4p1usKio0wUmGe4DfubKYAX6INDRSPp/ArPqLbZa3mf+/zFTlomDu81YwlK2dptSL6mk4uTRV+FX9cVtP7IdJ9g7jlRpREPiMJHYpvAHaN2MlyLuawu8BLNXGUy0bFzL4vup8u9iCRn9yLbT2NHJFFg1XV5Fe/GzVBil9YW9dv61NGxOnQI6hzRc4oY6/fYFAU8BQY5LvmTnvrhgApY9WBJi5lzJRHZDuaJ5/xVWPm4JiA3ZgHeih7zL+0JZYpA0ajpqsF5B2OQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uUBkCvuEESmq7r0a6CekkNPCW4U9CXDKahAfynlOBYo=; b=lfyTzCkdnjSW77PoVz/xG0Bq6GgGTeyZj0GDK/HD0nq8NLlKY0GihMQVaUWh9GeVlEbVk26R65ll2lmp9SngoNQsDKLPvaKCb9x9LD8SNBjBFLfcX8d/LCrK/f5PS4VAPF+Ly9OcDzh/HrgKjclsusH+blUrQGfJNNemn/Mii/gFBFrqnUKmlKO/3CkvmswWWAxqEhRHsDK+CTiK4TeeAgJEXQCEasOIwhaB6NZr7SnN0Z8Qad3u0vmpt7tPgEejyY84p4H08VisQQOohJrt+UfrFVOH/C3cSONYRk59jlysqDIHqaAClqqPjzVy8O3/zOPT8uXeALii4YHMmMYcxw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 13/25] arm: new VGIC: Handle ITS related GICv3 redistributor registers Thread-Topic: [XEN PATCH v2 13/25] arm: new VGIC: Handle ITS related GICv3 redistributor registers Thread-Index: AQHaE9VNjC2fHo/UK0SkGOgI1kkZBQ== Date: Fri, 10 Nov 2023 12:56:20 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 03841872-a201-4450-46d1-08dbe1ec70b0 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qcaDAYFB8UI3Ktom6uopoFJFe/m/mVmWUh+T8TSZwwlBU4AkWT3URnA6+5Xehfl6TTbNpn2J3DFbWHGh6iTb9QLi3OLWxH62musjLP8TW0+kzBlsEs6/kzd6637LUCb/PN3cns2oAMKxe9Id/OMrxsTk2J0ZLFPRLciAgbX+uIaTzJbesipYD0UPHfhPkO+gn1MS8P0GhjUrnNNnIsLi3EMMDo0j/dkrSDyPsu6tkWacqwDLRguUvJRZQ1qHGS4innEeG2vjPbG9YXRZRKuLNE3iorHsPGg5ePUIoHV0ZPS5aIFTt+wjsJY7cntQ6buT4ADo1cRO4cN/+ZGFT0h0e2zWh+Rx7dm4uZdG5k/pEDbPDyhLcZFi1LGcWVcyRj/Xhi5wG87xSf4ln0fWnTC652m4zfbLPO0m4sjVgBpMg3odM0saQDb32UedEO+65XMYRooqsT/HmV2rFo9lAL51GpG49HU9rsNY0eYOk07Ws1qkpYk6V5q66ELgl2Sze1qiZdzV4Bedo1ILBREgjiRgbckdmvdveZTTGb+euud/lT9AH4iHJzr0GnIKWzOrTVwKz9zX3n46CuTVi5pVOiVIwJUlc6TEppUpL4CHPH8LXTLLqWHB4rsODmGkE4UkaN/l 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?oREEzXYYGUt5YHyB9VbE1csmxdK6SDAZmdnPed+Fq9okNhBM5Tz6uUUBCn?= =?iso-8859-1?Q?HS7X0Cs3DQiWir+9i76WNO65CSGuFXd2RlFld8XBtilc3CHo031qgEaav4?= =?iso-8859-1?Q?JMe/VBnf5psk22g1NCgVMSx8lQoxVXJ/0qmNqLPpumOAU/9a1faMkxgbHl?= =?iso-8859-1?Q?2Sp1IeagtWtAyePbd4qhAIKvcquik7lMVptaeqcIS+pij7I2g5KBilybro?= =?iso-8859-1?Q?hPnWbGYnyN28v45AHoQrf9yqOgR+sRtIHqaYS0DSUPInYwTpj19oXqO5hu?= =?iso-8859-1?Q?ZCm7T0dLrceuOWVJPhWXd2opc+ksZornxpTEsMt+pu0OM+tW6k4DWlvIUv?= =?iso-8859-1?Q?egTbtKmC53Hbgnc7bkgcWEPS8V3D5HFoVIZxxXn/zvrBJqAe5JNwaHHDDd?= =?iso-8859-1?Q?5cMEFYeSZkqMwfXHjopcswFW7aPhP3GfSXbc5EgcTrua0gUCBX0tPpQPFS?= =?iso-8859-1?Q?5Jw3Rjh5Ymai5IVi9a/Z1GkiT6rdrLiYLrEJgg2ZVRw/Bm+TzPo/ZOUWBE?= =?iso-8859-1?Q?NzSrkDCjOAgrD43HNz8/gJdxg7FshPJJHXQVZKAZVT0fOMUYvO3HvgenKL?= =?iso-8859-1?Q?NBsB14emNe8h9ybjztuZUdsKzlHAcwUD5JWKO51QdiUpPEptjCGFH5jCLw?= =?iso-8859-1?Q?4dhKNnaTAxt6rwFX0fi+3vNWr1amB16NrvPv49sGap9n31s1SbnTvHp7N0?= =?iso-8859-1?Q?kF9AyL9GCtg74eMFxUowQYXiRvIC6wbLSEOt/VAcymdJRAKRW5zrdKg6TF?= =?iso-8859-1?Q?T+e12+Yeui4q2n/o9bkuhu4Hs8mJXT/ZzJG6+BrUMJ5HPooe1v2z6Q7+Rk?= =?iso-8859-1?Q?jEpZlCSO9dpQ8MfAXLvP1uI+cVwVlJ5oOTYqJZDSupI6XUQr+II5Q+JVfR?= =?iso-8859-1?Q?XU7QLTASeO0bSSjQq+XQQmqX1208AFFmGtK1hHmT20007+i1YJIAeOCdRN?= =?iso-8859-1?Q?iRCkayUADnlqreLNNNeGhYnf0k3m4kaf2kpo7YwGMO8kR+cZGOCK8H3D4l?= =?iso-8859-1?Q?Yljqx7eS6S2nmsRGuD/4/Oqt9bcNbAnmAm1txnNIOD/Jvr8xKtx5u4eBCN?= =?iso-8859-1?Q?qBdU/LbZufH9YqpC1TsHXOONTyQyg781UZg7m9ueCO7qYqpkHzozpiCN4J?= =?iso-8859-1?Q?AJZgVaTC4O/hHEBVS2RXJMQkpCmXBlQCvz8kjgfgXMkngWkHwCEdmSDTq3?= =?iso-8859-1?Q?Fku24Q+gHdz14/0NP9PswsL2Rm9nZwXYuQ4AYqoDq7z2h6kZkntnosYwOW?= =?iso-8859-1?Q?8hZwBkxpEyiQv1VX6xZi/ewpgiBVIoXk5gPl7+95VR+19FUKF1cxge7+5C?= =?iso-8859-1?Q?b8SkRNpWRnSgOo7yhVbUyw9TGv6r8LOX+vYbcQGnoBpL7p1tDSwlNIfPlQ?= =?iso-8859-1?Q?It07wXxh0AezS0+e8TFLRj81lK9HAzgkkkL/cZx0ZWZ5Vs3fnH2tTIfXiK?= =?iso-8859-1?Q?T1yMikKjMKECQhIOAqWV1g2RlHJJPbH9DcJpMjr5u9toHfA2Nr5VuuODSk?= =?iso-8859-1?Q?CyGjfvznO5IQxMrP1EWtX43dpqTh6kdvGxzZgfssXyJLWjwnbjzgCMmdSV?= =?iso-8859-1?Q?I3gU2k87uuK4mg3IhGtuBsx/vvpGPa1Ljo8AaceCjn0CmgBsFNASumv68L?= =?iso-8859-1?Q?0D57Fra45PWNnhp9NhZqMGy+wQvzIORPM8k/Gl1NgdIyStbAKeWnMM9A?= =?iso-8859-1?Q?=3D=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: 03841872-a201-4450-46d1-08dbe1ec70b0 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:20.4111 (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: 8K61EN5L2yJmXfYhEy9fx1Y/YGInlxfYqdoSTF5mJmrs1pKtSMZROYe0K8Y/TlXVgWSGwaTe8GKeOnSCzPdaMg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: 3DubnSCnFA0Wo9rZ81mLHfH_4Ogv9pIm X-Proofpoint-GUID: 3DubnSCnFA0Wo9rZ81mLHfH_4Ogv9pIm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=805 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699622724325100001 Content-Type: text/plain; charset="utf-8" In the GICv3 redistributor there are the PENDBASER and PROPBASER registers which we did not emulate so far, as they only make sense when having an ITS. In preparation for that emulate those MMIO accesses by storing the 64-bit data written into it into a variable which we later read in the ITS emulation. We also sanitise the registers, making sure RES0 regions are respected and checking for valid memory attributes. Based on Linux commit 0aa1de57319c4 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/new_vgic.h | 3 + xen/arch/arm/vgic/vgic-mmio-v3.c | 168 +++++++++++++++++++++++++++- 2 files changed, 169 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index 9eafab45ff..b037b6cf61 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -199,6 +199,9 @@ struct vgic_cpu { =20 /* Cache guest interrupt ID bits */ uint32_t num_id_bits; + + /* GICR_CTLR.{ENABLE_LPIS,RWP} */ + atomic_t ctlr; }; =20 static inline paddr_t vgic_cpu_base(const struct vgic_dist *vgic) diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index 19ebf723ee..2fb44cfe6a 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -42,6 +42,18 @@ unsigned long extract_bytes(uint64_t data, unsigned int = offset, return (data >> (offset * 8)) & GENMASK_ULL(num * 8 - 1, 0); } =20 +uint64_t update_64bit_reg(u64 reg, unsigned int offset, unsigned int len, + unsigned long val) +{ + int lower =3D (offset & 4) * 8; + int upper =3D lower + 8 * len - 1; + + reg &=3D ~GENMASK_ULL(upper, lower); + val &=3D GENMASK_ULL(len * 8 - 1, 0); + + return reg | ((u64)val << lower); +} + static int match_mpidr(u64 sgi_aff, u16 sgi_cpu_mask, struct vcpu *vcpu) { unsigned long affinity; @@ -369,6 +381,158 @@ static unsigned long vgic_mmio_read_v3_idregs(struct = vcpu *vcpu, paddr_t addr, return 0; } =20 +bool vgic_lpis_enabled(struct vcpu *vcpu) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + + return atomic_read(&vgic_cpu->ctlr) =3D=3D GICR_CTLR_ENABLE_LPIS; +} + +/* We want to avoid outer shareable. */ +u64 vgic_sanitise_shareability(u64 field) +{ + switch ( field ) + { + case GIC_BASER_OuterShareable: + return GIC_BASER_InnerShareable; + default: + return field; + } +} + +/* Avoid any inner non-cacheable mapping. */ +u64 vgic_sanitise_inner_cacheability(u64 field) +{ + switch ( field ) + { + case GIC_BASER_CACHE_nCnB: + case GIC_BASER_CACHE_nC: + return GIC_BASER_CACHE_RaWb; + default: + return field; + } +} + +/* Non-cacheable or same-as-inner are OK. */ +u64 vgic_sanitise_outer_cacheability(u64 field) +{ + switch ( field ) + { + case GIC_BASER_CACHE_SameAsInner: + case GIC_BASER_CACHE_nC: + return field; + default: + return GIC_BASER_CACHE_SameAsInner; + } +} + +u64 vgic_sanitise_field(u64 reg, u64 field_mask, int field_shift, + u64 (*sanitise_fn)(u64)) +{ + u64 field =3D (reg & field_mask) >> field_shift; + + field =3D sanitise_fn(field) << field_shift; + return (reg & ~field_mask) | field; +} + +#define PROPBASER_RES0_MASK = \ + (GENMASK_ULL(63, 59) | GENMASK_ULL(55, 52) | GENMASK_ULL(6, 5)) +#define PENDBASER_RES0_MASK = \ + (BIT(63, ULL) | GENMASK_ULL(61, 59) | GENMASK_ULL(55, 52) | = \ + GENMASK_ULL(15, 12) | GENMASK_ULL(6, 0)) + +static u64 vgic_sanitise_pendbaser(u64 reg) +{ + reg =3D vgic_sanitise_field(reg, GICR_PENDBASER_SHAREABILITY_MASK, + GICR_PENDBASER_SHAREABILITY_SHIFT, + vgic_sanitise_shareability); + reg =3D vgic_sanitise_field(reg, GICR_PENDBASER_INNER_CACHEABILITY_MAS= K, + GICR_PENDBASER_INNER_CACHEABILITY_SHIFT, + vgic_sanitise_inner_cacheability); + reg =3D vgic_sanitise_field(reg, GICR_PENDBASER_OUTER_CACHEABILITY_MAS= K, + GICR_PENDBASER_OUTER_CACHEABILITY_SHIFT, + vgic_sanitise_outer_cacheability); + + reg &=3D ~PENDBASER_RES0_MASK; + + return reg; +} + +static u64 vgic_sanitise_propbaser(u64 reg) +{ + reg =3D vgic_sanitise_field(reg, GICR_PROPBASER_SHAREABILITY_MASK, + GICR_PROPBASER_SHAREABILITY_SHIFT, + vgic_sanitise_shareability); + reg =3D vgic_sanitise_field(reg, GICR_PROPBASER_INNER_CACHEABILITY_MAS= K, + GICR_PROPBASER_INNER_CACHEABILITY_SHIFT, + vgic_sanitise_inner_cacheability); + reg =3D vgic_sanitise_field(reg, GICR_PROPBASER_OUTER_CACHEABILITY_MAS= K, + GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT, + vgic_sanitise_outer_cacheability); + + reg &=3D ~PROPBASER_RES0_MASK; + return reg; +} + +static unsigned long vgic_mmio_read_propbase(struct vcpu *vcpu, paddr_t ad= dr, + unsigned int len) +{ + struct vgic_dist *dist =3D &vcpu->domain->arch.vgic; + + return extract_bytes(dist->propbaser, addr & 7, len); +} + +static void vgic_mmio_write_propbase(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + struct vgic_dist *dist =3D &vcpu->domain->arch.vgic; + u64 old_propbaser, propbaser; + + /* Storing a value with LPIs already enabled is undefined */ + if ( vgic_lpis_enabled(vcpu) ) + return; + + do + { + old_propbaser =3D dist->propbaser; + propbaser =3D old_propbaser; + propbaser =3D update_64bit_reg(propbaser, addr & 4, len, val); + propbaser =3D vgic_sanitise_propbaser(propbaser); + } while ( cmpxchg64(&dist->propbaser, old_propbaser, propbaser) !=3D + old_propbaser ); +} + +static unsigned long vgic_mmio_read_pendbase(struct vcpu *vcpu, paddr_t ad= dr, + unsigned int len) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + u64 value =3D vgic_cpu->pendbaser; + + value &=3D ~GICR_PENDBASER_PTZ; + + return extract_bytes(value, addr & 7, len); +} + +static void vgic_mmio_write_pendbase(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + u64 old_pendbaser, pendbaser; + + /* Storing a value with LPIs already enabled is undefined */ + if ( vgic_lpis_enabled(vcpu) ) + return; + + do + { + old_pendbaser =3D vgic_cpu->pendbaser; + pendbaser =3D old_pendbaser; + pendbaser =3D update_64bit_reg(pendbaser, addr & 4, len, val); + pendbaser =3D vgic_sanitise_pendbaser(pendbaser); + } while ( cmpxchg64(&vgic_cpu->pendbaser, old_pendbaser, pendbaser) != =3D + old_pendbaser ); +} + static const struct vgic_register_region vgic_v3_dist_registers[] =3D { REGISTER_DESC_WITH_LENGTH(GICD_CTLR, vgic_mmio_read_v3_misc, vgic_mmio_write_v3_misc, @@ -435,10 +599,10 @@ static const struct vgic_register_region vgic_v3_rd_r= egisters[] =3D { vgic_mmio_read_raz, vgic_mmio_write_wi, 4, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_PROPBASER, - vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + vgic_mmio_read_propbase, vgic_mmio_write_propbase, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_PENDBASER, - vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + vgic_mmio_read_pendbase, vgic_mmio_write_pendbase, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_INVLPIR, vgic_mmio_read_raz, vgic_mmio_write_wi, 8, --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621039; cv=pass; d=zohomail.com; s=zohoarc; b=ZNMGDgMYj7bmqQHb0cEJYhI0GJYSRyABg6GBkb1mqXToN6eggEAo2gwiCcZY+0x9Hxv/U1IBWgGWwko3I11BoTHE/fFcABaLINg2iJj6v3Fx0er9NO9Lf77pj0RvBxxeXNrV1Atrj/78+dR5IyNFt4uvo1n5MBr7hZJ9oh2wI7A= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621039; 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=g73T9hy9iFNbKytEIvSzNfjBM9cU9v8ai1HR4xSZP1Y=; b=mkDR3lvdWRVpWadPNAB8K/UAzdfmlcq78Z7oWiU5Okto7A7IdvrGFezY551Al5WdPJoq85e7lc7gd5iNhSVjv6+mlMyHUMnwFJtse35GAAZDlXHG10jbQmFSqOVf8sNQ9K4otHX/j6JdFgS6lDiuovYuRAJcJVB3/6MrXDQ/hig= 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 1699621039963738.484072068543; Fri, 10 Nov 2023 04:57:19 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630306.983110 (Exim 4.92) (envelope-from ) id 1r1R43-0004Aa-II; Fri, 10 Nov 2023 12:56:47 +0000 Received: by outflank-mailman (output) from mailman id 630306.983110; Fri, 10 Nov 2023 12:56: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 1r1R42-000483-Th; Fri, 10 Nov 2023 12:56:46 +0000 Received: by outflank-mailman (input) for mailman id 630306; Fri, 10 Nov 2023 12:56: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 1r1R3y-0001y1-C2 for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:42 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 95826d2d-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:38 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeei019156; Fri, 10 Nov 2023 12:56:28 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:28 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:22 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:22 +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: 95826d2d-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aHolDqAoPGsSiuOnDTQzccu5qviOzv0V6YzlUR4TiY4tVkq3B9Iw/na4pYcJ+V+IaA1iQhKotg74XO3VnN1YhqNJtNe3H3q2PrEzjYAOI7UYGiQaGV80C74qtAK3WC+G60RdQy5xAklccCEi4eUKaOPbrLzocAiwcTBrEfl3vMwNM55Qe0yzxaEVVphLbNhU6Bqe12ZP6VAMpc52swTVfVur43ub4uE6gRrMgnT/SClypbZe5rpTG3GzXWP4rB+zUHoauNwcr9CUaVMcpk06fPdW6eil/r4GT+skxAC1Rq6rc1ytfIgg+KQOhGZjNiavT54pbmUmj37Hl11owaGcXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g73T9hy9iFNbKytEIvSzNfjBM9cU9v8ai1HR4xSZP1Y=; b=HlZVRJu3sJj46pt4PI0uPQW3LUg8UDYjuOtKc4HOz6dl7uWqLrQF9TIkOXWorsM8iPIeFK3MbRoDCqP1d9EYhIxomVlmCuKTDBRFachm44bF7IyVmOsBUM6+7C46E9rzNw5sk7HXdmBEEmxPDXReuTS2xtMDmDEdR6t2x5iKdkyeJqkkxcE21fO6XQZIyLXBn3y910LAFRtQFigt5k4wuqyAgUxHos2OC2DpdVbGQUai3RkFHCd3JYp4QLmBKb3JStEwpm0omgfWP2wvp5MPd9IGe6yt9z2Z8rVcjqycxZ3uEQhiQck6yab1kuvjynxvbNlSkNSvlYn4kGzhl0Awgw== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g73T9hy9iFNbKytEIvSzNfjBM9cU9v8ai1HR4xSZP1Y=; b=rRMA99oiDhKKaPwttM9zQ+sLkt/s1uQMrdnzbSQYI4ffS5+ahiQJJ6cOmlKfzBLsi38tjcEMhjr5ZtFW08b2SJ439HCMsXH9I39ErzGYxpEX3kJhL24SyGFlosv8EjRPZqEKBV5nt+QCjJjB8UCQD+P6slb2ek+DPzro5LOzzMIf7YYRkBcc5uoV1lreUgldrQIxrH0nE0aV0GffvHn+NsDs6fbtWI3ghrTXELtkbjTBViG+DZh09r+QMpe66VA6nS63nLNQ1A2d2t9R69DBxebOLwv6yXNnjwkW9mmOIpitAwJyPNCsjm9oNf0REM+IZzY1GcimQWWGV7jB2+GvoA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 14/25] arm: new VGIC: its: Introduce ITS emulation file with MMIO framework Thread-Topic: [XEN PATCH v2 14/25] arm: new VGIC: its: Introduce ITS emulation file with MMIO framework Thread-Index: AQHaE9VNozwFjqvkNU+OWnjzi9IBUg== Date: Fri, 10 Nov 2023 12:56:20 +0000 Message-ID: <86c18cb30b6dbaff9561c2ec1def9f8389f33ebf.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: af2d4fe7-1c52-4561-1d15-08dbe1ec70e7 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 920bhS4uNTNpIhc9CFRUyV5cYMfIV0ygpaIYqlT1nwMqoMv4agT8WjvwXkBNFAmxdRczTZb5pBZJfYpPHqcSb1oryrsDJAqdzcoDpzYshY4aQs3EplbJAwvBh7kOZsC6+m27th2rWS4w6gIs6rB8xfZa7XhxlxUwsix9J73oOx0G2e3h36hTIsdT1FvhDQGVIz7oUgOER3dpk8oam22/JcXtblqFtrhMbHvlvo2pb/gB57Yjf7Y+JODBXj8kZ/xOKKVYmBReIQmmcGszK/tc5Wniz1AA2kf+XahwXgVxVYv2XBJKR8LmFHsFWcFy2z3ytVQ1CUr8qk2TSKgsIj+Z7gnugAq9/eGDwDibaPjjXJCBZR6bgAmGAay0gnt/cI3hatUz8xB+3+VTrMpav2Gux0cQuW0v+8rGLalYNrinQchcGuuLUTDtibmZ3RsjpyhEe1IJB2wTJ/NaPM8hXCouqydPdp+YJ2NzaGGqgHKMFXc5RXEVLTyeP/HNlwXzo1Pn8nBFw7nQIQGkex6WuIJAq7E81cZUNrKDwkHO3qCxnh5/TUTFj7SGta59IHL6lGReHDlt8ODcmu7kBwOnKHg5CU1eV0xq8NJO6kc4kkxGiZe6kXnpZ2u29+ToM/DNbHwo 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(30864003)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009)(2004002);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?RuRDmU2DMJZRQaAbOtyGFtNUyr/nqGWJK+hpmwHNBoYgKe/pPd0MJvFlkm?= =?iso-8859-1?Q?hJoF7X7Bgpyp4zum2HJ3kt7bqwL4c5OXQTTpcS2iyre7dRiHvv5PVM/FJs?= =?iso-8859-1?Q?wiLYM0veXZ+JGHxVyZNMHcbPY2VSaQy2iLQZAsSgIJ5u2CuRghmc+ktf/s?= =?iso-8859-1?Q?+Gic3bHAli8AUeouRBlmDvHhxizSiSKFi35oex2i4yu/EpdnDxBIOkVwVl?= =?iso-8859-1?Q?XAE74Wu8XMU7Y0ztNCXkhqoI30/Dnx6J86fMrJAl7Y95NEL6Ju077JGVS6?= =?iso-8859-1?Q?RhLctkXUuYpQAHqnDBoi/ZA9/PL51Tn6q70sDn+fryvVlXxnUbAcmlQyFa?= =?iso-8859-1?Q?Sx+p6f2n/LCp4XZz7/QUHAt17p3L92BUDjdTSskTqb8sih79ylcyaOeYYZ?= =?iso-8859-1?Q?HM/q8JMvUmsOq57mUeYQsKxXRElOoQNvnD4lZzzPXM9u7aETaBxPx4wHPS?= =?iso-8859-1?Q?qNMkSIZOy1WdG8yRyn2L6bjKgulfTt9y5K8p7oYyul8nQRwFP/MGrcII4r?= =?iso-8859-1?Q?62rf760y879+xnUjc9ROLNiUTXuSTuMm3JRPzQNzgIv0cmLJ3Xm/9kPxMa?= =?iso-8859-1?Q?fApC5+wFBM57eHKa5m6RfifhbdFQqFaLDh+xuLsfA31NAarZ7SFbQ/c5qm?= =?iso-8859-1?Q?f/lwAIzcSpzJVul7wtK4wdRgsk5GviP4XeRlsyRuNe/YlV6WliroLpuuAt?= =?iso-8859-1?Q?02a4sy3EbeehkwNbqN+/kKcbBwF2K9uRpfx9mL5zqkiKqCmEofEMNZYgSn?= =?iso-8859-1?Q?GALQ2DI9zHZ/v3Q/giFRnjCvr6oLpsGiM3xl8NU/5Kxmf1HlGTtNVqohkB?= =?iso-8859-1?Q?d0ro860KZ4fp8I9GIQAsRevPFsf4QBV6x8ZLPaQZ4gZ4q8/wOlNf1YVppV?= =?iso-8859-1?Q?+h+70DjDBxw5Ar08D+rkYuZyvDzx1493wmDLOtOQY/gs917RBbCh7h7rox?= =?iso-8859-1?Q?NgHouBMKD3jIZ+PZTa4bEyUR22zeLuJLfzvBuroQpaVZlLXKZGWDSwPhL5?= =?iso-8859-1?Q?XWQu353YI7jdwiHbu5U4uWedJivwJ2qZHOlw6N6ZfbQbFblDwOm+MfbAMp?= =?iso-8859-1?Q?UohNAgh8nJat0PXf3IffLHsx6nju/XQnszV0CH6z4y2OcJA9DrTeEwdlk5?= =?iso-8859-1?Q?q+xrTpLJbReT3LsVtH+utNRmOKn15H1KAo1Jrdiq6DA+3AcKdHJG8YhilE?= =?iso-8859-1?Q?Imz1jdnJBc+DV22kZK3s/LGgXNocMwZZIYDQmgkpEdkUUqJcXHqC1m8eLL?= =?iso-8859-1?Q?A4n8yhhinjmMgmvOvXKBJZxeN9BQ9pEEOQXwJ0czX6cF40Ukw5JXj+F+nO?= =?iso-8859-1?Q?Rq/zUOtwXPpXry5GJ+3U0d51W1IjZukSiN9UOiLm8OtmeoAtKsG1T2ncdT?= =?iso-8859-1?Q?fxcy1DqvjoeIO6pvHXp+Fy2630OJlgXUOG/gJJQ20LqO/arbx0ZJ3xsNMa?= =?iso-8859-1?Q?PTNbX0c0xjM4sR0jjA5BuI/CF/EPYBOx7A7NCLGBRMM5dpFDGQsVfVTcB1?= =?iso-8859-1?Q?u1Ms86J6xtv9KMmtFMbL+hxe3wUyOOklpf09zkMHrUnVlHbLDmhwOdvY6A?= =?iso-8859-1?Q?nKGAk4Y4nQl40+i6fjnwuPl/1p7PAsR+qrlEPli/QjAKgzaGcBDDShu8jY?= =?iso-8859-1?Q?XKB13ueg8rr2b3+EAP25vuHo3lG9Wcddx562O5TBhKtEVgDvb/cLfk3A?= =?iso-8859-1?Q?=3D=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: af2d4fe7-1c52-4561-1d15-08dbe1ec70e7 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:20.7063 (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: 8te8cfwF6UVJd/GRkDyaBtJJ+L1b8gAPYvBwwmPA4Ac7ILDOwx7gjNbGsrU5anGm691YUzyOuqus1HlgAchqKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: OH3ZP7gXEdpAkyZShRcYZXE7tLCTN1Yo X-Proofpoint-ORIG-GUID: OH3ZP7gXEdpAkyZShRcYZXE7tLCTN1Yo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=999 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621041305100001 Content-Type: text/plain; charset="utf-8" The ARM GICv3 ITS emulation code goes into a separate file, but needs to be connected to the GICv3 emulation, of which it is an option. The ITS MMIO handlers require the respective ITS pointer to be passed in, so we amend the existing VGIC MMIO framework to let it cope with that. Also we introduce the basic ITS data structure and initialize it, but don't return any success yet, as we are not yet ready for the show. Based on Linux commit 59c5ab40989afa by 59c5ab40989afa Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v3_defs.h | 3 + xen/arch/arm/include/asm/gic_v3_its.h | 1 + xen/arch/arm/include/asm/new_vgic.h | 13 ++ xen/arch/arm/vgic/vgic-its.c | 160 +++++++++++++++++++++++++ xen/arch/arm/vgic/vgic-mmio-v3.c | 52 +++++++- xen/arch/arm/vgic/vgic-mmio.c | 6 + xen/arch/arm/vgic/vgic-mmio.h | 11 ++ 7 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 xen/arch/arm/vgic/vgic-its.c diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index 1e81687818..3f1f59d1c7 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -112,6 +112,9 @@ #define GICR_NSACR (0x0E00) =20 #define GICR_CTLR_ENABLE_LPIS (1U << 0) +#define GICR_CTLR_CES (1UL << 1) +#define GICR_CTLR_IR (1UL << 2) +#define GICR_CTLR_RWP (1UL << 3) =20 #define GICR_TYPER_PLPIS (1U << 0) #define GICR_TYPER_VLPIS (1U << 1) diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index f61a37a8fa..4e857cac1a 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -35,6 +35,7 @@ #define GITS_BASER5 0x128 #define GITS_BASER6 0x130 #define GITS_BASER7 0x138 +#define GITS_IDREGS_BASE 0xffd0 #define GITS_PIDR2 GICR_PIDR2 =20 /* Register bits */ diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index b037b6cf61..ec2882dcf1 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -34,6 +34,7 @@ #define VGIC_MIN_LPI 8192 #define VGIC_V3_DIST_SIZE SZ_64K #define VGIC_V3_REDIST_SIZE (2 * SZ_64K) +#define VGIC_V3_ITS_SIZE (2 * SZ_64K) =20 #define irq_is_ppi(irq) ((irq) >=3D VGIC_NR_SGIS && (irq) < VGIC_NR_PRIVAT= E_IRQS) #define irq_is_spi(irq) ((irq) >=3D VGIC_NR_PRIVATE_IRQS && \ @@ -95,6 +96,7 @@ struct vgic_irq { enum iodev_type { IODEV_DIST, IODEV_REDIST, + IODEV_ITS, }; =20 struct vgic_redist_region { @@ -111,6 +113,16 @@ struct vgic_io_device { const struct vgic_register_region *regions; enum iodev_type iodev_type; unsigned int nr_regions; + struct vgic_its *its; +}; + +struct vgic_its { + /* The base address of the ITS control register frame */ + paddr_t vgic_its_base; + + bool enabled; + struct vgic_io_device iodev; + paddr_t doorbell_address; }; =20 struct vgic_dist { @@ -150,6 +162,7 @@ struct vgic_dist { struct vgic_io_device dist_iodev; =20 bool has_its; + struct vgic_its *its; =20 /* * Contains the attributes and gpa of the LPI configuration table. diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c new file mode 100644 index 0000000000..0ae6048456 --- /dev/null +++ b/xen/arch/arm/vgic/vgic-its.c @@ -0,0 +1,160 @@ +/* + * Imported from Linux ("new" KVM VGIC) and heavily adapted to Xen. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "vgic.h" +#include "vgic-mmio.h" + +static unsigned long its_mmio_read_raz(struct domain *d, struct vgic_its *= its, + paddr_t addr, unsigned int len) +{ + return 0; +} + +static void its_mmio_write_wi(struct domain *d, struct vgic_its *its, + paddr_t addr, unsigned int len, unsigned lon= g val) +{ + /* Ignore */ +} + +#define REGISTER_ITS_DESC(off, rd, wr, length, acc) = \ + { = \ + .reg_offset =3D off, .len =3D length, .access_flags =3D acc, .its_= read =3D rd, \ + .its_write =3D wr, = \ + } + +static struct vgic_register_region its_registers[] =3D { + REGISTER_ITS_DESC(GITS_CTLR, + its_mmio_read_raz, its_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_IIDR, + its_mmio_read_raz, its_mmio_write_wi, 4, + VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_TYPER, + its_mmio_read_raz, its_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_CBASER, + its_mmio_read_raz, its_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_CWRITER,=20 + its_mmio_read_raz, its_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_CREADR, + its_mmio_read_raz, its_mmio_write_wi, 8, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_BASER0, + its_mmio_read_raz, its_mmio_write_wi, 0x40, + VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), + REGISTER_ITS_DESC(GITS_IDREGS_BASE, + its_mmio_read_raz, its_mmio_write_wi, 0x30, + VGIC_ACCESS_32bit), +}; + +static int vgic_register_its_iodev(struct domain *d, struct vgic_its *its, + u64 addr) +{ + struct vgic_io_device *iodev =3D &its->iodev; + int ret =3D 0; + + if ( !IS_VGIC_ADDR_UNDEF(its->vgic_its_base) ) + { + ret =3D -EBUSY; + goto out; + } + + its->vgic_its_base =3D addr; + its->doorbell_address =3D addr + ITS_DOORBELL_OFFSET; + iodev->regions =3D its_registers; + iodev->nr_regions =3D ARRAY_SIZE(its_registers); + + iodev->base_fn =3D gaddr_to_gfn(its->vgic_its_base); + iodev->iodev_type =3D IODEV_ITS; + iodev->its =3D its; + register_mmio_handler(d, &vgic_io_ops, its->vgic_its_base, VGIC_V3_ITS= _SIZE, + iodev); +out: + return ret; +} + +static int vgic_its_create(struct domain *d, u64 addr) +{ + struct vgic_its *its; + + its =3D xzalloc(struct vgic_its); + if ( !its ) + return -ENOMEM; + + d->arch.vgic.its =3D its; + + its->vgic_its_base =3D VGIC_ADDR_UNDEF; + + d->arch.vgic.msis_require_devid =3D true; + d->arch.vgic.has_its =3D true; + its->enabled =3D false; + + vgic_register_its_iodev(d, its, addr); + + its->doorbell_address =3D addr + ITS_DOORBELL_OFFSET; + + return 0; +} + +/* + * For a hardware domain, this will iterate over the host ITSes + * and map one virtual ITS per host ITS at the same address. + */ +int vgic_v3_its_init_domain(struct domain *d) +{ + int ret; + + if ( is_hardware_domain(d) ) + { + struct host_its *hw_its; + + list_for_each_entry(hw_its, &host_its_list, entry) + { + /* + * For each host ITS create a virtual ITS using the same + * base and thus doorbell address. + * Use the same number of device ID and event ID bits as the h= ost. + */ + ret =3D vgic_its_create(d, hw_its->addr); + if ( ret ) + return ret; + else + d->arch.vgic.has_its =3D true; + } + } + + return 0; +} + +void vgic_v3_its_free_domain(struct domain *d) +{ + struct vgic_its *its =3D d->arch.vgic.its; + + xfree(its); + d->arch.vgic.its =3D NULL; +} diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index 2fb44cfe6a..4bf8c21203 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -22,6 +22,16 @@ #include "vgic.h" #include "vgic-mmio.h" =20 +bool vgic_has_its(struct domain *d) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + + if ( dist->version !=3D GIC_V3 ) + return false; + + return false; +} + static struct vcpu *mpidr_to_vcpu(struct domain *d, unsigned long mpidr) { struct vcpu *vcpu; @@ -381,6 +391,46 @@ static unsigned long vgic_mmio_read_v3_idregs(struct v= cpu *vcpu, paddr_t addr, return 0; } =20 +static unsigned long vgic_mmio_read_v3r_ctlr(struct vcpu *vcpu, paddr_t ad= dr, + unsigned int len) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + unsigned long val; + + val =3D atomic_read(&vgic_cpu->ctlr); + val |=3D GICR_CTLR_IR | GICR_CTLR_CES; + + return val; +} + +static void vgic_mmio_write_v3r_ctlr(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + uint32_t ctlr; + + if ( !vgic_has_its(vcpu->domain) ) + return; + + if ( !(val & GICR_CTLR_ENABLE_LPIS) ) + { + /* + * Don't disable if RWP is set, as there already an + * ongoing disable. Funky guest... + */ + ctlr =3D atomic_cmpxchg(&vgic_cpu->ctlr, GICR_CTLR_ENABLE_LPIS, + GICR_CTLR_RWP); + if ( ctlr !=3D GICR_CTLR_ENABLE_LPIS ) + return; + } + else + { + ctlr =3D atomic_cmpxchg(&vgic_cpu->ctlr, 0, GICR_CTLR_ENABLE_LPIS); + if ( ctlr !=3D 0 ) + return; + } +} + bool vgic_lpis_enabled(struct vcpu *vcpu) { struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; @@ -584,7 +634,7 @@ static const struct vgic_register_region vgic_v3_dist_r= egisters[] =3D { static const struct vgic_register_region vgic_v3_rd_registers[] =3D { /* RD_base registers */ REGISTER_DESC_WITH_LENGTH(GICR_CTLR, - vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + vgic_mmio_read_v3r_ctlr, vgic_mmio_write_v3r_ctlr, 4, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_STATUSR, vgic_mmio_read_raz, vgic_mmio_write_wi, 4, diff --git a/xen/arch/arm/vgic/vgic-mmio.c b/xen/arch/arm/vgic/vgic-mmio.c index 1c3f861887..7a28be53bc 100644 --- a/xen/arch/arm/vgic/vgic-mmio.c +++ b/xen/arch/arm/vgic/vgic-mmio.c @@ -570,6 +570,9 @@ static int dispatch_mmio_read(struct vcpu *vcpu, mmio_i= nfo_t *info, case IODEV_REDIST: data =3D region->read(iodev->redist_vcpu, addr, len); break; + case IODEV_ITS: + data =3D region->its_read(vcpu->domain, iodev->its, addr, len);; + break; } =20 memcpy(r, &data, len); @@ -598,6 +601,9 @@ static int dispatch_mmio_write(struct vcpu *vcpu, mmio_= info_t *info, case IODEV_REDIST: region->write(iodev->redist_vcpu, addr, len, data); break; + case IODEV_ITS: + region->its_write(vcpu->domain, iodev->its, addr, len, data); + break; } =20 return 1; diff --git a/xen/arch/arm/vgic/vgic-mmio.h b/xen/arch/arm/vgic/vgic-mmio.h index 3566cf237c..0a8deb46ba 100644 --- a/xen/arch/arm/vgic/vgic-mmio.h +++ b/xen/arch/arm/vgic/vgic-mmio.h @@ -21,10 +21,21 @@ struct vgic_register_region { unsigned int len; unsigned int bits_per_irq; unsigned int access_flags; + + union { unsigned long (*read)(struct vcpu *vcpu, paddr_t addr, unsigned int len); + unsigned long (*its_read)(struct domain *d, struct vgic_its *its, + paddr_t addr, unsigned int len); + }; + + union { void (*write)(struct vcpu *vcpu, paddr_t addr, unsigned int len, unsigned long val); + void (*its_write)(struct domain *d, struct vgic_its *its, + paddr_t addr, unsigned int len, + unsigned long val); + }; }; =20 extern struct mmio_handler_ops vgic_io_ops; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621041; cv=pass; d=zohomail.com; s=zohoarc; b=OjZCdMgz46P2Ys/r3yf2cUnicbU4Bw0PIRENuKYnxOxYFHVz3cPLFOW4baWTaBgJzdu6r4YN2vHDXMtN6sxFud7QCwjrkspCChv4Lm+Rlwbk9DewU7rabQJE8a/Dm9anK9eBFFgc2HhresKhlaOQQE9rB+wD5uK/BA7N1ugsgJo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621041; 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=47n0bB5G3TmN3uYlmHnSquD6nIz7tCxZvB5mgkD08G8=; b=BTzHZutkjurswreCHAONw62aJuJ9PVqt9UFnlsCGCme0Ecsz/4Jd24ioW+fmAz2GKvDVD082T2lx/mxL78J8lN6A2nD6lrXp076h3od7x+wir5bWwtvBFVzqJRpfN8++tt0UE/JNJzpE0dc6gQLZGpc1+3jGQJJj720auYCSxxU= 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 1699621041206179.76800773221862; Fri, 10 Nov 2023 04:57:21 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630307.983133 (Exim 4.92) (envelope-from ) id 1r1R46-0004sD-3Z; Fri, 10 Nov 2023 12:56:50 +0000 Received: by outflank-mailman (output) from mailman id 630307.983133; Fri, 10 Nov 2023 12:56:49 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R45-0004oA-7n; Fri, 10 Nov 2023 12:56:49 +0000 Received: by outflank-mailman (input) for mailman id 630307; Fri, 10 Nov 2023 12:56: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 1r1R3z-0001y1-CI for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:43 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 95c9fe29-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:38 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeej019156; Fri, 10 Nov 2023 12:56:29 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:29 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:23 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:23 +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: 95c9fe29-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Rv5kwpzvWw0XEwFyhoIpk7RN9jo9m3jLv4QF0shKKK8EUbHsSfCtYZXX1szT1Nbn2TOoMHQ83w4NxD99RJYOvbFQf4ofePrWxegooPs2gXMQqLYhbD0VJe+j6LquXYLuJ/LSZz5zzH37jzGLHCfq3WzQ20yJeBEVLv/Huk6Pj22QDeGamWmTGzEJ3ZU/yNpM22BhOanZN/W1TrZWMluWpANHna4ENYXpyixapGnPzrfUiOiKnQnM8jKa+IvxGvYnvcXbol3m5Rbiyf844JqWlVFmVaZqPf/auEM4FjegiRxaRUVBB3ar74b7GEHXqoLR02OsaqiEB4FIUfQiy8WKag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=47n0bB5G3TmN3uYlmHnSquD6nIz7tCxZvB5mgkD08G8=; b=EItLHzpLvFaGBlgAA09EQzcliE0UdEaS6MrJrMrYhHZyUoFlY3nvcYKc7dcoQFGnv+YOU9Fl2gdgkuzFR3hUGNB+XNs1dX5H9Oc5nGrtXEGqoG9pJAckq1/lfJFvzqU3ibMh6z1urzpZgihmU7u3QCt8aHeQ7MNMTdEWCxp56qmvWbPwhg60yLwcOL/nxyLQpOz9BZIaLPj802OhVbajx9PbPNqGJrtnSaC2O2UTnuzes/R/cZkCcs/G+KFWgPSMK6TtFtL38vjO0v0mjcb2f0XqWUrFOc60KSiwU+4+9fHmsXFrdC1YTsDKvrZojB0MohwjKftNoI4vMppwXqPQIA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=47n0bB5G3TmN3uYlmHnSquD6nIz7tCxZvB5mgkD08G8=; b=Gfu8kWR9/aQ/SiaePsN3t57R9QUmko6Ek1w03uuOhZbU4YNAasbzGnMQbXsyQbLQOMly4iFoYPykce6up0tM/trCDtEBs9+CLFFsW+vVk/88p9Ce7Hjpm3lnwTDp+ZuKt3lTrSg0TZqNkmQM1LM49M0te9M95gXlFyiFH2R6sdWm5vqilx0GTp+fQf77M3ILNJoqp7GOwFoaoE3KyxXi/80TtZhNAyF8pEkS5+V6MJFVubwmN3RpPQzwnTo7vzSUrj9z8uvq26Fr2kYcaNkJMl2Fcac+gWlvcxb11mrkwAxAG1xR2gm72xV6gnRnv2WNAPAjia/wk9N7JlQfT4Vhzw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 15/25] arm: new VGIC: its: Introduce ITS device list Thread-Topic: [XEN PATCH v2 15/25] arm: new VGIC: its: Introduce ITS device list Thread-Index: AQHaE9VNnykDJMuRjky7h0IUhySwAQ== Date: Fri, 10 Nov 2023 12:56:21 +0000 Message-ID: <0bbd5eb62605243e1ea437e8ca113f8851b1e49e.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: fe251b08-cd6c-4d7e-2eb7-08dbe1ec7119 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rm8YD+fj78vuOQklbNVMmVV1xtnfdddBvvt9deEL5N3kF7VVeqYXU3M209qQtFrgzuTgYOMdJqhzvrtj18dB1zOmYylbDps635/iGYQBB2GimVXJY441lma7WWwy3LT5VcMhd+uE+d5B62OEu6dbpkEjvMF0pQrWPtAvErJLaKWrvPGUlRwoVkfSxgZC0FqOLDANoctkSsE/XL7/NPesBzkfvja4lOPw/hXXgpBPevcRgz8dqwZbZHVKnek53JKlIBpNBkMt3Bm78MHZdRa0yBpMKJz3XyQp6LiiAJNsUhukZDXIe7m6gpLJ7vnTMPKTlpz2h2IXa50pAB6I3ZJOZ94B8ww78/P+dtkHYz6HJHBM8VtVNpPsZ92XBo5pUxDMxNW2Pf+2S+MFmjES3hJ+qwP8Nj4UcLb2B08MTiokAEBjA/UpF0UgWJJK6E3zG4YjriUQKn3Lqv/6dy775+Pu89cbE9SnoLjYxSYLI3IeyEIRwplFFKOGntiJ6omg76cbLMrOP7KdejDDQTH1V8f0+zb/+FRGcoqb9P/sdEexxNio/1TNY1U2l+6n+c26anHNs5BQ5faJWgolZBokR8E37K8tI7B/WfO2OcIkK4R9vj3bNHxgY8u92qcoMP72A1Vq 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?1XIAeqnq/mUGWl82vNpI9HCVs+nBRHO2WTl6V81eLR8cRk3LuNBhjBXESQ?= =?iso-8859-1?Q?qY//rG9tKe1FyTk6Kh3/iQfeE7llo1+XbX+tJTCLHsELtIFbSBX8DgIhJJ?= =?iso-8859-1?Q?KXQc3FtbgqmtjDGtWONK1SF4BdHE/cgF9Zj/JTyDN4j/NnZ2W02NYvapen?= =?iso-8859-1?Q?CcFRdPPSZ18qGiIpqwS+cZ0a3XoUVRfmZlTSZyUOMLsiM7S0w5GFDs39LK?= =?iso-8859-1?Q?h9DZyyGGJmMHDZjYEkWEbhT5lm6Asw3nzGROvVTUSkJlRc/TrVV96l4qKn?= =?iso-8859-1?Q?uvgkndUAnXCHjniSOXLddsUITYTnAbikjMGKpUyJevlBKmixEVBOOROUJ+?= =?iso-8859-1?Q?ewWbsdPAzRcUBxwJ6qvwEJghK+ng4vC0Zq2e+U19e6eR15YqlmM4FQ+fwb?= =?iso-8859-1?Q?Su4kwCFiogrebUocyD4UpHrRizuikB6PBrDHGvuOv/w5vD69TpP66WHSIv?= =?iso-8859-1?Q?cdi8eVsKpxDNaT3k5DVBNwd8ggS16WLfGGIQRqylMUlRozLKX8N5v0Lrya?= =?iso-8859-1?Q?sEcuUO6ztK0/jYSilwfZowmlHsuz7TsrTiRmYO2gMzYlPrv/hfe372jU2t?= =?iso-8859-1?Q?VGaciPuUkr8QghTwggYia3EMlcO5+hO+fYxIG0eK9HKtCyopVqifFSRKGr?= =?iso-8859-1?Q?txLM0oY63DGC6IFejzftSPlAP7LUUNZWQSN9y5Uqfg3UoKsavUVM+9DOW0?= =?iso-8859-1?Q?MtTbXgr1G5XUDHtBkjsV1Tx9w+k+pEORd6I5CyAp3fwRUD+AtVdP3lcPP6?= =?iso-8859-1?Q?Zgako1QcgL8S8MmNnzOy/Y07et6U5ObAwP9zyMkiFBjhedu0G2Gar2qWAi?= =?iso-8859-1?Q?7ZeErc33ZWnG4/MSa2S/Q3oH27oafBR0o2HnKsdeW1vxi2reO6tjoVpwu0?= =?iso-8859-1?Q?fTUWDJaD6G0lLklztifm6dMgxNvV5qmhZ3zsz1O6Etn62OchvCwEiIxJ+7?= =?iso-8859-1?Q?MaUncAIqoLu+CQww3NPRPMylHm40Z1yn+s9Azwou/YfDs3JUwv1iACOh/6?= =?iso-8859-1?Q?RpLxKPMl/x+KhFU6GkB57NhysrMobaFgD5Ww54ZgOHscXRzReg4WVGxhVt?= =?iso-8859-1?Q?8OjnZ+gc1AlM0tACD/0qN2x6oFkXwJGvgJIxHLokWYKU+9eLam1VfbM8hC?= =?iso-8859-1?Q?3NzK5l1jxkZ+MN9VS8kUFS5om01ALCoEkyxv9DL/e35JqBPSOOkJDNZSyI?= =?iso-8859-1?Q?8Yl/tSaqdpcqXVjF2FQhrwBbsDmTH0NQM3Ynyg+pcVTSOMxKCyMKuHbNf3?= =?iso-8859-1?Q?YRnTVUP+rrMwQnhsXfoS8RwfgxUXhVf7sXxxEWX+YNLsz7ZPGGUZNNhJA7?= =?iso-8859-1?Q?kck4SvyMqn17eodNkS49Qr4k5SWpK5EbWFUsUiA9AqlI3BWAKEQ5CmOE2y?= =?iso-8859-1?Q?w2eGnxoXTCpUbpjPX0DblFLQime72B2EHtz+TiSDt5FlIXCSqG5cKsvqrz?= =?iso-8859-1?Q?+9tURNFePPqRfvJjIoTiMlBWRB08RYfqQAHByJki8Vu3aAEsWmvGnB80PQ?= =?iso-8859-1?Q?oBSMmGTx772AnwU2VHn3QYxu9HEYS3cm6lM2x+QAZRCixo94C+M4kvK0mS?= =?iso-8859-1?Q?flRlEAW1zT9eaVxyTtRTEt3oC++dsyqUZUF6hJT4qWLI6m+nTgKgBmmGHG?= =?iso-8859-1?Q?S3rHC32KZaVYHQNyWbog2dpsXelMhXUdUPTqWCTnvQe35L1OMuJq5O6g?= =?iso-8859-1?Q?=3D=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: fe251b08-cd6c-4d7e-2eb7-08dbe1ec7119 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:21.0861 (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: Aapjjt0FJULk8po+iNdaDZdKTzbnq/ZZt/eta47B4f86PSPreICQeChE32YhA1IYAiLaIT2jtDoLgXO+J+VPtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: 5-rVATPLu5VKnS0Jwqq74gdizvQZxjDB X-Proofpoint-ORIG-GUID: 5-rVATPLu5VKnS0Jwqq74gdizvQZxjDB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=993 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621043202100006 Content-Type: text/plain; charset="utf-8" Add the vgic_its_device structure and the list of devices to the vgic_its. Implement the functions to allocate, free, add and delete the device from the list. Add the function to find the device in the list by the device id. And make them avaliable to the HW ITS code. Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/new_vgic.h | 27 +++++++++ xen/arch/arm/vgic/vgic-its.c | 86 +++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index ec2882dcf1..00a5557921 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -122,9 +122,26 @@ struct vgic_its { =20 bool enabled; struct vgic_io_device iodev; + struct list_head device_list; paddr_t doorbell_address; }; =20 +struct vgic_its_device { + struct list_head dev_list; + struct domain *d; + + /* the head for the list of ITTEs */ + struct list_head itt_head; + u32 num_eventid_bits; + void* itt_addr; + struct host_its *hw_its; + 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 vgic_dist { bool ready; bool initialized; @@ -171,6 +188,7 @@ struct vgic_dist { * GICv3 spec: 6.1.2 "LPI Configuration tables" */ uint64_t propbaser; + spinlock_t its_devices_lock; /* Protects the its_devices list= */ =20 /* Protects the lpi_list and the count value below. */ spinlock_t lpi_list_lock; @@ -227,6 +245,15 @@ static inline paddr_t vgic_dist_base(const struct vgic= _dist *vgic) return vgic->dbase; } =20 +#ifdef CONFIG_HAS_ITS +struct vgic_its_device *vgic_its_alloc_device(int nr_events); +void vgic_its_free_device(struct vgic_its_device *its_dev); +int vgic_its_add_device(struct domain *d, struct vgic_its_device *its_dev); +void vgic_its_delete_device(struct domain *d, struct vgic_its_device *its_= dev); +struct vgic_its_device* vgic_its_get_device(struct domain *d, paddr_t vdoo= rbell, + uint32_t vdevid); +#endif + #endif /* __ASM_ARM_NEW_VGIC_H */ =20 /* diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 0ae6048456..3eceadaa79 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -33,6 +33,92 @@ static unsigned long its_mmio_read_raz(struct domain *d,= struct vgic_its *its, return 0; } =20 +/* + * Find and returns a device in the device table for an ITS. + * Must be called with the its_devices_lock mutex held. + */ +static struct vgic_its_device *find_its_device(struct vgic_its *its, u32 d= evice_id) +{ + struct vgic_its_device *device; + + list_for_each_entry(device, &its->device_list, dev_list) + if ( device_id =3D=3D device->guest_devid ) + return device; + + return NULL; +} + +/* Requires the its_devices_lock to be held. */ +void vgic_its_free_device(struct vgic_its_device *device) +{ + struct domain *d =3D device->d; + =20 + BUG_ON(!d); + list_del(&device->dev_list); + xfree(device); +} + +/* Must be called with its_devices_lock mutex held */ +struct vgic_its_device* vgic_its_get_device(struct domain *d, paddr_t vdoo= rbell, + uint32_t vdevid) +{ + struct vgic_its *its =3D d->arch.vgic.its; + struct vgic_its_device *device; + + if ( !its ) + return NULL; + + device =3D find_its_device(its, vdevid); + if ( !device ) + return NULL; + + return device; +} + +/* Must be called with its_devices_lock mutex held */ +struct vgic_its_device *vgic_its_alloc_device(int nr_events) +{ + struct vgic_its_device *device; + + device =3D xzalloc(struct vgic_its_device); + if ( !device ) + goto fail; + + INIT_LIST_HEAD(&device->itt_head); + + device->host_lpi_blocks =3D xzalloc_array(uint32_t, nr_events); + if ( !device->host_lpi_blocks ) + goto fail_host_lpi; + + return device; +fail_host_lpi: + xfree(device); +fail: + return NULL; +} + +/* Must be called with its_devices_lock mutex held */ +int vgic_its_add_device(struct domain *d, struct vgic_its_device *its_dev) +{ + struct vgic_its *its =3D d->arch.vgic.its; + if ( !its ) + return -EINVAL; + + list_add_tail(&its_dev->dev_list, &its->device_list); + + return 0; +} + +/* Must be called with its_devices_lock mutex held */ +void vgic_its_delete_device(struct domain *d, struct vgic_its_device *its_= dev) +{ + struct vgic_its *its =3D d->arch.vgic.its; + if ( !its ) + return; + + list_del(&its_dev->dev_list); +} + static void its_mmio_write_wi(struct domain *d, struct vgic_its *its, paddr_t addr, unsigned int len, unsigned lon= g val) { --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621047; cv=pass; d=zohomail.com; s=zohoarc; b=LEPSs1zQeSg1GAgxIen/FotjpasEm0NOJrPOHtxhGfZ0m59MBs2TQdmobm0FZ1WqtsRfF8YyjK3aK5iMSK3oxi9VyA5aIdLvt0w7uOxAqOevbmU32LDam7QWfCNQjZJ0bPpeOWd/W1epFhA/7oL8wRkulFoPTLQV3GatscrckpI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621047; 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=9vJ5deanoQVE0pywwZGqhgsEzmKwhzWXrEeV9acFX4w=; b=DcL5xisxxw0DXUPh5ZffrVMqRqe5+eZ0bxd3tYAKw2AIiCkxkgyXHelXan1l7w4NrDevARCG7UqElM2pltpGlO/8elwWgHvKJLPh+unRxbRRd1jgKDzTebdpxf5T4h3/RwhJ0fQAcWaUUk1W6CIXHuYmhcf9ivJIGF55TxzUxqg= 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 1699621047289298.15484207095415; Fri, 10 Nov 2023 04:57:27 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630308.983120 (Exim 4.92) (envelope-from ) id 1r1R44-0004PX-8g; Fri, 10 Nov 2023 12:56:48 +0000 Received: by outflank-mailman (output) from mailman id 630308.983120; Fri, 10 Nov 2023 12:56: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 1r1R43-0004Ln-Om; Fri, 10 Nov 2023 12:56:47 +0000 Received: by outflank-mailman (input) for mailman id 630308; Fri, 10 Nov 2023 12:56:43 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3z-0001y0-6B for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:43 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 9648dd55-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:39 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvg025691; Fri, 10 Nov 2023 12:56:30 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:30 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:23 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:23 +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: 9648dd55-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jSrOon4KwwEp4TCYidizdf9FwQJjtXY/J2xdVBpfYz5vrlmmHGtEEKyJZRBh8f31MrRczbExVzzEKa8VK77/3B4qOwAnnbt2fCH8tBDuPFbGzobfZ5z7MZLpKFUk7eGk++Du6hd3dqukdNDwTA16Sn8Dw2glMUuL/qQ6+KadTneh3jQx1hBfOgWNKJ0WYzogaQv1xtxVyPaJcj0W1inrzKRihby0g2Q92o9iMQg2H7gaWxNFs3hQ1OWHaoA5ni0J07Rq6eO2/oWsDIK2oKYoPReM7ucgRvuk3aU+WXwVBO4VPedW14vS9d9D8MobiQjXZNATZMsHJdSRfmIXN1NbQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9vJ5deanoQVE0pywwZGqhgsEzmKwhzWXrEeV9acFX4w=; b=JYPTtVt/bNZYxHkKlROgp/JmzXkVt0b4GVggy+/2Z/pkXmN+S0gIdczfvQ9SA3Znu0VEbvztkgtXjNJwytYbLQme1+TAv3EL9afBpYbju5/hMPXkaIMA8PZmDwxa8xYIZKzGfvyg6fYX+gsAE+HYDrpcDeIRJt46cF85syIcTsnXfnToVbW1z44vyQAX2OMLpeHd0fVB9F7Fo8gb/vBZ51Llgny53qaC7wSr6TxB/ycvEoMRY7Po1f1EN39Lmymgv8Ta/0NG6lt1gsJql+Rj1TCGcleR5Myj/WQvDoZtR42KEWthtla9n+27LyUi1CmXOTy0FnS4AHHd9SmG2hCa9Q== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9vJ5deanoQVE0pywwZGqhgsEzmKwhzWXrEeV9acFX4w=; b=WTHs2uChSEBGrlkn3aGajdBHWSLN6SOmx8gw0utyBWWBRymUYuUlojuvBgMoRbqcxC0uqt9Eu8oZqt7i8nZF4VK8XIIPta7ZGSqZVfVfITlluDQZuQ5h7GtZdKaHPGn4XuS/J0akxwRmat/B3njRvmN7UzohwzjPQliHnTyTIbNqtGKRPCE/yzdKcw9NIuzvv+hnHQGZvIAdihmhp0FkD+dyRMkJEjML+ZHcx6Aanc9IRPZJCwyNN51RS/pGGBTFp+u35QhlGt6VTsMG5INBb8zCR8fNOKX0Vv3knQsqFqA1umJlr96EAyxSK71sbpt3Kg+jK8FIjce9HK1eeZUSaQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 16/25] arm: new VGIC: its: Implement basic ITS register handlers Thread-Topic: [XEN PATCH v2 16/25] arm: new VGIC: its: Implement basic ITS register handlers Thread-Index: AQHaE9VNHux7NBgFFEy5VNobPwbK2A== Date: Fri, 10 Nov 2023 12:56:21 +0000 Message-ID: <5944f5e520cc7de554320d455f05f42090f7075e.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: f5908b83-222f-4748-a28d-08dbe1ec714d x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: NcgaXE50IdvPkO4fQYspKwtP4eeGp7sD/j96ERlbSWY8wBqbIfVfCOIyJyHehvycuRflDTInTmaQo5T2Jkxw2sWWOXP59Qp0MXuOwFAxuKYfVPxdV4rIxeYilYlCkzc3U6R4PgRnl6eFH5G0Qfp9pexq/7Ef7z8UZxut7m64dkp3G5yrHjzmB83pomZ31IVEwOd7jfRhlaDmIhqIynnAjXwdiVPAo/PjuyyfeX3JAH6vPu1qL3Dj41DG0EFXyKr/5Z3GXqM60z8iqMbS+abGhkoiwWipov3N6kKQk3MiBkTj6+9bmWTd8BbTZIlcRgCcWKhH0LtcgVr1f0dPTUt+YZ9tM18CGcF6OLc4YO8gVx0ZxHJd71lYDTmKDxUijayCrN5nvOUivx2c3PHYy4Bd8GCLLsyyJc0UyooYRQ10YzUnEinHNh+vPiu35ihQmGUXiF3nC96Ew0aWzHn61nPztsyUF7Ajl7WE/Vx809mxztgJ/qBXoViZ4vha9xntbPvkVqkpFvwJczRdnj6lJ/Q2gcH9g4mnFjKtV0G/e7q26vNnrHLqgfw1VJix9hLUQpy/pksR6cgZ9TBiEdYleCVhAW3qdbFWN6GaVfij7sM57/GQAC422YtlPL1HrO0c+cj/ 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(30864003)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?Ql0uZS8Q/kJzzx5RFJeFQ/QXWCg2aT8lRZ6Swqdf57YIwVkqnwsZ6K3nst?= =?iso-8859-1?Q?Xwxn9e9CywbgY2wrrxNpnXsH/KuEEUEy9woGJXIdK7f4c7QPZJdAy68A16?= =?iso-8859-1?Q?MiUjnZI/V27unFAuKcKzZmhc73omIpv3Q2ae3KOqNusuyt8snaC4YYOj6T?= =?iso-8859-1?Q?54sPXyCVxHsvK41idg+Bk+2a4RWF2w1l+/xB5z15uCnVvjbqjxEDvyjwMJ?= =?iso-8859-1?Q?4IiscfxB4QeYSgOOf9ArMwhAxT2T/XqS8J0EcCiEmXf3C3pFYUXEy0FVzF?= =?iso-8859-1?Q?uKv5FKJDl3kn90bpteFM4Y2xJFJfy3Oq7qkG5F+CulOxhk4o7MiiW9q+EH?= =?iso-8859-1?Q?KUWhGX30TcKKSIvWyO5utEhsyzG1kEvmDFue5B8MpQ6d7+GUP0iukxRMrE?= =?iso-8859-1?Q?55vnjSymx0CIAEluu7urhmig8UEarnlxhW9rznrNwpSMcUZ0zL1Hbrf9of?= =?iso-8859-1?Q?07eFu1vziA1URx9PQhzm2S7zqsE03749DuCf8biXe5XmRFtWSxr5YSESLP?= =?iso-8859-1?Q?rVEFasQuOtoUYgcCU8SY3RfBMrErTKaprdjthPPRUtA+8c/qQJxWHyA2df?= =?iso-8859-1?Q?38cfRtEkPlLNKfvlaYS2avXCeLxcfQiEE+66fS00xtrTqfhZEkpeKdtWFQ?= =?iso-8859-1?Q?rEMw5de9kZV9UumQ0xDJJFjA3FL2uyL3omZ+fAYRALi2wU2qvSgv3E8Euc?= =?iso-8859-1?Q?sJadLnG6j7tLUZIZifB/KlFKoX8PETrFflB0gRnae6gHdiPmlnQOIadpZV?= =?iso-8859-1?Q?7kERnN5SYGCHRnlr6voQn3OhlY+jrTDzJ1lnvp4V1sPQFmxvUZkY21YU7W?= =?iso-8859-1?Q?/9ZxF/Gi6Tca1GxdHhOGWBO6nGqssS7kQvpmGe0CqmW5EjP5HTeE7ed7qX?= =?iso-8859-1?Q?V+2/Fks5NDeTSEJ86nddZpSrz86iTfFifg9ac4hT7DUAAWUiN7hIKTTboW?= =?iso-8859-1?Q?9kYAHQbFso65mu2Fxm7Q6WcZMOFn2Z1AwvLykEaVyP1DkeyhwoQWi1aw36?= =?iso-8859-1?Q?pESqSDAXAox8x4H1bF6NTzay/FMqgIZk7DKlwaTHQXeEPOvnKomj6Zr2Ve?= =?iso-8859-1?Q?RK2fWBIUPfYgh0g1/h5RKReRaZ3P8st1RIkcy0PfFWEYS2g9Ji/4z8kJvp?= =?iso-8859-1?Q?CM+hKNcDLSLro0kbuRAW9Nc8n12J2mvJy1yjwdAOhjbXr1so5J3DpeOb3/?= =?iso-8859-1?Q?eGJWSsRS8QFYQk6Byq+EMhJfGDkWxOIfVSbLrWV5ZnCpJeegeDSpGVs/Tp?= =?iso-8859-1?Q?1uJu/n2xhfFy2WcTU/y3DjQ8QA+vIatypa54dbmyqlGGEJBXDE33PlOq/b?= =?iso-8859-1?Q?x/UvoUMDUYEsCZMErdvYKWKVkIKT+KrCqniGHSvADRu/qaLmEGmpUGKKlt?= =?iso-8859-1?Q?wLeM+D5rPOCqpShPqm8JKJzMEEDoRBi2fjwT6fUxupfupdR1MFSSLOoDCQ?= =?iso-8859-1?Q?WGl5csruU2R2YgvITvj/oU7zUyzgRI5xxiW2CT8u+6c1RKsc96SZ4GZtHj?= =?iso-8859-1?Q?zPwLe1fQqqn5HO86wSr0gpmMqqIA5937jYpxZmh2B/E89fcVMAK1fWigao?= =?iso-8859-1?Q?jkKcdMY8NRXxmoLzOuMZtMumkyT2HXiKsJU0/0uA37kwSqMvBcPiF7XTjh?= =?iso-8859-1?Q?27AxGdXHRgXFJ1a1Ekqf9DoNYfHptQQens3Yhfcksrpg0ZhnfIqSBQUA?= =?iso-8859-1?Q?=3D=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: f5908b83-222f-4748-a28d-08dbe1ec714d X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:21.4436 (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: V1NOEhsKqoRJ27pwkXVU5l6AhD79EdWxXGFYXUz61dwZbf6jGEjt9FF8IUsu2kOET/Y3imKShYVzCpJMaNR+Pw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: o2Jws51yVk5ZDJ5p_K6688AVePtAahNO X-Proofpoint-GUID: o2Jws51yVk5ZDJ5p_K6688AVePtAahNO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=999 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621049289100003 Content-Type: text/plain; charset="utf-8" Add emulation for some basic MMIO registers used in the ITS emulation. This includes: - GITS_{CTLR,TYPER,IIDR} - ID registers - GITS_{CBASER,CREADR,CWRITER} (which implement the ITS command buffer handling) - GITS_BASER The registers holding base addresses and attributes are sanitised before storing them. Base on Linux commit 424c33830f53f2 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v3_defs.h | 4 + xen/arch/arm/include/asm/gic_v3_its.h | 60 ++++ xen/arch/arm/include/asm/new_vgic.h | 18 + xen/arch/arm/vgic/vgic-its.c | 465 ++++++++++++++++++++++++- xen/arch/arm/vgic/vgic-mmio.h | 7 + xen/arch/arm/vgic/vgic.h | 5 + 6 files changed, 546 insertions(+), 13 deletions(-) diff --git a/xen/arch/arm/include/asm/gic_v3_defs.h b/xen/arch/arm/include/= asm/gic_v3_defs.h index 3f1f59d1c7..e4e4696de3 100644 --- a/xen/arch/arm/include/asm/gic_v3_defs.h +++ b/xen/arch/arm/include/asm/gic_v3_defs.h @@ -138,7 +138,11 @@ #define GIC_BASER_NonShareable 0ULL #define GIC_BASER_InnerShareable 1ULL #define GIC_BASER_OuterShareable 2ULL +#define GIC_BASER_SHAREABILITY_MASK 3ULL =20 +#define GICR_PROPBASER_IDBITS_MASK (0x1f) +#define GICR_PROPBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 12)) +#define GICR_PENDBASER_ADDRESS(x) ((x) & GENMASK_ULL(51, 16)) #define GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT 56 #define GICR_PROPBASER_OUTER_CACHEABILITY_MASK \ (7ULL << GICR_PROPBASER_OUTER_CACHEABILITY_SHIFT) diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index 4e857cac1a..b408441c6e 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -36,7 +36,16 @@ #define GITS_BASER6 0x130 #define GITS_BASER7 0x138 #define GITS_IDREGS_BASE 0xffd0 +#define GITS_PIDR0 0xffe0 +#define GITS_PIDR1 0xffe4 #define GITS_PIDR2 GICR_PIDR2 +#define GITS_PIDR4 0xffd0 +#define GITS_CIDR0 0xfff0 +#define GITS_CIDR1 0xfff4 +#define GITS_CIDR2 0xfff8 +#define GITS_CIDR3 0xfffc + +#define GITS_TRANSLATER 0x10040 =20 /* Register bits */ #define GITS_VALID_BIT BIT(63, UL) @@ -50,6 +59,11 @@ #define GITS_TYPER_DEVICE_ID_BITS(r) ((((r) & GITS_TYPER_DEVIDS_MASK) >= > \ GITS_TYPER_DEVIDS_SHIFT) = + 1) =20 +#define GITS_IIDR_REV_SHIFT 12 +#define GITS_IIDR_REV_MASK (0xf << GITS_IIDR_REV_SHIFT) +#define GITS_IIDR_REV(r) (((r) >> GITS_IIDR_REV_SHIFT) & 0x= f) +#define GITS_IIDR_PRODUCTID_SHIFT 24 + #define GITS_TYPER_IDBITS_SHIFT 8 #define GITS_TYPER_IDBITS_MASK (0x1fUL << GITS_TYPER_IDBITS_SHIFT) #define GITS_TYPER_EVENT_ID_BITS(r) ((((r) & GITS_TYPER_IDBITS_MASK) >= > \ @@ -61,10 +75,12 @@ GITS_TYPER_ITT_SIZE_SHIFT= ) + 1) #define GITS_TYPER_PHYSICAL (1U << 0) =20 +#define GITS_BASER_VALID (1ULL << 63) #define GITS_BASER_INDIRECT BIT(62, UL) #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(r) (((r) >> GITS_BASER_TYPE_SHIFT) & = 7) #define GITS_BASER_OUTER_CACHEABILITY_SHIFT 53 #define GITS_BASER_TYPE_NONE 0UL #define GITS_BASER_TYPE_DEVICE 1UL @@ -77,6 +93,7 @@ #define GITS_BASER_ENTRY_SIZE_SHIFT 48 #define GITS_BASER_ENTRY_SIZE(reg) \ ((((reg) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) += 1) +#define GITS_BASER_ENTRY_SIZE_MASK GENMASK_ULL(52, 48) #define GITS_BASER_SHAREABILITY_SHIFT 10 #define GITS_BASER_PAGE_SIZE_SHIFT 8 #define GITS_BASER_SIZE_MASK 0xff @@ -84,7 +101,48 @@ #define GITS_BASER_OUTER_CACHEABILITY_MASK (0x7ULL << GITS_BASER_OUTER_C= ACHEABILITY_SHIFT) #define GITS_BASER_INNER_CACHEABILITY_MASK (0x7ULL << GITS_BASER_INNER_C= ACHEABILITY_SHIFT) =20 +#define GIC_PAGE_SIZE_4K 0ULL +#define GIC_PAGE_SIZE_16K 1ULL +#define GIC_PAGE_SIZE_64K 2ULL +#define GIC_PAGE_SIZE_MASK 3ULL + +#define __GITS_BASER_PSZ(sz) \ + (GIC_PAGE_SIZE_ ## sz << GITS_BASER_PAGE_SIZE_SHIFT) +#define GITS_BASER_PAGE_SIZE_4K __GITS_BASER_PSZ(4K) +#define GITS_BASER_PAGE_SIZE_16K __GITS_BASER_PSZ(16K) +#define GITS_BASER_PAGE_SIZE_64K __GITS_BASER_PSZ(64K) +#define GITS_BASER_PAGE_SIZE_MASK __GITS_BASER_PSZ(MASK) + +#define GITS_BASER_NR_PAGES(r) (((r) & 0xff) + 1) + +#define GITS_BASER_PHYS_52_to_48(phys) \ + (((phys) & GENMASK_ULL(47, 16)) | (((phys) >> 48) & 0xf) << 12) +#define GITS_BASER_ADDR_48_to_52(baser) \ + (((baser) & GENMASK_ULL(47, 16)) | (((baser) >> 12) & 0xf) << 48) + +#define GIC_BASER_CACHEABILITY(reg, inner_outer, type) \ + (GIC_BASER_CACHE_##type << reg##_##inner_outer##_CACHEABILITY_SHIFT) + +#define GIC_BASER_SHAREABILITY(reg, type) \ + (GIC_BASER_##type << reg##_SHAREABILITY_SHIFT) + #define GITS_CBASER_SIZE_MASK 0xff +#define GITS_CBASER_VALID (1ULL << 63) +#define GITS_CBASER_SHAREABILITY_SHIFT (10) +#define GITS_CBASER_INNER_CACHEABILITY_SHIFT (59) +#define GITS_CBASER_OUTER_CACHEABILITY_SHIFT (53) +#define GITS_CBASER_SHAREABILITY_MASK \ + GIC_BASER_SHAREABILITY(GITS_CBASER, SHAREABILITY_MASK) +#define GITS_CBASER_INNER_CACHEABILITY_MASK \ + GIC_BASER_CACHEABILITY(GITS_CBASER, INNER, MASK) +#define GITS_CBASER_OUTER_CACHEABILITY_MASK \ + GIC_BASER_CACHEABILITY(GITS_CBASER, OUTER, MASK) +#define GITS_CBASER_CACHEABILITY_MASK GITS_CBASER_INNER_CACHEABILITY_MASK + +#define GITS_CBASER_InnerShareable \ + GIC_BASER_SHAREABILITY(GITS_CBASER, InnerShareable) + +#define GITS_CBASER_ADDRESS(cbaser) ((cbaser) & GENMASK_ULL(51, 12)) =20 /* ITS command definitions */ #define ITS_CMD_SIZE 32 @@ -104,6 +162,8 @@ =20 #define ITS_DOORBELL_OFFSET 0x10040 #define GICV3_ITS_SIZE SZ_128K +#define ITS_TRANSLATION_OFFSET 0x10000 +#define GIC_ENCODE_SZ(n, w) (((unsigned long)(n) - 1) & GENMASK_ULL(((w) -= 1), 0)) =20 #include #include diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index 00a5557921..3048f39844 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -122,7 +122,25 @@ struct vgic_its { =20 bool enabled; struct vgic_io_device iodev; + struct domain *domain; + + /* These registers correspond to GITS_BASER{0,1} */ + u64 baser_device_table; + u64 baser_coll_table; + + /* Protects the command queue */ + struct spinlock cmd_lock; + u64 cbaser; + u32 creadr; + u32 cwriter; + + /* migration ABI revision in use */ + u32 abi_rev; + + /* Protects the device and collection lists */ + struct spinlock its_lock; struct list_head device_list; + struct list_head collection_list; paddr_t doorbell_address; }; =20 diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 3eceadaa79..5e94f0144d 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -27,11 +27,22 @@ #include "vgic.h" #include "vgic-mmio.h" =20 -static unsigned long its_mmio_read_raz(struct domain *d, struct vgic_its *= its, - paddr_t addr, unsigned int len) -{ - return 0; -} +#define COLLECTION_NOT_MAPPED ((u32)~0) + +struct its_collection { + struct list_head coll_list; + + u32 collection_id; + u32 target_addr; +}; + +struct its_ite { + struct list_head ite_list; + + struct vgic_irq *irq; + struct its_collection *collection; + u32 event_id; +}; =20 /* * Find and returns a device in the device table for an ITS. @@ -48,16 +59,68 @@ static struct vgic_its_device *find_its_device(struct v= gic_its *its, u32 device_ return NULL; } =20 +#define VGIC_ITS_TYPER_IDBITS 16 +#define VGIC_ITS_TYPER_DEVBITS 16 +#define VGIC_ITS_TYPER_ITE_SIZE 8 + +/* Requires the its_lock to be held. */ +static void its_free_ite(struct domain *d, struct its_ite *ite) +{ + list_del(&ite->ite_list); + + /* This put matches the get in vgic_add_lpi. */ + if ( ite->irq ) + { + /* GICv4 style VLPIS are not yet supported */ + WARN_ON(ite->irq->hw); + + vgic_put_irq(d, ite->irq); + } + + xfree(ite); +} + /* Requires the its_devices_lock to be held. */ void vgic_its_free_device(struct vgic_its_device *device) { + struct its_ite *ite, *temp; struct domain *d =3D device->d; =20 BUG_ON(!d); + /* + * The spec says that unmapping a device with still valid + * ITTEs associated is UNPREDICTABLE. We remove all ITTEs, + * since we cannot leave the memory unreferenced. + */ + list_for_each_entry_safe(ite, temp, &device->itt_head, ite_list) + its_free_ite(d, ite); + list_del(&device->dev_list); xfree(device); } =20 +/* its lock must be held */ +static void vgic_its_free_device_list(struct domain *d, struct vgic_its *i= ts) +{ + struct vgic_its_device *cur, *temp; + + list_for_each_entry_safe(cur, temp, &its->device_list, dev_list) + vgic_its_free_device(cur); +} + +/* its lock must be held */ +static void vgic_its_free_collection_list(struct domain *d, + struct vgic_its *its) +{ + struct its_collection *cur, *temp; + + list_for_each_entry_safe(cur, temp, &its->collection_list, coll_list) + { + list_del(&cur->coll_list); + xfree(cur); + } +} + /* Must be called with its_devices_lock mutex held */ struct vgic_its_device* vgic_its_get_device(struct domain *d, paddr_t vdoo= rbell, uint32_t vdevid) @@ -119,6 +182,349 @@ void vgic_its_delete_device(struct domain *d, struct = vgic_its_device *its_dev) list_del(&its_dev->dev_list); } =20 +/* + * This function is called with the its_cmd lock held, but the ITS data + * structure lock dropped. + */ +static int vgic_its_handle_command(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + + return -ENODEV; +} + +#define ITS_CMD_BUFFER_SIZE(baser) ((((baser)&0xff) + 1) << 12) +#define ITS_CMD_SIZE 32 +#define ITS_CMD_OFFSET(reg) ((reg)&GENMASK(19, 5)) + +/* Must be called with the cmd_lock held. */ +static void vgic_its_process_commands(struct domain *d, struct vgic_its *i= ts) +{ + paddr_t cbaser; + u64 cmd_buf[4]; + + /* Commands are only processed when the ITS is enabled. */ + if ( !its->enabled ) + return; + + cbaser =3D GITS_CBASER_ADDRESS(its->cbaser); + + while ( its->cwriter !=3D its->creadr ) + { + int ret =3D access_guest_memory_by_gpa(d, cbaser + its->creadr, cm= d_buf, + ITS_CMD_SIZE, false); + /* + * If kvm_read_guest() fails, this could be due to the guest + * programming a bogus value in CBASER or something else going + * wrong from which we cannot easily recover. + * According to section 6.3.2 in the GICv3 spec we can just + * ignore that command then. + */ + if ( !ret ) + vgic_its_handle_command(d, its, cmd_buf); + + its->creadr +=3D ITS_CMD_SIZE; + if ( its->creadr =3D=3D ITS_CMD_BUFFER_SIZE(its->cbaser) ) + its->creadr =3D 0; + } +} + +static unsigned long vgic_mmio_read_its_ctlr(struct domain *d, + struct vgic_its *its, paddr_t= addr, + unsigned int len) +{ + u32 reg =3D 0; + + spin_lock(&its->cmd_lock); + if ( its->creadr =3D=3D its->cwriter ) + reg |=3D GITS_CTLR_QUIESCENT; + if ( its->enabled ) + reg |=3D GITS_CTLR_ENABLE; + spin_unlock(&its->cmd_lock); + + return reg; +} + +static void vgic_mmio_write_its_ctlr(struct domain *d, struct vgic_its *it= s, + paddr_t addr, unsigned int len, + unsigned long val) +{ + spin_lock(&its->cmd_lock); + + /* + * It is UNPREDICTABLE to enable the ITS if any of the CBASER or + * device/collection BASER are invalid + */ + if ( !its->enabled && (val & GITS_CTLR_ENABLE) && + (!(its->baser_device_table & GITS_VALID_BIT) || + !(its->baser_coll_table & GITS_VALID_BIT) || + !(its->cbaser & GITS_VALID_BIT)) ) + goto out; + + its->enabled =3D !!(val & GITS_CTLR_ENABLE); + + /* + * Try to process any pending commands. This function bails out early + * if the ITS is disabled or no commands have been queued. + */ + vgic_its_process_commands(d, its); + +out: + spin_unlock(&its->cmd_lock); +} + +static unsigned long vgic_mmio_read_its_iidr(struct domain *d, + struct vgic_its *its, paddr_t= addr, + unsigned int len) +{ + u32 val; + + val =3D (its->abi_rev << GITS_IIDR_REV_SHIFT) & GITS_IIDR_REV_MASK; + val |=3D (PRODUCT_ID_KVM << GITS_IIDR_PRODUCTID_SHIFT) | IMPLEMENTER_A= RM; + return val; +} + +static unsigned long vgic_mmio_read_its_typer(struct domain *d, + struct vgic_its *its, + paddr_t addr, unsigned int l= en) +{ + u64 reg =3D GITS_TYPER_PHYSICAL; + + /* + * We use linear CPU numbers for redistributor addressing, + * so GITS_TYPER.PTA is 0. + * Also we force all PROPBASER registers to be the same, so + * CommonLPIAff is 0 as well. + * To avoid memory waste in the guest, we keep the number of IDBits and + * DevBits low - as least for the time being. + */ + reg |=3D GIC_ENCODE_SZ(VGIC_ITS_TYPER_DEVBITS, 5) << GITS_TYPER_DEVIDS= _SHIFT; + reg |=3D GIC_ENCODE_SZ(VGIC_ITS_TYPER_IDBITS, 5) << GITS_TYPER_IDBITS_= SHIFT; + reg |=3D GIC_ENCODE_SZ(VGIC_ITS_TYPER_ITE_SIZE, 4) << GITS_TYPER_ITT_S= IZE_SHIFT; + + return extract_bytes(reg, addr & 7, len); +} + +static u64 vgic_sanitise_its_baser(u64 reg) +{ + reg =3D vgic_sanitise_field(reg, GITS_BASER_SHAREABILITY_MASK, + GITS_BASER_SHAREABILITY_SHIFT, + vgic_sanitise_shareability); + reg =3D vgic_sanitise_field(reg, GITS_BASER_INNER_CACHEABILITY_MASK, + GITS_BASER_INNER_CACHEABILITY_SHIFT, + vgic_sanitise_inner_cacheability); + reg =3D vgic_sanitise_field(reg, GITS_BASER_OUTER_CACHEABILITY_MASK, + GITS_BASER_OUTER_CACHEABILITY_SHIFT, + vgic_sanitise_outer_cacheability); + + /* We support only one (ITS) page size: 64K */ + reg =3D (reg & ~GITS_BASER_PAGE_SIZE_MASK) | GITS_BASER_PAGE_SIZE_64K; + + return reg; +} + +static u64 vgic_sanitise_its_cbaser(u64 reg) +{ + reg =3D vgic_sanitise_field(reg, GITS_CBASER_SHAREABILITY_MASK, + GITS_CBASER_SHAREABILITY_SHIFT, + vgic_sanitise_shareability); + reg =3D vgic_sanitise_field(reg, GITS_CBASER_INNER_CACHEABILITY_MASK, + GITS_CBASER_INNER_CACHEABILITY_SHIFT, + vgic_sanitise_inner_cacheability); + reg =3D vgic_sanitise_field(reg, GITS_CBASER_OUTER_CACHEABILITY_MASK, + GITS_CBASER_OUTER_CACHEABILITY_SHIFT, + vgic_sanitise_outer_cacheability); + + /* Sanitise the physical address to be 64k aligned. */ + reg &=3D ~GENMASK_ULL(15, 12); + + return reg; +} + +static unsigned long vgic_mmio_read_its_cbaser(struct domain *d, + struct vgic_its *its, + paddr_t addr, unsigned int = len) +{ + return extract_bytes(its->cbaser, addr & 7, len); +} + +static void vgic_mmio_write_its_cbaser(struct domain *d, struct vgic_its *= its, + paddr_t addr, unsigned int len, + unsigned long val) +{ + /* When GITS_CTLR.Enable is 1, this register is RO. */ + if ( its->enabled ) + return; + + spin_lock(&its->cmd_lock); + its->cbaser =3D update_64bit_reg(its->cbaser, addr & 7, len, val); + its->cbaser =3D vgic_sanitise_its_cbaser(its->cbaser); + its->creadr =3D 0; + /* + * CWRITER is architecturally UNKNOWN on reset, but we need to reset + * it to CREADR to make sure we start with an empty command buffer. + */ + its->cwriter =3D its->creadr; + spin_unlock(&its->cmd_lock); +} + +static unsigned long vgic_mmio_read_its_cwriter(struct domain *d, + struct vgic_its *its, + paddr_t addr, unsigned int= len) +{ + return extract_bytes(its->cwriter, addr & 0x7, len); +} + +/* + * By writing to CWRITER the guest announces new commands to be processed. + * To avoid any races in the first place, we take the its_cmd lock, which + * protects our ring buffer variables, so that there is only one user + * per ITS handling commands at a given time. + */ +static void vgic_mmio_write_its_cwriter(struct domain *d, struct vgic_its = *its, + paddr_t addr, unsigned int len, + unsigned long val) +{ + u64 reg; + + if ( !its ) + return; + + spin_lock(&its->cmd_lock); + + reg =3D update_64bit_reg(its->cwriter, addr & 7, len, val); + reg =3D ITS_CMD_OFFSET(reg); + if ( reg >=3D ITS_CMD_BUFFER_SIZE(its->cbaser) ) + { + spin_unlock(&its->cmd_lock); + return; + } + its->cwriter =3D reg; + + vgic_its_process_commands(d, its); + + spin_unlock(&its->cmd_lock); +} + +static unsigned long vgic_mmio_read_its_creadr(struct domain *d, + struct vgic_its *its, + paddr_t addr, unsigned int = len) +{ + return extract_bytes(its->creadr, addr & 0x7, len); +} + +#define BASER_INDEX(addr) (((addr) / sizeof(u64)) & 0x7) + +static unsigned long vgic_mmio_read_its_baser(struct domain *d, + struct vgic_its *its, + paddr_t addr, unsigned int l= en) +{ + uint64_t reg; + + switch ( BASER_INDEX(addr) ) + { + case 0: + reg =3D its->baser_device_table; + break; + case 1: + reg =3D its->baser_coll_table; + break; + default: + reg =3D 0; + break; + } + + return extract_bytes(reg, addr & 7, len); +} + +#define GITS_BASER_RO_MASK (GENMASK_ULL(52, 48) | GENMASK_ULL(58, 56)) +#define VGIC_ITS_BASER_DTE_SIZE 8 +#define VGIC_ITS_BASER_CTE_SIZE 8 + +static void vgic_mmio_write_its_baser(struct domain *d, struct vgic_its *i= ts, + paddr_t addr, unsigned int len, + unsigned long val) +{ + u64 entry_size, table_type; + u64 reg, *regptr, clearbits =3D 0; + + /* When GITS_CTLR.Enable is 1, we ignore write accesses. */ + if ( its->enabled ) + return; + + switch ( BASER_INDEX(addr) ) + { + case 0: + regptr =3D &its->baser_device_table; + entry_size =3D VGIC_ITS_BASER_DTE_SIZE; + table_type =3D GITS_BASER_TYPE_DEVICE; + break; + case 1: + regptr =3D &its->baser_coll_table; + entry_size =3D VGIC_ITS_BASER_CTE_SIZE; + table_type =3D GITS_BASER_TYPE_COLLECTION; + clearbits =3D GITS_BASER_INDIRECT; + break; + default: + return; + } + + reg =3D update_64bit_reg(*regptr, addr & 7, len, val); + reg &=3D ~GITS_BASER_RO_MASK; + reg &=3D ~clearbits; + + reg |=3D (entry_size - 1) << GITS_BASER_ENTRY_SIZE_SHIFT; + reg |=3D table_type << GITS_BASER_TYPE_SHIFT; + reg =3D vgic_sanitise_its_baser(reg); + + *regptr =3D reg; + + if ( !(reg & GITS_BASER_VALID) ) + { + /* Take the its_lock to prevent a race with a save/restore */ + spin_lock(&its->its_lock); + switch ( table_type ) + { + case GITS_BASER_TYPE_DEVICE: + vgic_its_free_device_list(d, its); + break; + case GITS_BASER_TYPE_COLLECTION: + vgic_its_free_collection_list(d, its); + break; + } + spin_unlock(&its->its_lock); + } +} + + +static unsigned long vgic_mmio_read_its_idregs(struct domain *d, + struct vgic_its *its, + paddr_t addr, unsigned int = len) +{ + switch ( addr & 0xffff ) + { + case GITS_PIDR0: + return 0x92; /* part number, bits[7:0] */ + case GITS_PIDR1: + return 0xb4; /* part number, bits[11:8] */ + case GITS_PIDR2: + return GIC_PIDR2_ARCH_GICv3 | 0x0b; + case GITS_PIDR4: + return 0x40; /* This is a 64K software visible page */ + /* The following are the ID registers for (any) GIC. */ + case GITS_CIDR0: + return 0x0d; + case GITS_CIDR1: + return 0xf0; + case GITS_CIDR2: + return 0x05; + case GITS_CIDR3: + return 0xb1; + } + + return 0; +} + static void its_mmio_write_wi(struct domain *d, struct vgic_its *its, paddr_t addr, unsigned int len, unsigned lon= g val) { @@ -133,28 +539,28 @@ static void its_mmio_write_wi(struct domain *d, struc= t vgic_its *its, =20 static struct vgic_register_region its_registers[] =3D { REGISTER_ITS_DESC(GITS_CTLR, - its_mmio_read_raz, its_mmio_write_wi, 4, + vgic_mmio_read_its_ctlr, vgic_mmio_write_its_ctlr,= 4, VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_IIDR, - its_mmio_read_raz, its_mmio_write_wi, 4, + vgic_mmio_read_its_iidr, its_mmio_write_wi, 4, VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_TYPER, - its_mmio_read_raz, its_mmio_write_wi, 8, + vgic_mmio_read_its_typer, its_mmio_write_wi, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_CBASER, - its_mmio_read_raz, its_mmio_write_wi, 8, + vgic_mmio_read_its_cbaser, vgic_mmio_write_its_cba= ser, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_CWRITER,=20 - its_mmio_read_raz, its_mmio_write_wi, 8, + vgic_mmio_read_its_cwriter, vgic_mmio_write_its_cw= riter, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_CREADR, - its_mmio_read_raz, its_mmio_write_wi, 8, + vgic_mmio_read_its_creadr, its_mmio_write_wi, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_BASER0, - its_mmio_read_raz, its_mmio_write_wi, 0x40, + vgic_mmio_read_its_baser, vgic_mmio_write_its_base= r, 0x40, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_IDREGS_BASE, - its_mmio_read_raz, its_mmio_write_wi, 0x30, + vgic_mmio_read_its_idregs, its_mmio_write_wi, 0x30, VGIC_ACCESS_32bit), }; =20 @@ -184,6 +590,17 @@ out: return ret; } =20 +#define INITIAL_BASER_VALUE = \ + (GIC_BASER_CACHEABILITY(GITS_BASER, INNER, RaWb) | = \ + GIC_BASER_CACHEABILITY(GITS_BASER, OUTER, SameAsInner) | = \ + GIC_BASER_SHAREABILITY(GITS_BASER, InnerShareable) | = \ + GITS_BASER_PAGE_SIZE_64K) + +#define INITIAL_PROPBASER_VALUE = \ + (GIC_BASER_CACHEABILITY(GICR_PROPBASER, INNER, RaWb) | = \ + GIC_BASER_CACHEABILITY(GICR_PROPBASER, OUTER, SameAsInner) | = \ + GIC_BASER_SHAREABILITY(GICR_PROPBASER, InnerShareable)) + static int vgic_its_create(struct domain *d, u64 addr) { struct vgic_its *its; @@ -194,11 +611,25 @@ static int vgic_its_create(struct domain *d, u64 addr) =20 d->arch.vgic.its =3D its; =20 + spin_lock_init(&its->its_lock); + spin_lock_init(&its->cmd_lock); + its->vgic_its_base =3D VGIC_ADDR_UNDEF; =20 + INIT_LIST_HEAD(&its->device_list); + INIT_LIST_HEAD(&its->collection_list); + spin_lock_init(&d->arch.vgic.its_devices_lock); + d->arch.vgic.msis_require_devid =3D true; d->arch.vgic.has_its =3D true; its->enabled =3D false; + its->domain =3D d; + + its->baser_device_table =3D INITIAL_BASER_VALUE | ((u64)GITS_BASER_TYP= E_DEVICE + << GITS_BASER_TYPE_SH= IFT); + its->baser_coll_table =3D INITIAL_BASER_VALUE | + ((u64)GITS_BASER_TYPE_COLLECTION << GITS_BASER_TYPE_SHIFT); + d->arch.vgic.propbaser =3D INITIAL_PROPBASER_VALUE; =20 vgic_register_its_iodev(d, its, addr); =20 @@ -241,6 +672,14 @@ void vgic_v3_its_free_domain(struct domain *d) { struct vgic_its *its =3D d->arch.vgic.its; =20 + spin_lock(&its->its_lock); + spin_lock(&d->arch.vgic.its_devices_lock); + + vgic_its_free_device_list(d, its); + vgic_its_free_collection_list(d, its); + + spin_unlock(&d->arch.vgic.its_devices_lock); + spin_unlock(&its->its_lock); xfree(its); d->arch.vgic.its =3D NULL; } diff --git a/xen/arch/arm/vgic/vgic-mmio.h b/xen/arch/arm/vgic/vgic-mmio.h index 0a8deb46ba..edf8665cda 100644 --- a/xen/arch/arm/vgic/vgic-mmio.h +++ b/xen/arch/arm/vgic/vgic-mmio.h @@ -146,4 +146,11 @@ void vgic_mmio_write_config(struct vcpu *vcpu, =20 unsigned int vgic_v2_init_dist_iodev(struct vgic_io_device *dev); =20 +/* extract @num bytes at @offset bytes offset in data */ +unsigned long extract_bytes(uint64_t data, unsigned int offset, + unsigned int num); + +uint64_t update_64bit_reg(u64 reg, unsigned int offset, unsigned int len, + unsigned long val); + #endif diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index 791c91ebb3..a14b519f77 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -80,6 +80,11 @@ bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, uni= on hsr hsr); unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev); int vgic_v3_set_redist_base(struct domain *d, u32 index, u64 addr, u32 cou= nt); int vgic_register_redist_iodev(struct vcpu *vcpu); +u64 vgic_sanitise_field(u64 reg, u64 field_mask, int field_shift, + u64 (*sanitise_fn)(u64)); +u64 vgic_sanitise_shareability(u64 field); +u64 vgic_sanitise_inner_cacheability(u64 field); +u64 vgic_sanitise_outer_cacheability(u64 field); #else static inline void vgic_v3_fold_lr_state(struct vcpu *vcpu) { --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621025; cv=pass; d=zohomail.com; s=zohoarc; b=Kd/5WhDYHXaAeN2ZSCATNQvcNBn/hNGMupT2LEu4kxrG22hfElflopRX7pwf+F62h+kz7NfDCX0KUYwREJtPjRjC+hUUo4dIN0DgsO1JQYwS01uIG8aeEN5enviwv8c0VsrkT0h/+Zy2t0VvZktBwunjg1M6qXjC8PgoaIWkF4c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621025; 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=oT4KIF2X4Eydop9+7zHu37RhHlwUjuweDeTiWeDTB5Q=; b=BhBdmc3RNeokF3CD/5i9Hxm8+2H9iLeKPJ9xemjjtKHY2Enp2p4qHIsKhzdJsVzk9ACDD6sXSzf7QRnJsrulruA5bakW1/aLL3wO4f1cKg2bUfQlNWn75JZlTLJGTcepOO6i8RmO/TldpF8Cl9nqxs6anTmJ6ooSykVGEpyfV0s= 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 1699621025912537.6455395852303; Fri, 10 Nov 2023 04:57:05 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630301.983070 (Exim 4.92) (envelope-from ) id 1r1R3y-00034b-Mt; Fri, 10 Nov 2023 12:56:42 +0000 Received: by outflank-mailman (output) from mailman id 630301.983070; Fri, 10 Nov 2023 12:56: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 1r1R3y-00032y-DL; Fri, 10 Nov 2023 12:56:42 +0000 Received: by outflank-mailman (input) for mailman id 630301; Fri, 10 Nov 2023 12:56:40 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3w-0001y0-5s for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:40 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 944a87f3-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:36 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvf025691; Fri, 10 Nov 2023 12:56:29 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:29 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:23 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:23 +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: 944a87f3-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CfWAkGtMlpf+k70kdod+hSlaG77s3WKtFAfmUY7+SRh4uDTOIO1e882VPahd9d0D0W2DbfmSMku96lTGZwPzRetAJEllZ4oQ2vvGfbg0ruK+t7FlT1VodsSRq0KOx3z67qBCruAUxkwXRjU/Os92LctSdPKPHdwejRZ90u43APJR6sOSbgIkbCI1a4n4QpjsdGn6icFbQIeg5kILqVeEJv/4KclBhALRZR34PEkZ367Kasr5UzX9J5qrLElTEmF3WuULhkSGi9CxHSXMsYWaA3sjeGtN5DjvwvcA1HnnhCr40pY0mh2/mnsXuBXXqNVobbec++1b9QvKgKrkoFPmLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=oT4KIF2X4Eydop9+7zHu37RhHlwUjuweDeTiWeDTB5Q=; b=XKn2tApLn8Pw50DL9kVBH601DNYUDlO4QkE7JkH5WGanzs9hSatY7EFLg8rffozzyqLSsJ/kMfK4macRCxstNbSTVMBtEbTZ6hQWwyazctNnLSmtdhJb7vI6RCF9UXCsV4E23Pd7vZLCClnDZLCaeNwKkOcckn2YdXYDbbmv0UdUIHDfw2d0a57wkCPNpxZFxPPBz/Uf5aqMfLXvUl5snl0udLxaycbOrgLZOxEkvJwbSFdu9Qmh5s/YmAG5taA2ELzboq5c7TqyG8iajoVZ25RPXuz6pfrATHtTCNo/T2jM6SU4bwKldXLrqfUuM4yDflKcZ2JDpqlH3mSgeGEipQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oT4KIF2X4Eydop9+7zHu37RhHlwUjuweDeTiWeDTB5Q=; b=N3qRtU6qHivrs0BnR/MvM8uvwGpg2/+Nly7HCrbk3lXVXG3cQPKvCJxL0MNnmgquLTF774oldQ0OidcvaRbRdZt6GaMJ9fXCGYlyJ3srkLW2639++AhMLqoYbBaH5gd0xwC9C3eDVXOTk8ulLLdAh9uO7cVJAo+v4pASPNSjoV9N1dl8atnBAonThagygT2c32yy6YIguriENcCP2AFhuA/i0zWJtzhH7/Ph8bwQOaTkGFtzkgp3m4tbFN/uypbcpxmycFyRmADyKJUmsC1WHioXyMPmsTqBBsOyYHAoxxY+zCRAdTscqqPIVHinG7sVIbiYgsSAu6jy50qIgKMHIg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 17/25] arm: new VGIC: its: Read initial LPI pending table Thread-Topic: [XEN PATCH v2 17/25] arm: new VGIC: its: Read initial LPI pending table Thread-Index: AQHaE9VNBToaXOI75keIgsngiRNg/A== Date: Fri, 10 Nov 2023 12:56:21 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: b5dd9e00-7382-41a1-026d-08dbe1ec718e x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qspdzKlhaEej6mngsR6+JoOXQMIkJzGW9c5jdi/JoOwAg+BnGitAu4BcQYEkjIn/eQmjfzPPhCqToVUfu54XmXGj9J9pWb7+zmlrL/Iyn0jXJcufuspfKS8EZt035hXwYz8IrgZFhlUyi9HOQnsy/T9U6+1NqKxtmMx9o/sIsVB3VgjnvEheUz21yB6cPN28CXEJQAUVHXXRV8i1gf/ah6l2YS168P94E4rb4FYmWlAXKbrfn0FF54m4y/DhyLuU1KfFM6X/HeFQ1duP+3w8qegPTY+c2vmCsE37T7gWzb0IpiyMZIcxliO6ibI+UmR7FFfVd8InfMojZmUJXLrAroLSyRrRTde0d7qtRZZaaqou0OjukOKRKbfQTBScF50VkxdPdCBAzXoF+hrYXlB8nfjm/5CwuJAvxv8mSlhn6mDuKoi2v2wzUVm2pa+j8+Vqj+RqGEIf0xMxx5Iz4bowva5XhYmtEW6LRAOKDsJmgsfvI03KVEas0PpBR6JNAXIPQ1feP4uHccx7EMwZkY8iT8HkBylbMybOqUZxUIlgQuy2GdopyvhKVM+2UndAt3GWT/w8+7y0WakGbUpWN7BRdf11cBHOkQzgKSf7cK8hpFzrVY7e1HAqfo3FtBjJkzcF 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?hA8wfJymWmvmZ/BduK0KRT6mq0ag2ivKb9PAZNcbrnR6Zo4TI7Yw734hVg?= =?iso-8859-1?Q?TBBrE4IwUcsCS5y6zuhvqORpOttzZhgSewqmFiUFizy4IgN+UiMQUXSyRT?= =?iso-8859-1?Q?ctVAxvosQ/v1SNdUaAjxX5IumGb+k0IEx2TNJtqqdd3bz4yaVOqVadAznn?= =?iso-8859-1?Q?VvJ3s+PdGMZhqdJikQiD9CPYIuld0DCVi981dMbXpfcBaxeP/oHNOV4u74?= =?iso-8859-1?Q?Nni0U4GJmfOvKwfGBdLL8n/alqesZBgWvl9u4I7SXBlyW10CksHNNXqRBS?= =?iso-8859-1?Q?yswv52Mg0nPnW3p0fEVcuZcECy8T7sNhqKHqbvzRfTU2oLLSenjTb86EIG?= =?iso-8859-1?Q?Aa7QYS74JZ00tkJ1bXRCP7y/fXb5rqJsdyGzUUHEApbraBcvsXfG7nfo4C?= =?iso-8859-1?Q?D2f7eYas2hMx+uqTV9XcxRzBF04bl9nTsKIv9j4kJiBHapG3mHGhLPeJmE?= =?iso-8859-1?Q?6TV/z9HMZZ+2aXyyU5v/B/ugHzlfn+yP00/9BhmkQu6rxKbBGF0aCCmBNV?= =?iso-8859-1?Q?GoIZEBTFdOm8pKiC4iGA50LcsU66fz7sEMXln9Ao4gJJs380ElLFTPihyw?= =?iso-8859-1?Q?I/jqIQPdk8/cVQFTrjGhAZJVTVTh3pURu+oGSNZjdga7z6i7w+Hlj4HcT9?= =?iso-8859-1?Q?H0+YH5V3J1Yr8LTpmLvQroSruWAG9HYqwFBsDiqLLXOiYeBZ+b7kMjgnaE?= =?iso-8859-1?Q?b9YkYe4gT01u9v6oATo0cUyU7Fvt5Sfj9Sh5XTiGH2FF08GWlDdY7qmzHK?= =?iso-8859-1?Q?mOIvKJfkwaOGMaSjwDit+EeHySbeBH8sR6GgGtUhYgw/0g8TFvlwRsyfiM?= =?iso-8859-1?Q?pLenr69BVMiplmu4UMlme/dO+//T9aQPkto0w7XJcl2BMTHWYln/eI7hp+?= =?iso-8859-1?Q?NqveHtsFc8V0cjy9JSeVyC8iPz6ibGQGeTTzYuhyFvd4dNo7WM8uF4JgAQ?= =?iso-8859-1?Q?5fY50u/MIemeOYc3izjYioHs947pj1n4IdMqeQk8BfVD6M5s3V/vJvPHqk?= =?iso-8859-1?Q?GMD82cbcpzAki4FUzg9i9lxyj70fm4U/9wvP7TehKwGfTp5udcEB/R9+X4?= =?iso-8859-1?Q?xr8xVY/DG8hyc7iERmYiw9d2koNMoRGhREDXBQcPN/ytBfC7h8wxA8qpEA?= =?iso-8859-1?Q?Q9pg3QQ+hpHHi1mAxt3DbNgnVpj7vQMAzWEtOneSAUQ5eR5avdQjDhYu4E?= =?iso-8859-1?Q?jHExisls9oDlXe+A/mQNLMDEHQaHJOOB9WintU96q/uOdHEfcr68ZAQkNt?= =?iso-8859-1?Q?ruxyTAzlPnhp8HVmKn/uZy+eGApFnklsqfvaqSLQz2g8d7LeVC+TCP+WiI?= =?iso-8859-1?Q?S+8hYh3ZRckYddbIkjEykD8YznvO0GBl7/VOnoYJB87RLd2nX4x72MjQQS?= =?iso-8859-1?Q?IjAcTr71gFdrqxHaAHG27QedoDyA16vFD3MYW38h7GjE9LOe54PTSZUaGk?= =?iso-8859-1?Q?83q0HcoaSz5tQ3/BJFyMATw/Eg5sXz9oVmR558+zCnh//lLDzPyihbBUgh?= =?iso-8859-1?Q?9+CFB91UYvpBioywbk5lzkPDy/NrebjgXBnNpK05hIJWpa3nWcoIVr6Fm+?= =?iso-8859-1?Q?J5+qmJoZkJxivTOpBt1eraFFlqEShaIogwm3XHZ1pNUAQtlv1PDjUdz6uF?= =?iso-8859-1?Q?swIkd4ttxv7oVn0qy+DrCFk70rhEMcQNeJ8eSscx1zHggTOLs/qk1F3g?= =?iso-8859-1?Q?=3D=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: b5dd9e00-7382-41a1-026d-08dbe1ec718e X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:21.8288 (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: WicZnL+MZxieh5FpgwEWqH7UKJ5CwOi8ItFWFrDpdilXyY9ZlV50lPpdxpppJNbi8nOshByIdztVqSMANYxCPg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: z-LfJRbTodkl_F9kadJyB6Ea_fHGOMC8 X-Proofpoint-GUID: z-LfJRbTodkl_F9kadJyB6Ea_fHGOMC8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=999 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621027191100005 Content-Type: text/plain; charset="utf-8" The LPI pending status for a GICv3 redistributor is held in a table in (guest) memory. To achieve reasonable performance, we cache the pending bit in our struct vgic_irq. The initial pending state must be read from guest memory upon enabling LPIs for this redistributor. As we can't access the guest memory while we hold the lpi_list spinlock, we create a snapshot of the LPI list and iterate over that. Based on Linux commit 33d3bc9556a7d by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/new_vgic.h | 5 ++ xen/arch/arm/vgic/vgic-its.c | 104 ++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index 3048f39844..d0fd15e154 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -264,12 +264,17 @@ static inline paddr_t vgic_dist_base(const struct vgi= c_dist *vgic) } =20 #ifdef CONFIG_HAS_ITS +void vgic_enable_lpis(struct vcpu *vcpu); struct vgic_its_device *vgic_its_alloc_device(int nr_events); void vgic_its_free_device(struct vgic_its_device *its_dev); int vgic_its_add_device(struct domain *d, struct vgic_its_device *its_dev); void vgic_its_delete_device(struct domain *d, struct vgic_its_device *its_= dev); struct vgic_its_device* vgic_its_get_device(struct domain *d, paddr_t vdoo= rbell, uint32_t vdevid); +#else +static inline void vgic_enable_lpis(struct vcpu *vcpu) +{ +} #endif =20 #endif /* __ASM_ARM_NEW_VGIC_H */ diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 5e94f0144d..af19cf4414 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -63,6 +63,47 @@ static struct vgic_its_device *find_its_device(struct vg= ic_its *its, u32 device_ #define VGIC_ITS_TYPER_DEVBITS 16 #define VGIC_ITS_TYPER_ITE_SIZE 8 =20 +/* + * Create a snapshot of the current LPIs targeting @vcpu, so that we can + * enumerate those LPIs without holding any lock. + * Returns their number and puts the kmalloc'ed array into intid_ptr. + */ +int vgic_copy_lpi_list(struct domain *d, struct vcpu *vcpu, u32 **intid_pt= r) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + struct vgic_irq *irq; + unsigned long flags; + u32 *intids; + int irq_count, i =3D 0; + + /* + * There is an obvious race between allocating the array and LPIs + * being mapped/unmapped. If we ended up here as a result of a + * command, we're safe (locks are held, preventing another + * command). If coming from another path (such as enabling LPIs), + * we must be careful not to overrun the array. + */ + irq_count =3D ACCESS_ONCE(dist->lpi_list_count); + intids =3D xmalloc_array(u32, irq_count); + if ( !intids ) + return -ENOMEM; + + spin_lock_irqsave(&dist->lpi_list_lock, flags); + list_for_each_entry(irq, &dist->lpi_list_head, lpi_list) + { + if ( i =3D=3D irq_count ) + break; + /* We don't need to "get" the IRQ, as we hold the list lock. */ + if ( vcpu && irq->target_vcpu !=3D vcpu ) + continue; + intids[i++] =3D irq->intid; + } + spin_unlock_irqrestore(&dist->lpi_list_lock, flags); + + *intid_ptr =3D intids; + return i; +} + /* Requires the its_lock to be held. */ static void its_free_ite(struct domain *d, struct its_ite *ite) { @@ -284,6 +325,62 @@ static unsigned long vgic_mmio_read_its_iidr(struct do= main *d, return val; } =20 +/* + * Sync the pending table pending bit of LPIs targeting @vcpu + * with our own data structures. This relies on the LPI being + * mapped before. + */ +static int its_sync_lpi_pending_table(struct vcpu *vcpu) +{ + paddr_t pendbase =3D GICR_PENDBASER_ADDRESS(vcpu->arch.vgic.pendbaser); + struct vgic_irq *irq; + int last_byte_offset =3D -1; + int ret =3D 0; + u32 *intids; + int nr_irqs, i; + unsigned long flags; + u8 pendmask; + + nr_irqs =3D vgic_copy_lpi_list(vcpu->domain, vcpu, &intids); + if ( nr_irqs < 0 ) + return nr_irqs; + + for ( i =3D 0; i < nr_irqs; i++ ) + { + int byte_offset, bit_nr; + + byte_offset =3D intids[i] / BITS_PER_BYTE; + bit_nr =3D intids[i] % BITS_PER_BYTE; + + /* + * For contiguously allocated LPIs chances are we just read + * this very same byte in the last iteration. Reuse that. + */ + if ( byte_offset !=3D last_byte_offset ) + { + ret =3D access_guest_memory_by_gpa(vcpu->domain, + pendbase + byte_offset, &pend= mask, + 1, false); + if ( ret ) + { + xfree(intids); + return ret; + } + last_byte_offset =3D byte_offset; + } + + irq =3D vgic_get_irq(vcpu->domain, NULL, intids[i]); + spin_lock_irqsave(&irq->irq_lock, flags); + irq->pending_latch =3D pendmask & (1U << bit_nr); + vgic_queue_irq_unlock(vcpu->domain, irq, flags); + vgic_put_irq(vcpu->domain, irq); + } + + xfree(intids); + + return ret; +} + static unsigned long vgic_mmio_read_its_typer(struct domain *d, struct vgic_its *its, paddr_t addr, unsigned int l= en) @@ -564,6 +661,13 @@ static struct vgic_register_region its_registers[] =3D= { VGIC_ACCESS_32bit), }; =20 +/* This is called on setting the LPI enable bit in the redistributor. */ +void vgic_enable_lpis(struct vcpu *vcpu) +{ + if ( !(vcpu->arch.vgic.pendbaser & GICR_PENDBASER_PTZ) ) + its_sync_lpi_pending_table(vcpu); +} + static int vgic_register_its_iodev(struct domain *d, struct vgic_its *its, u64 addr) { --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621042; cv=pass; d=zohomail.com; s=zohoarc; b=iu6bdRPi2JNnSmZVB+e3YGr4EX02gL+hfVsstDRXeHs9fQUmiDGv12zlahEV/Ft/bKJRJc6F0Wyfa3jdh5K4pHmYihzwOeY6AKbe/3hYuPGKwJI6dqhpj7OVHaZ5l0U8sYdvvwc6KD+IfN14meDCYdIg0Y15dCKQqc9Xw87pw84= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621042; 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=R+qyDsQa2NT4e9gFoYJ+T5c68j98f1YS+6LB32nWM3A=; b=akSii3pbHm5pf6IKh4MdlMICFxYUPAiCwzCIkj06Rh4CtAPj4bJYnt2lxg3CHPNwrYhg0YiAc/T7JRDnEmgbLaqzS/+8FhDLiya0uPz9LUKtY/NwpViU/QB7r9fkoRbDVJglP7zURM8J5RBHNHDh8KyHU699CdnfimtaZn3L6zU= 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 1699621042636939.8229372830637; Fri, 10 Nov 2023 04:57:22 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630310.983152 (Exim 4.92) (envelope-from ) id 1r1R48-0005WC-Ie; Fri, 10 Nov 2023 12:56:52 +0000 Received: by outflank-mailman (output) from mailman id 630310.983152; Fri, 10 Nov 2023 12:56:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R47-0005Rf-Up; Fri, 10 Nov 2023 12:56:51 +0000 Received: by outflank-mailman (input) for mailman id 630310; Fri, 10 Nov 2023 12:56: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 1r1R40-0001y1-CT for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:44 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 968c33ef-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:40 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeel019156; Fri, 10 Nov 2023 12:56:31 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:30 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:24 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:24 +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: 968c33ef-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C8KW2a6xEXibdMIUZwRRhmigq3gy+R9e7mbMdzPfYwN+4x7CWpA6LzkDw74rxck+RaVKglLMQEwtfRPI2jhiEI7qTLXnwHffrkrtYNQrKNqK2tg+twiN8QKFyw5JTpw8Gmc1iiAoR/wfdv0OlKIxjZK9vjgiSS7F+aSwq9GHBOPSrrfiMhdrhwccpOjrU+ZyquxyXtyKFZp+G256vL6uW19vuUII3fcauOV0uik5twnXQ0eAMfVsPmrc4U7fhxDwQddx7RM8MeD4sVn/ZUrUJE0Yz31PpxIgnlOo84RcRSekacxjWAG4UfbkjbOIkiBD1F7Xm+PxhUaG9b1hV/khhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=R+qyDsQa2NT4e9gFoYJ+T5c68j98f1YS+6LB32nWM3A=; b=kDv9jsn9vUJn9MNYRasdKk92SYfCpTH8GA0K4YRlewijVYWN8MFvNjurnEEs5W81IijW3zgwVKKQArtJBy/JUpnWSiZaYN/CG6/iEB6knk5/cQP8zh73c7bbF3jx+8RrVliZdFy6XEcJOmA+xjua5Q2j7oVsJg9bZGfm00NPte63r7WtRZSyJltsioQcYzxVPKESdV+Ytg8JEzp3PhuXes57yR59bM45RAzcXZNLEfvLzuEZB+Rr64pEbXczyaN2jKiXDPFSWnZuiC76ta41maVIUEJS5fOlhKxR9aTf9HH/EjeT0iVgd/YUckVKbN5idmwl/5soXmO5N11/1/uwXg== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=R+qyDsQa2NT4e9gFoYJ+T5c68j98f1YS+6LB32nWM3A=; b=TmtAicJjaSInHvTI0kDK5FmfUMGdQODqjQvI83Vmmic5HFynaiNfnTbalTotZp78xc+UirTHBzeSDLOPtjqbX1/VenMri9nrU+hJ81QLz9t/voEDo4K0weuOusvjvJ/SjSU4sXks/QnEirja48THo/r8vtRcpm4PO/JbFUAUPdkAeksJFFKTkDTVYyJhr0kIX8OVLaOzOXIjXCk34maOZjiIDMOXpKSDIsfjBoqkGHi1XeRAzoWZJXnOEIFTAIqf3kK/YUxLX3Hy0/E6KOHHHHHJhfBUOE1ngUWTjTc9kF2KgmkCZr+yiwDjHJj+1zhKq92T+/rINkE4zAP7zO/jgg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 18/25] arm: new VGIC: its: Allow updates of LPI configuration table Thread-Topic: [XEN PATCH v2 18/25] arm: new VGIC: its: Allow updates of LPI configuration table Thread-Index: AQHaE9VORAkqYbrpzkWH9gdi+lifIQ== Date: Fri, 10 Nov 2023 12:56:22 +0000 Message-ID: <116c9594ca4af704ed40c0945116ed510a3d4e26.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: c2db57ae-5eca-4b1b-6223-08dbe1ec71ce x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: L2B0nuIW06PR5PpBQFpsJ4utet2t9WC1RamTSstjjO8WCo8fd+oihACGW5fx/ltK2hInIetLii/4CpTEIzK0l0QaU2sxRR2+iu12J7MGbtiI7YXiyy4qfLrBSfcGdYT+J8IdVlCsmOQd+ZtrEpC4DV/cfCJH2aU8NDGQuQRuwzp3xKbGdOV8lPBgix+yQZffqjldnajWQAhb/8qp/XTIVpC+MXGfljaMicIEMSTMCRiyDj61kGA05l9cM0ayJIpnC88qjcf3lGLyOXyOL+Mjmzeui2bvdHM2UMdHK3XKBCEmNu1LPJrSRXfg3Bw84iRSZOcVguTUApZrToFZZuB/Ph5TeBpNg0/TmnyHPlAPlw32tlgX5PnVZPPnhwQRYtRNFiyCq+XjKI6TCMD18cgb6W5JdZHUSgGZpiCjjjN93iHpBoWIZGLrSr2AvEY/7yIkaMkR8LiJNZg91sptfD2fA8cHN+QaCLXue1YTq3T9b8i5or4kRw3XbeWFA/FklRAneJG5krVM5iBFTxgc8lkzeS5eQmkYK5f8TwXGNTpi6f8ZuPZ2pZx0TvT08wRSFbNknoVsS92f+KPJdE9fJ381ucb7rzz2KZsBTdJL+0XoO4xC869LYNRTa4NxzzUJyTQY 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(15650500001)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?EC/TZ+Su9bRVIHmO2oiZm/GDYou+NgYXa1Wd7ePfZNus4e3fq21G4l0B27?= =?iso-8859-1?Q?3NyexES6psU0pZ9aLPac2pNBNyvL4zZQXOA5sQen7hYK447iqIXhnG2mPC?= =?iso-8859-1?Q?DPILEsuZjjUKxzGwaMGbGvZ+pihlV/1Cn+ZoRfmrMxmRPPusP8+MZScdRB?= =?iso-8859-1?Q?F0iuNZ9qhVTUVZ1cBB8s/zVtwRrdtmf0IaiaNAYSJ2At4oOZ6fzA89FtTC?= =?iso-8859-1?Q?6CKCXaODQlINTGye0gX5j1T/yHtODKRaP3Dd83lAiNNeolkuO6a7AI6bL0?= =?iso-8859-1?Q?PsB2YnS1mfggNGKfVUotApE31PqI/VKXQ9EtBol+l6CB/W0qmKTLedhaNV?= =?iso-8859-1?Q?iX4Zq+/s/H6g6/J5mCCCYE0XRXFXetXIspq5HjyWlMbGaXcA8XXuUVl0nC?= =?iso-8859-1?Q?QT/J56j/ACEpxXTTdAagF04Ufz6OFZx8p3n8DSN5J7jfKsfWtR5iCKL3KX?= =?iso-8859-1?Q?f/jCxTtZGANzsV3m8rgq84XMl4rANCn88hoj1+5psCO9VEu/jL5lHX84wh?= =?iso-8859-1?Q?9ax/H0+hjeRG+L90yOdp3ZCtpUb1xwwhAXcX6PiUBK8Epedh9Ib7MNg+81?= =?iso-8859-1?Q?r30YNtRHFaTOq1k3XHqmWINtsYposT1aSx3gUwZ0pUuxO+C5P6x9oaA+Rl?= =?iso-8859-1?Q?g0WWBVTtV3NEvOW74a3HfdFw7K80l6tmHzc3beZLTupinnJV9XU1Jbowwl?= =?iso-8859-1?Q?hmcJlT8QUQncr11rXMXabEDCzoe5qHs8ObxkO9ANncK9+ln7jvDsSk76Lu?= =?iso-8859-1?Q?nVoqO3rAbMLyghwKHNOmaa5CX/kCz44hDfTydN23G6kpjjuGV9xAnwIRdG?= =?iso-8859-1?Q?dA6hUSEfVuH+wrjbyBDoqEvNl9/y0jcEwXKOcX1y1ZKaYudbFkanBPri68?= =?iso-8859-1?Q?ScHMB9QJ7ag5tt1mFUfmLHVfS0t8muXvGymvGnU1i2I81EgJXRUaZoVlBj?= =?iso-8859-1?Q?tt4TlrQ0cLAn8QkUHaZgFbAiyFtn3hM7GHCgXIB/DaG7YGKJCNMtwiRJCl?= =?iso-8859-1?Q?EtdFGNDi18kIr/JfY9MZ5e3zseDEIVNizqFzpnNpqu3GFA80qOy6p4v2on?= =?iso-8859-1?Q?oGr247/DMX8WnrONN1C4rHzoCL4yNz6Eo6lITEzYj2Pb2wtpUkBUP8dYnY?= =?iso-8859-1?Q?wWSIv5Mnlcnw38lIxQW6/zv3NBT2lKmFbxKcXJu9X34m19BGsNzeWACmMS?= =?iso-8859-1?Q?Ol3tfnqjWUXHEw/ZHrszTqc4XbV+dvWkqPAtsizh0ril2YmsNI+AUsffAa?= =?iso-8859-1?Q?NRSNT5DUgt8i9rJHFcPPT/ZAOWwQKerz1cIPDbKhDc7+7Ae60O6PiCMzht?= =?iso-8859-1?Q?AECt99vSxyOpPIz4YoJmZo5G6FECPGolJTSyiY/gA6MsPiV1W+IPPQr/p+?= =?iso-8859-1?Q?9AUEjcDbP3VhRMRwyrbWMGTS/cZ2PvAP4zhXQCXuH4Or5/rl7R7IymjWhG?= =?iso-8859-1?Q?QoL8l4d6IZi3xrO5MbbAcOiYaa66goZCGHgUCRflKOqtTgussKPfbLwCPr?= =?iso-8859-1?Q?D8lg0rwWabjd733NjC+ar19xqnWU/8P7G97J2HrdyzGxnndX7SvKOzoEOn?= =?iso-8859-1?Q?h0D0t/mpxewMR2N+u1crygEtD+LxOLdE87VLGfc8o2N8zuqm9QYYTK3GUQ?= =?iso-8859-1?Q?PZvNUVJQmZieio3Ixye0b3X3TA7CamKDgkUxoBnyFcBgwdDv122NLt5Q?= =?iso-8859-1?Q?=3D=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: c2db57ae-5eca-4b1b-6223-08dbe1ec71ce X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:22.2075 (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: lV/8XN5JtV5xDyd5ybGW1cQNnoqS2WBCTcU/B3gHayB9wFWBhOuBJlnqiiQtM49HScsaKOFRsrN5Yx60/hNvzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: ZkmwpVyihCxAPy0swzRY3xH3zcjx1W-y X-Proofpoint-ORIG-GUID: ZkmwpVyihCxAPy0swzRY3xH3zcjx1W-y X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=999 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621043188100005 Content-Type: text/plain; charset="utf-8" The (system-wide) LPI configuration table is held in a table in (guest) memory. To achieve reasonable performance, we cache this data in our struct vgic_irq. If the guest updates the configuration data (which consists of the enable bit and the priority value), it issues an INV or INVALL command to allow us to update our information. Provide functions that update that information for one LPI or all LPIs mapped to a specific collection. Based on Linux commit f9f77af9e2a551 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-its.c | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index af19cf4414..6c726dde3a 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -63,6 +63,54 @@ static struct vgic_its_device *find_its_device(struct vg= ic_its *its, u32 device_ #define VGIC_ITS_TYPER_DEVBITS 16 #define VGIC_ITS_TYPER_ITE_SIZE 8 =20 +#define GIC_LPI_OFFSET 8192 + +#define LPI_PROP_ENABLE_BIT(p) ((p)&LPI_PROP_ENABLED) +#define LPI_PROP_PRIORITY(p) ((p)&0xfc) + +/* + * Reads the configuration data for a given LPI from guest memory and + * updates the fields in struct vgic_irq. + * If filter_vcpu is not NULL, applies only if the IRQ is targeting this + * VCPU. Unconditionally applies if filter_vcpu is NULL. + */ +static int update_lpi_config(struct domain *d, struct vgic_irq *irq, + struct vcpu *filter_vcpu, bool needs_inv) +{ + u64 propbase =3D GICR_PROPBASER_ADDRESS(d->arch.vgic.propbaser); + u8 prop; + int ret; + unsigned long flags; + + ret =3D access_guest_memory_by_gpa(d, propbase + irq->intid - GIC_LPI_= OFFSET, + &prop, 1, false); + + if ( ret ) + return ret; + + spin_lock_irqsave(&irq->irq_lock, flags); + + if ( !filter_vcpu || filter_vcpu =3D=3D irq->target_vcpu ) + { + irq->priority =3D LPI_PROP_PRIORITY(prop); + irq->enabled =3D LPI_PROP_ENABLE_BIT(prop); + + if ( !irq->hw ) + { + vgic_queue_irq_unlock(d, irq, flags); + return 0; + } + } + + spin_unlock_irqrestore(&irq->irq_lock, flags); + + /* GICv4 style VLPIS are not yet supported */ + WARN_ON(irq->hw); + + return 0; +} + + /* * Create a snapshot of the current LPIs targeting @vcpu, so that we can * enumerate those LPIs without holding any lock. --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621039; cv=pass; d=zohomail.com; s=zohoarc; b=O31YkzLIeUIu+4BwtViD6VfBBM7nHMAxW9HcTIamb7vK/FRmWpOJornSEMnVw3Qlhg8jCr9YBlbAC2EHDgue7gtqlYGKW2VtStSdv5Lq7HAMgGaXGH9apGKDN8RpvZDslDomB+OKxXPk0ZLUt89+nu6UPzMYAfOOCCAanPnmPF4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621039; 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=laODZ4Gs+y5E4svUvsfAqE5Iuee5D06nD4w3sS8JL40=; b=as5wsqAag6hJ6ELftlaYhxVEh/McnBjP7xb2fpo02EPXSv84ciMUCSZ9Ye4z12Ftqw5aj8B5z13nCqnmTVO/qHj+YVzjXTIAuRVWrSQ0P7KAzh+Yi1/0Pik4TleG1V0Lr/zeNjwyIQyrc0J7+A7cpbN6ejkSIvNRZd5PYDPkR3k= 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 1699621039277220.72361822987477; Fri, 10 Nov 2023 04:57:19 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630304.983095 (Exim 4.92) (envelope-from ) id 1r1R41-0003nH-Nz; Fri, 10 Nov 2023 12:56:45 +0000 Received: by outflank-mailman (output) from mailman id 630304.983095; Fri, 10 Nov 2023 12:56: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 1r1R41-0003jW-0p; Fri, 10 Nov 2023 12:56:45 +0000 Received: by outflank-mailman (input) for mailman id 630304; Fri, 10 Nov 2023 12:56:41 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3x-0001y0-5v for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:41 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 955dff4d-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:38 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvh025691; Fri, 10 Nov 2023 12:56:31 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:31 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:24 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:24 +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: 955dff4d-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JqZ15/rfG7fUg7DWQvFcGgAW4ZsygIPMMMMH2NnpQ2QbD9HTg8fSrvTTdXe7jmM+uIQrsZbhrAld4MiDbYfBOLhXKvvITC+X2Za6WHC7pny/cYdb3sh5qqqnS1rSLS0cJf4sYzIjjuVtNYPn0AwpGRE2lbdjg4HySewK7S4qRqmkfKAJ1ihVBbeZa0qx5S7A6jnO3L2F/qULaZm5Vs6gHrabRlrvJvbB4v+P7/lMKdtnF0mTvk2u9ma4M61hwpK6bjSIARan0/8d/qDVkbI/ldB+V6s9AMe6QmPxHs53m30MojvQsDb2v2rzwfPjYUPxjMUMwzECWH7mjtoTRaxOkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=laODZ4Gs+y5E4svUvsfAqE5Iuee5D06nD4w3sS8JL40=; b=XglTUcfubP67CF3FVgVD//4DcSaDO5sIZ2vcV89JAWCR5gV8bWX9Pr+q4LkhQMt6V2fy1CaoZ4GOtSEcVbOGzOPPDTaplVSacty3sLcboTR1ywLPfhiDs3Qm5MhHQiPLYZolhdie1EJWE+NyDYLzd9uDo8CNmnGxq2reKcBKmmD3ZD8tJR0WY/2G3XwVdyve9Y4NVzFlFwWfbeIt99W1AOoCaKZ3cDWq43Qc7oFg/RnZLtLD62p61sbKwo71W5DzJMECRK/H1h64FrBl+m4GklrrTUthItvtiS/H3HXUAwxPoYS1DzhPWxWq+GofzZJMeuGfG/LrhQ3E89bwAjPx3Q== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=laODZ4Gs+y5E4svUvsfAqE5Iuee5D06nD4w3sS8JL40=; b=fmyaQZ6MGWsRQn9ye21lXhGFq7RqE8A+azUklOujl22FT0T/eD/FZ3/zJey3dT1q0j4n4o+w7DXMcEwVXv+XL53ymLz0dwDmXW2bGZ2Fp6qrAtceB78sNCr5t0ggOKuoL4/5l7jDxmN7rF7YQ/AD2MGO6VfhxiTrEfyvpfFcMouI0IduFbFX1IU3YSw75bkleei2zfNb+zUNOKRdOZX9bXIUD5bzyLfnOQvaIvg9iAP5jng6sxfjmSAkh4azV5+xWBOVZDCtNpEqMNg7IktmugVOooI+ycW+Aa5MuXvHGHHjkNET/jtnVLhLgBORHBcYkoUteyusqwZQoz4dWGsG7g== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 19/25] arm: new VGIC: its: Add LPI translation cache definition Thread-Topic: [XEN PATCH v2 19/25] arm: new VGIC: its: Add LPI translation cache definition Thread-Index: AQHaE9VOswsQu2Pw50ypJgIWmh5TYw== Date: Fri, 10 Nov 2023 12:56:22 +0000 Message-ID: <8d747db93eb3a2afd4895d8e20b163dcd707bb33.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: 81c3897b-eec6-410e-fd19-08dbe1ec7209 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 3wmlamY3LNFeJ/yJ9+OnohN32gDRJyW9df1JCS98Cb9XNjuosKkTkeGbCq88Z5h68vc1QaixcqKyWsZxEzQipSd0CgHSCR2r675Pc/3J+myzlahiuh4HgJHWvjH01lykZP5JO1OqoqJbRjOPJzBfDuCcf3MUdPpwkbmLF+78c1zB7oDQ2PdmoGQhhcPfsgpcQYjOGRuKp/C3unlp9YBdB6i+neW3Vrl5f+b+w/AZOgvcwPQCA+wLUyh5MP9HRetjy3m0P9mR4MHUh1a+vbUScGrE+R7/AlOl9VDD5J/g+1bph+gKhsND/Gyfhe3q3mtOFXSBHIsHwNo3xZCJb/G2vOBcOazv6vN0Vp3qcZgMogNpxgBV+hlOepPsdhJYdhWbaMAU9j39VGc5/LU2zquB2IQz0cMiU8xiGjo3ItRSWjEpd3CDMZ+YEObWgyIDBbUZSnVZSZoakWJbMtXLBfPs2ni8WWOmO39R1IejZ5BR7zydZqXiwWCVOFeSUXlM8PNmJ9x8LTcwf2UEYIJhqg671eA1igcR7JrWFF+1O4cRjO9H4kB14LbkZZ4OhGYof4AP2MK3wxn8gaJiuagiIeO02OkhfItFnJHp/y9zbgNMXvAj0+LQCc031ADk/gHdSgLx 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?R/riGC6Flf7VgFyhYhrprFxVbRlR5DC2sEkQwjqFyz/I8xqCKMJIZMbQIU?= =?iso-8859-1?Q?VBpiJJcRpHV41U5BkNMFRk1Lk97C0i8jovEn8qKXaU3oPXlBjismK7zEUo?= =?iso-8859-1?Q?hW9CpgHrRaDWQrC/cwocMQArMdmtzuemnoruOWmEDNjkdTDgRRW7BE2bsZ?= =?iso-8859-1?Q?EnWsA2ankLazK8L5v2/miOarBjLOeMh6gToTiIZMsCjambbQkRvVTacGbO?= =?iso-8859-1?Q?HJ0a9UEcaI/xmZw6jvbaJ9GNOs4+10vzq8e6iWHctvk6LPQfgvrGmjAfcO?= =?iso-8859-1?Q?dpfNwV/cBYVFS96R4opmex4rF48nB47RliktO3e7uFVnWb0HREXpmzKk73?= =?iso-8859-1?Q?N308Sa2ARBg1QMVjzQe/ikljoReGFswwqcxAnvo+ASmPTd8AyuZ7ObaeNx?= =?iso-8859-1?Q?TywGzolJRU00bkIZEmQllzu0sKY2guf1sXAQzvTwjDeU18Qmdp59MgZcdj?= =?iso-8859-1?Q?DkvN99V3qTupL5poY9h3t6WfTC9TNr1wUD7clsLx/qJyD94OyZvm4X5rlk?= =?iso-8859-1?Q?CKDV5CTGBDhs7nFY/+K3UKjGQorwTquQuhBCzyTrjJic9r/pn3+Ur9J6sZ?= =?iso-8859-1?Q?Q5mVoCAqVvGfLOspxRjMpCRGsja4MmIC11NnWjKhRc4zdsbYJSuZwl6LW1?= =?iso-8859-1?Q?itXb/fMMv2J/7SJkUcS/QtR5ZjKzqeXM8ELb1SQ4uxYlhM9WphUuYeqnud?= =?iso-8859-1?Q?3Lp7CeCaMAw/1trNAJsy59MVIv2yORaH3JkfwaqQRSfvILJq4oZZwxYa/8?= =?iso-8859-1?Q?v0ELSsHlyeFAKM8LY2KL8UVxvij0VpNgHKc6ra2hd5X9uYvVQ28h1Yvkeh?= =?iso-8859-1?Q?RU3UXghzL2qkf+aaYl/5zZjM/Hfbhx6xLDZHhXICYtmfKWJgdfLG7a4wDX?= =?iso-8859-1?Q?D55o4qnVq5f1GEx2N+uXKEhTQXfXfu7VkhCpchCu/wKomyxK1NGBASyXnl?= =?iso-8859-1?Q?vMzC5B1TSaI0Uek8kbRImfZjQn+FuG/CpxBTwQMrlSudIub3iAyS8iM9k4?= =?iso-8859-1?Q?pDKAYFGLYf02qHmwbQmER7BFUNh5milkpBDOF9t2osNm4SmnYWLj2DFLWK?= =?iso-8859-1?Q?8AAUHBZLEYGfFkAN/3tk3+YbRPVEvt9g532TytIllz6AZAKTEGPfmwofXe?= =?iso-8859-1?Q?1p668FDjiMcv7U3aaI2Gx3vpgSS/0BJmTAKTqINqpz5DzHdPmB1ZfA9VDs?= =?iso-8859-1?Q?xJYAEGLgD3sr0UKEfgT1UBfhlXWfZvMlfTujBmdKUslh04VBJU4c5yh6Yb?= =?iso-8859-1?Q?TKV/7guD0SqsvJkfNH9HC/UKzmhFIuEXBWpHNnSBPJaN2kM3lmRpXWR0hY?= =?iso-8859-1?Q?AdUXtVNJrOsurtX8/8JOa73YdvXlaKLgFM+mesjMXcEjtSYoC3p9CIzqUZ?= =?iso-8859-1?Q?JutJxvuEJn94rIh1GRfhhQHp+J9P5iB6fD9tiYXc4Dy/nZcc5G/crC8xLd?= =?iso-8859-1?Q?bDfPLWVjQ+r/hajQMUScW10rWHhPEJ4LYrDhcWA1Xl0HJy9Y9TplFFK69+?= =?iso-8859-1?Q?wAJMiWrjtu4n7eEcUcWn+kVDwBGhjw36NZlbva/aFG5RqL7Ujj9TGomuTG?= =?iso-8859-1?Q?R8SDdwTNYHPWGV+8XZtAtFzvjhvafqL0mRh20hEmFqBFXGX+55FDKerrOu?= =?iso-8859-1?Q?F3DZnGwju0rDBKnZAMz0McuiOM09NpeyJnlZKW/Ww80E4+osjG6Z9ubg?= =?iso-8859-1?Q?=3D=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: 81c3897b-eec6-410e-fd19-08dbe1ec7209 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:22.5551 (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: uNK0bznj8zP6nR6nMReRLu7c8VqlDBFpFryMu5ht1liYiBjHpBkynuHRj+hUMAGEVa0kRQY4ICVU/jOT9bJp5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: bVLGMpNT3R9t2aZ8pVMOFwQdxOhkIXFl X-Proofpoint-GUID: bVLGMpNT3R9t2aZ8pVMOFwQdxOhkIXFl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=835 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621041309100002 Content-Type: text/plain; charset="utf-8" Add the basic data structure that expresses an MSI to LPI translation as well as the allocation/release hooks. Implement cache invalidation, lookup and storage. The size of the cache is arbitrarily defined as 16*nr_vcpus. This is based on Linux commits 24cab82c34aa6f, 7d825fd6eaa7467, 89489ee9ced8 and 86a7dae884f38 by Marc Zyngier Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/new_vgic.h | 3 + xen/arch/arm/vgic/vgic-its.c | 195 ++++++++++++++++++++++++++++ 2 files changed, 198 insertions(+) diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index d0fd15e154..b038fb7861 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -212,6 +212,9 @@ struct vgic_dist { spinlock_t lpi_list_lock; struct list_head lpi_list_head; unsigned int lpi_list_count; + + /* LPI translation cache */ + struct list_head lpi_translation_cache; }; =20 struct vgic_cpu { diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 6c726dde3a..48dfa09115 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -44,6 +44,14 @@ struct its_ite { u32 event_id; }; =20 +struct vgic_translation_cache_entry { + struct list_head entry; + paddr_t db; + u32 devid; + u32 eventid; + struct vgic_irq *irq; +}; + /* * Find and returns a device in the device table for an ITS. * Must be called with the its_devices_lock mutex held. @@ -152,6 +160,144 @@ int vgic_copy_lpi_list(struct domain *d, struct vcpu = *vcpu, u32 **intid_ptr) return i; } =20 +void __vgic_put_lpi_locked(struct domain *d, struct vgic_irq *irq) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + + if ( !atomic_dec_and_test(&irq->refcount) ) + { + return; + }; + + list_del(&irq->lpi_list); + dist->lpi_list_count--; + + xfree(irq); +} + +static struct vgic_irq *__vgic_its_check_cache(struct vgic_dist *dist, + paddr_t db, u32 devid, + u32 eventid) +{ + struct vgic_translation_cache_entry *cte, *fcte; + + list_for_each_entry(cte, &dist->lpi_translation_cache, entry) + { + /* + * If we hit a NULL entry, there is nothing after this + * point. + */ + if ( !cte->irq ) + break; + + if ( cte->db !=3D db || cte->devid !=3D devid || cte->eventid !=3D= eventid ) + continue; + + /* + * Move this entry to the head, as it is the most + * recently used. + */ + fcte =3D list_first_entry(&dist->lpi_translation_cache, + struct vgic_translation_cache_entry, entry= ); + + if ( fcte->irq !=3D cte->irq ) + list_move(&cte->entry, &dist->lpi_translation_cache); + + return cte->irq; + } + + return NULL; +} + +static struct vgic_irq *vgic_its_check_cache(struct domain *d, paddr_t db, + u32 devid, u32 eventid) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + struct vgic_irq *irq; + + spin_lock(&dist->lpi_list_lock); + irq =3D __vgic_its_check_cache(dist, db, devid, eventid); + spin_unlock(&dist->lpi_list_lock); + + return irq; +} + +static void vgic_its_cache_translation(struct domain *d, struct vgic_its *= its, + u32 devid, u32 eventid, + struct vgic_irq *irq) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + struct vgic_translation_cache_entry *cte; + unsigned long flags; + paddr_t db; + + /* Do not cache a directly injected interrupt */ + if ( irq->hw ) + return; + + spin_lock_irqsave(&dist->lpi_list_lock, flags); + + if ( unlikely(list_empty(&dist->lpi_translation_cache)) ) + goto out; + + /* + * We could have raced with another CPU caching the same + * translation behind our back, so let's check it is not in + * already + */ + db =3D its->vgic_its_base + GITS_TRANSLATER; + if ( __vgic_its_check_cache(dist, db, devid, eventid) ) + goto out; + + /* Always reuse the last entry (LRU policy) */ + cte =3D list_last_entry(&dist->lpi_translation_cache, typeof(*cte), en= try); + + /* + * Caching the translation implies having an extra reference + * to the interrupt, so drop the potential reference on what + * was in the cache, and increment it on the new interrupt. + */ + if ( cte->irq ) + __vgic_put_lpi_locked(d, cte->irq); + + vgic_get_irq_kref(irq); + + cte->db =3D db; + cte->devid =3D devid; + cte->eventid =3D eventid; + cte->irq =3D irq; + + /* Move the new translation to the head of the list */ + list_move(&cte->entry, &dist->lpi_translation_cache); + +out: + spin_unlock_irqrestore(&dist->lpi_list_lock, flags); +} + +void vgic_its_invalidate_cache(struct domain *d) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + struct vgic_translation_cache_entry *cte; + unsigned long flags; + + spin_lock_irqsave(&dist->lpi_list_lock, flags); + + list_for_each_entry(cte, &dist->lpi_translation_cache, entry) + { + /* + * If we hit a NULL entry, there is nothing after this + * point. + */ + if ( !cte->irq ) + break; + + __vgic_put_lpi_locked(d, cte->irq); + cte->irq =3D NULL; + } + + spin_unlock_irqrestore(&dist->lpi_list_lock, flags); +} + /* Requires the its_lock to be held. */ static void its_free_ite(struct domain *d, struct its_ite *ite) { @@ -184,6 +330,8 @@ void vgic_its_free_device(struct vgic_its_device *devic= e) list_for_each_entry_safe(ite, temp, &device->itt_head, ite_list) its_free_ite(d, ite); =20 + vgic_its_invalidate_cache(d); + list_del(&device->dev_list); xfree(device); } @@ -351,6 +499,8 @@ static void vgic_mmio_write_its_ctlr(struct domain *d, = struct vgic_its *its, goto out; =20 its->enabled =3D !!(val & GITS_CTLR_ENABLE); + if ( !its->enabled ) + vgic_its_invalidate_cache(d); =20 /* * Try to process any pending commands. This function bails out early @@ -742,6 +892,48 @@ out: return ret; } =20 +/* Default is 16 cached LPIs per vcpu */ +#define LPI_DEFAULT_PCPU_CACHE_SIZE 16 + +void vgic_lpi_translation_cache_init(struct domain *d) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + unsigned int sz; + int i; + + if ( !list_empty(&dist->lpi_translation_cache) ) + return; + + sz =3D d->max_vcpus * LPI_DEFAULT_PCPU_CACHE_SIZE; + + for ( i =3D 0; i < sz; i++ ) + { + struct vgic_translation_cache_entry *cte; + + /* An allocation failure is not fatal */ + cte =3D xzalloc(struct vgic_translation_cache_entry); + if ( WARN_ON(!cte) ) + break; + + INIT_LIST_HEAD(&cte->entry); + list_add(&cte->entry, &dist->lpi_translation_cache); + } +} + +void vgic_lpi_translation_cache_destroy(struct domain *d) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + struct vgic_translation_cache_entry *cte, *tmp; + + vgic_its_invalidate_cache(d); + + list_for_each_entry_safe(cte, tmp, &dist->lpi_translation_cache, entry) + { + list_del(&cte->entry); + xfree(cte); + } +} + #define INITIAL_BASER_VALUE = \ (GIC_BASER_CACHEABILITY(GITS_BASER, INNER, RaWb) | = \ GIC_BASER_CACHEABILITY(GITS_BASER, OUTER, SameAsInner) | = \ @@ -763,6 +955,8 @@ static int vgic_its_create(struct domain *d, u64 addr) =20 d->arch.vgic.its =3D its; =20 + vgic_lpi_translation_cache_init(d); + spin_lock_init(&its->its_lock); spin_lock_init(&its->cmd_lock); =20 @@ -829,6 +1023,7 @@ void vgic_v3_its_free_domain(struct domain *d) =20 vgic_its_free_device_list(d, its); vgic_its_free_collection_list(d, its); + vgic_lpi_translation_cache_destroy(d); =20 spin_unlock(&d->arch.vgic.its_devices_lock); spin_unlock(&its->its_lock); --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699622638; cv=pass; d=zohomail.com; s=zohoarc; b=KNYwo5kcuvvnp+KciVItERo6CID2K2vPmMaSDrChRUQEbst9BY1+26eybgSBajcqR6CkJqVKQdPzSWYUDjoD1FRPnm6DVtyz6u8lukvZL8vKEtP+GRGEiWsKgLNE9ZX9R45DBaGT5Oj4+XshTp7/YgsK6vJIgPUE9/AWRqCXu0E= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699622638; 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=GaBtTU3W3JWhecnePRAnENvtSLN9jZOi52Wa9GjunN0=; b=aAtPIw2Fw/ZGKML4FMNNYsDVtg+1yLVWrSBQrdPXpU3HRY/SINfYVVDDQfAGEEpFlDDv7mAIYriEkHJiozZmb3H9CdpGH60KXg572lfM3mfakQkotNQsAf3LfnJQySlzyoda1W7dMxOYwdlClUzAlkXTpIhTefdeM7l24bAOlQw= 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 1699622638063551.5353867949331; Fri, 10 Nov 2023 05:23:58 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630398.983260 (Exim 4.92) (envelope-from ) id 1r1RTr-0005dR-48; Fri, 10 Nov 2023 13:23:27 +0000 Received: by outflank-mailman (output) from mailman id 630398.983260; Fri, 10 Nov 2023 13:23: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 1r1RTr-0005dK-0m; Fri, 10 Nov 2023 13:23:27 +0000 Received: by outflank-mailman (input) for mailman id 630398; Fri, 10 Nov 2023 13:23:25 +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 1r1R44-0001y1-D5 for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:48 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 973431d7-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:41 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIuvi025691; Fri, 10 Nov 2023 12:56:32 GMT Received: from eur04-db3-obe.outbound.protection.outlook.com (mail-db3eur04lp2050.outbound.protection.outlook.com [104.47.12.50]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9j2g0qjw-12 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:31 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:24 +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: 973431d7-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IA5yWrwIQdQ7rZA2ELa5iHU3nEdzr4NqRh4qGSDnYCl1MJZwuCXsAk0uUz8xoDoe2TkD+S6SEI7JeZj4rXy1FTIBUCNFkjfSALMEsYBNv2kfHAb5DmTiYcp8K+Yryr2k6GTp4RkusrgXPOz5YdwGvs4ZtYVNpXsK6LL6RhknW6FV1WiXQw3w9jxvhb4CNeyJjEeVbedlr7ntALYlc2/Dv+UyqIJhfIOFDcYMckt0+xbV38H/a4M1pmn8NZh8IMBSn4UYQd45kjxOX3wmxY1ydvdNW7Or1MDRomuy3qpgg2MsnVTRLNt+VDtr00jLjgfbJq7IAt0bQSRB64+QbKILaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GaBtTU3W3JWhecnePRAnENvtSLN9jZOi52Wa9GjunN0=; b=Z02oLteWHaf9lQq3uILkKuaQ1Gaa4yGVuHOPNPZljPmq2zaLz4F6MT8gJSFwtnimXA1KWwYNgnQ/UTJF8rUQsNdPt1aOY0C6KpxEBXI+Hn2gjebn+zwoffK9aUCyvIK7jdFGF5/PW0BwclKyPkiUe42zbA//9w7HfWbW22YERP0myYs6ZX3Axdsnq6E2Ypjxt1Efr2x1pUhslOfHHPobgBLbpRDiYSpOm9N0hMEnvjewYPNDrphtrvVsxh53/Ohg3c66B+KELElv+KzwJ80zTsucSYRiA3QO9ga9HFN5u/h8Vne10QJUuWTi1otARPZW+LWLDblR0WHOoAbMPu7N/w== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GaBtTU3W3JWhecnePRAnENvtSLN9jZOi52Wa9GjunN0=; b=KLDblRrUbzY7F8lpjoj+bl2M0+kg3s1pLUZAGm1vZ8XM1JmMldJSNpOQNq1e68HBAwHPZw0HvZPq2is3sSGZRpc/5lmuDP5lEgk5nXipa5+OURTIm/FBL4HF8/71d59LCpbX0bXWD12xjJijrgu4vKvGuRrP0c7UUGwuQoAJYbxecoAwDTs4F6kvWgJIqgzu8mC+vmYZwyfwAiAQ5j4f9HwGe7YO/2bGBhIJgLbKvqqCAJlEdcz2Rx94vLPZ6vR7V0VUGWaPkOVUUbAxSppx6uyCFCyN5wsydSxO2HCRz8RfqdmXEzUunS4UDTDLjRrl6PCrb0cDIrVNkjvtbWvdbw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 20/25] arm: new VGIC: its: Implement ITS command queue command handlers Thread-Topic: [XEN PATCH v2 20/25] arm: new VGIC: its: Implement ITS command queue command handlers Thread-Index: AQHaE9VODE7u5hYjZ0CdkB0s1bN24A== Date: Fri, 10 Nov 2023 12:56:22 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: be8640a2-c066-4899-35d2-08dbe1ec7243 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iRlzz29Ki72rn4k9f88olgm2W4HjaXBb+hzcW0NUOK+TsimWG1c09CGtGT4Jlwho8eTc6kPpw+TceQoWTAKGJOKvfYgBy/BFL+20rImfyICSpP7Ybah9tKin0ObBN4PGO+/KtI0UGiz9wg9z2B1InIegMyWPcpmwBdavxIKFaAmE3M1Dc+6OH6KrCf/o2YO7vMHzXxxKbmwB4QNz5mRhpMg8URZmxsYyU+92jreRKdGg+ftMHpc/oop7nE4lhrGGdlWJVlltdWaDZK/X5LdzLjRca5uz8nffZxpV9h/s6hX9DmlLOX+m94F+Ast9jmCcVU35REp6jabmZgWxmKjV9GtgRLj5MBZ81MKOsAduaM3y/lidramxxMy3kAiExe2o5AAicphOKG+R1uSlFUm8l3FtazsNOxmGPHHmaIT0snLKZCCIi9Nb07Z0Wk5TyQwLquCjNOYvSIgyBMHtPanFxcW1k2ORhpF1B+jzH8rwxt5y9R57QD5F0F5+/TFgF6/v23CWtWq0byULrTaCIgULHemSdcJk3zbzbsdU4qz3bxIN10Bk2sNfvsnlJYXRano4c3fIWG7iFa1OlzqQ9Yk99B4ry8HwAIvD8sYaPIRC3O03XH/NOYgv2CmaCu9HvMJN 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(30864003)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(66899024)(83380400001)(38070700009)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?Fg7O0xiJySLy0R0PyFHqrEpcPLSNawgF3T8Eqe/NttaTkE3lIZSdZ016v6?= =?iso-8859-1?Q?fqNiZKaH8+wK8oWd/kfKrCfh8Ez3yfn0ZVjv/agBp4lUinkQhwWyFD2aZR?= =?iso-8859-1?Q?jRYDi+3Aklzp4exruHIYcqPHZZgr1c4uz/r7N/JLNhd3s7EjKXm6LZabdv?= =?iso-8859-1?Q?YKBcX63fCfjtrmZEgSEU26qAit5aX6WyzNdSNLvyTXHm6pBUJfnZA1sXe0?= =?iso-8859-1?Q?RKZXon0/wBuXSDSSkRnDVqnq2Ci+j3ypzCN1xZBJtJk4LOdDH5S9iP+b0V?= =?iso-8859-1?Q?jsemcjQmOZN3CpZ0+bxBVxL2hDDXCTaYLpHHzaamR/asXYJLnaeW/t+Uac?= =?iso-8859-1?Q?zBLPKHif8xF8Wmc3MMSbzUw5rZt9Y2jIpwbMPeLC6ZsYikU21ItXS5++Ie?= =?iso-8859-1?Q?GQuYQoO33HmsZEFC7KK8PreoYjS+YGltWkYXo5AIQQ2kSD98cIAwMYxFb9?= =?iso-8859-1?Q?x5HyInSUJRx15c+FOhty1mf9hDSonlLaHYHzdhFdJgeLYUHg8FruUWpAl6?= =?iso-8859-1?Q?dx1OLThfaLO9Iscz7FL8AeRz2HuvQh0Y6Ssk4JM4m1rX8gcBK12Z6PzC+p?= =?iso-8859-1?Q?igdycHiHq9CUZ6dK3kNqMIoREuZqjEG/k8bjtMulRffJRi8BUSfzsJcnV8?= =?iso-8859-1?Q?R9hfPVWyae8W5mLUJTg4UNZNsrKXB7B98uxMBmzRe586wARwzjCYwsSwK9?= =?iso-8859-1?Q?7btb4ZeHlxbfestlt7PI1eUAOcL9V0S6jbrzfWbJLqCI3Tr/brRB7YeMEK?= =?iso-8859-1?Q?W7f4mBRU1XBoB58pzQVQhud972JQbmLLpRDf1pavKLFfhn5z8DQSpbRPZY?= =?iso-8859-1?Q?rvaYbRrdA+TF9Sclffx2epskYnxGtmDZn0xkAItl7Cokv0VvBFjg01shYY?= =?iso-8859-1?Q?5Pfigx6D+EieWmI+sPlB1yWrP5qb65LJeiruLzMwaojMK7KtjkejE91KOT?= =?iso-8859-1?Q?VZ8I23slC0IZheW2ItuX6QVuqpr2MuCXDqWl7xHLpZRMQxbFOB/lIJeNfZ?= =?iso-8859-1?Q?z4uiUlGRc/1I9UgD+tVd5SLTTNtlQhcFSBRXqdF6SJcPCwK0FuUTCsthkY?= =?iso-8859-1?Q?XHjvWRyXLLUdiSAO4YrejOAA67o54gVhGuH28GySvm/uNxILfSGCzxJSgH?= =?iso-8859-1?Q?UNHCYUiwzLWN/7kEKAF+Qlk722oCq5JajqWw8Sx+1eQsBqsSF0nLhp0kj8?= =?iso-8859-1?Q?Dj2JXT7nOOu0FDrWVQOIaB0gm4CdkkYr5lc91LfFJ/rSMSfgv8eM60B63m?= =?iso-8859-1?Q?/9Mxv83YIWQXl5FsL+usFR1+uaPStgf9bvY1JNV6HYuqB7p0K1XDxrtivt?= =?iso-8859-1?Q?wFgg6Qsk4n6IAtMnaunedUWHhifID9m19BLJ6kLNT5P7LfvAD9Z/Go5UnL?= =?iso-8859-1?Q?wMjiUaCKrUAW+DoT03u5Yp+Zk9uT+nBzapH7b76nLXYkj8EnfGU2j1ztlS?= =?iso-8859-1?Q?jU99JImVdQqrveoYMoBkaOHHw+yY+VbHimzaNCvtfr4hA2lioEjoVGTUg4?= =?iso-8859-1?Q?7LU+CflmsA+GhRpdzRWQuRkZ6Y5mbpJR7sJVYCg24jsQ91tmNCyl75VbrK?= =?iso-8859-1?Q?kKhG1Zd07nUKHal25vfNWiGUTiFTfIR9daMOvb/TfK4wHCMjJ7SJQX6rb/?= =?iso-8859-1?Q?jcWfqFAiy5nC1ET+rtCZaBS9ockCCzTb8ClVVqtNLg4BZCmgHHcs4cDA?= =?iso-8859-1?Q?=3D=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: be8640a2-c066-4899-35d2-08dbe1ec7243 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:22.9843 (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: mjgezbWcd7/mIJEc0mNuei3Epdo4FCCCQfL4O8TO6QTRnk+HuE2be879R1gRPnQdZs2J1FWR85yLir6kikq6Hw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-ORIG-GUID: RiuyVqpxzrf-VlRFsunQQEO1ysKircOD X-Proofpoint-GUID: RiuyVqpxzrf-VlRFsunQQEO1ysKircOD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=999 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 bulkscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699622640134100001 Content-Type: text/plain; charset="utf-8" The connection between a device, an event ID, the LPI number and the associated CPU is stored in in-memory tables in a GICv3, but their format is not specified by the spec. Instead software uses a command queue in a ring buffer to let an ITS implementation use its own format. Implement handlers for the various ITS commands and let them store the requested relation into our own data structures. Those data structures are protected by the its_lock mutex. Error handling is very basic at the moment, as we don't have a good way of communicating errors to the guest (usually an SError). The INT command handler is missing from this patch, as we gain the capability of actually injecting MSIs into the guest only later on. Based on Linux commit df9f58fbea9b by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/gic_v3_its.h | 19 + xen/arch/arm/vgic/vgic-its.c | 888 +++++++++++++++++++++++++- xen/arch/arm/vgic/vgic.h | 6 + 3 files changed, 908 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/include/asm/gic_v3_its.h b/xen/arch/arm/include/a= sm/gic_v3_its.h index b408441c6e..cbfd854af6 100644 --- a/xen/arch/arm/include/asm/gic_v3_its.h +++ b/xen/arch/arm/include/asm/gic_v3_its.h @@ -160,6 +160,25 @@ #define GITS_CMD_MOVALL 0x0e #define GITS_CMD_DISCARD 0x0f =20 +/* + * ITS error numbers + */ +#define E_ITS_MOVI_UNMAPPED_INTERRUPT 0x010107 +#define E_ITS_MOVI_UNMAPPED_COLLECTION 0x010109 +#define E_ITS_INT_UNMAPPED_INTERRUPT 0x010307 +#define E_ITS_CLEAR_UNMAPPED_INTERRUPT 0x010507 +#define E_ITS_MAPD_DEVICE_OOR 0x010801 +#define E_ITS_MAPD_ITTSIZE_OOR 0x010802 +#define E_ITS_MAPC_PROCNUM_OOR 0x010902 +#define E_ITS_MAPC_COLLECTION_OOR 0x010903 +#define E_ITS_MAPTI_UNMAPPED_DEVICE 0x010a04 +#define E_ITS_MAPTI_ID_OOR 0x010a05 +#define E_ITS_MAPTI_PHYSICALID_OOR 0x010a06 +#define E_ITS_INV_UNMAPPED_INTERRUPT 0x010c07 +#define E_ITS_INVALL_UNMAPPED_COLLECTION 0x010d09 +#define E_ITS_MOVALL_PROCNUM_OOR 0x010e01 +#define E_ITS_DISCARD_UNMAPPED_INTERRUPT 0x010f07 + #define ITS_DOORBELL_OFFSET 0x10040 #define GICV3_ITS_SIZE SZ_128K #define ITS_TRANSLATION_OFFSET 0x10000 diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 48dfa09115..9a30087d3d 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -52,6 +52,9 @@ struct vgic_translation_cache_entry { struct vgic_irq *irq; }; =20 +#define its_is_collection_mapped(coll) = \ + ((coll) && ((coll)->target_addr !=3D COLLECTION_NOT_MAPPED)) + /* * Find and returns a device in the device table for an ITS. * Must be called with the its_devices_lock mutex held. @@ -71,8 +74,55 @@ static struct vgic_its_device *find_its_device(struct vg= ic_its *its, u32 device_ #define VGIC_ITS_TYPER_DEVBITS 16 #define VGIC_ITS_TYPER_ITE_SIZE 8 =20 +/* + * Find and returns an interrupt translation table entry (ITTE) for a given + * Device ID/Event ID pair on an ITS. + * Must be called with the its_lock mutex held. + */ +static struct its_ite *find_ite(struct vgic_its *its, u32 device_id, + u32 event_id) +{ + struct vgic_its_device *device; + struct its_ite *ite; + + spin_lock(&its->domain->arch.vgic.its_devices_lock); + device =3D find_its_device(its, device_id); + spin_unlock(&its->domain->arch.vgic.its_devices_lock); + if ( device =3D=3D NULL ) + return NULL; + + list_for_each_entry(ite, &device->itt_head, ite_list) + if ( ite->event_id =3D=3D event_id ) + return ite; + + return NULL; +} + +/* To be used as an iterator this macro misses the enclosing parentheses */ +#define for_each_lpi_its(dev, ite, its) = \ + list_for_each_entry(dev, &(its)->device_list, dev_list) = \ + list_for_each_entry(ite, &(dev)->itt_head, ite_list) + #define GIC_LPI_OFFSET 8192 =20 +#define VITS_TYPER_IDBITS 16 +#define VITS_TYPER_DEVBITS 16 +#define VITS_DTE_MAX_DEVID_OFFSET (BIT(14, UL) - 1) +#define VITS_ITE_MAX_EVENTID_OFFSET (BIT(16, UL) - 1) + +static struct its_collection *find_collection(struct vgic_its *its, int co= ll_id) +{ + struct its_collection *collection; + + list_for_each_entry(collection, &its->collection_list, coll_list) + { + if ( coll_id =3D=3D collection->collection_id ) + return collection; + } + + return NULL; +} + #define LPI_PROP_ENABLE_BIT(p) ((p)&LPI_PROP_ENABLED) #define LPI_PROP_PRIORITY(p) ((p)&0xfc) =20 @@ -118,6 +168,156 @@ static int update_lpi_config(struct domain *d, struct= vgic_irq *irq, return 0; } =20 +static int vgic_v3_lpi_sync_pending_status(struct domain *d, struct vgic_i= rq *irq) +{ + struct vcpu *vcpu; + int byte_offset, bit_nr; + paddr_t pendbase, ptr; + bool status; + u8 val; + int ret; + unsigned long flags; + +retry: + vcpu =3D irq->target_vcpu; + if ( !vcpu ) + return 0; + + pendbase =3D GICR_PENDBASER_ADDRESS(vcpu->arch.vgic.pendbaser); + + byte_offset =3D irq->intid / BITS_PER_BYTE; + bit_nr =3D irq->intid % BITS_PER_BYTE; + ptr =3D pendbase + byte_offset; + + ret =3D access_guest_memory_by_gpa(d, ptr, &val, 1, false); + if ( ret ) + return ret; + + status =3D val & (1 << bit_nr); + + spin_lock_irqsave(&irq->irq_lock, flags); + if ( irq->target_vcpu !=3D vcpu ) + { + spin_unlock_irqrestore(&irq->irq_lock, flags); + goto retry; + } + irq->pending_latch =3D status; + vgic_queue_irq_unlock(vcpu->domain, irq, flags); + + if ( status ) + { + /* clear consumed data */ + val &=3D ~(1 << bit_nr); + ret =3D access_guest_memory_by_gpa(d, ptr, &val, 1, true); + if ( ret ) + return ret; + } + return 0; +} + +/* + * Creates a new (reference to a) struct vgic_irq for a given LPI. + * If this LPI is already mapped on another ITS, we increase its refcount + * and return a pointer to the existing structure. + * If this is a "new" LPI, we allocate and initialize a new struct vgic_ir= q. + * This function returns a pointer to the _unlocked_ structure. + */ +static struct vgic_irq *vgic_add_lpi(struct domain *d, struct vgic_its *it= s, + u32 intid, u32 devid, u32 eventid, + struct vcpu *vcpu) +{ + struct vgic_dist *dist =3D &d->arch.vgic; + struct vgic_irq *irq =3D vgic_get_irq(d, NULL, intid), *oldirq; + uint32_t host_lpi; + unsigned long flags; + int ret; + + /* In this case there is no put, since we keep the reference. */ + if ( irq ) + return irq; + + host_lpi =3D gicv3_its_get_host_lpi(its->domain, + its->vgic_its_base + ITS_DOORBELL_OF= FSET, + devid, eventid); + + if ( host_lpi =3D=3D INVALID_LPI ) + return ERR_PTR(-EINVAL); + + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, intid); + + irq =3D xzalloc(struct vgic_irq); + + if ( !irq ) + return ERR_PTR(-ENOMEM); + + memset(irq, 0, sizeof(*irq)); + + INIT_LIST_HEAD(&irq->lpi_list); + INIT_LIST_HEAD(&irq->ap_list); + spin_lock_init(&irq->irq_lock); + + irq->config =3D VGIC_CONFIG_EDGE; + atomic_set(&irq->refcount, 1); + irq->intid =3D intid; + irq->target_vcpu =3D vcpu; + + spin_lock_irqsave(&dist->lpi_list_lock, flags); + + /* + * There could be a race with another vgic_add_lpi(), so we need to + * check that we don't add a second list entry with the same LPI. + */ + list_for_each_entry(oldirq, &dist->lpi_list_head, lpi_list) + { + if ( oldirq->intid !=3D intid ) + continue; + + /* Someone was faster with adding this LPI, lets use that. */ + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI); + irq =3D oldirq; + + /* + * This increases the refcount, the caller is expected to + * call vgic_put_irq() on the returned pointer once it's + * finished with the IRQ. + */ + vgic_get_irq_kref(irq); + + goto out_unlock; + } + + list_add_tail(&irq->lpi_list, &dist->lpi_list_head); + dist->lpi_list_count++; + +out_unlock: + spin_unlock_irqrestore(&dist->lpi_list_lock, flags); + + /* + * We "cache" the configuration table entries in our struct vgic_irq's. + * However we only have those structs for mapped IRQs, so we read in + * the respective config data from memory here upon mapping the LPI. + * + * Should any of these fail, behave as if we couldn't create the LPI + * by dropping the refcount and returning the error. + */ + ret =3D update_lpi_config(d, irq, NULL, false); + if ( ret ) + { + vgic_put_irq(d, irq); + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI); + return ERR_PTR(ret); + } + + ret =3D vgic_v3_lpi_sync_pending_status(d, irq); + if ( ret ) + { + vgic_put_irq(d, irq); + gicv3_lpi_update_host_entry(host_lpi, d->domain_id, INVALID_LPI); + return ERR_PTR(ret); + } + + return irq; +} =20 /* * Create a snapshot of the current LPIs targeting @vcpu, so that we can @@ -160,6 +360,57 @@ int vgic_copy_lpi_list(struct domain *d, struct vcpu *= vcpu, u32 **intid_ptr) return i; } =20 +static int update_affinity(struct vgic_irq *irq, struct vcpu *vcpu) +{ + int ret =3D 0; + unsigned long flags; + + spin_lock_irqsave(&irq->irq_lock, flags); + irq->target_vcpu =3D vcpu; + spin_unlock_irqrestore(&irq->irq_lock, flags); + + /* GICv4 style VLPIS are not yet supported */ + WARN_ON(irq->hw); + + return ret; +} + +/* + * Promotes the ITS view of affinity of an ITTE (which redistributor this = LPI + * is targeting) to the VGIC's view, which deals with target VCPUs. + * Needs to be called whenever either the collection for a LPIs has + * changed or the collection itself got retargeted. + */ +static void update_affinity_ite(struct domain *d, struct its_ite *ite) +{ + struct vcpu *vcpu; + + if ( !its_is_collection_mapped(ite->collection) ) + return; + + vcpu =3D d->vcpu[ite->collection->target_addr]; + update_affinity(ite->irq, vcpu); +} + +/* + * Updates the target VCPU for every LPI targeting this collection. + * Must be called with the its_lock mutex held. + */ +static void update_affinity_collection(struct domain *d, struct vgic_its *= its, + struct its_collection *coll) +{ + struct vgic_its_device *device; + struct its_ite *ite; + + for_each_lpi_its(device, ite, its) + { + if ( !ite->collection || coll !=3D ite->collection ) + continue; + + update_affinity_ite(d, ite); + } +} + void __vgic_put_lpi_locked(struct domain *d, struct vgic_irq *irq) { struct vgic_dist *dist =3D &d->arch.vgic; @@ -175,6 +426,7 @@ void __vgic_put_lpi_locked(struct domain *d, struct vgi= c_irq *irq) xfree(irq); } =20 + static struct vgic_irq *__vgic_its_check_cache(struct vgic_dist *dist, paddr_t db, u32 devid, u32 eventid) @@ -298,6 +550,18 @@ void vgic_its_invalidate_cache(struct domain *d) spin_unlock_irqrestore(&dist->lpi_list_lock, flags); } =20 +static u32 max_lpis_propbaser(u64 propbaser) +{ + int nr_idbits =3D (propbaser & 0x1f) + 1; + + return 1U << min(nr_idbits, INTERRUPT_ID_BITS_ITS); +} + +static u64 its_cmd_mask_field(u64 *its_cmd, int word, int shift, int size) +{ + return (le64_to_cpu(its_cmd[word]) >> shift) & (BIT(size, ULL) - 1); +} + /* Requires the its_lock to be held. */ static void its_free_ite(struct domain *d, struct its_ite *ite) { @@ -315,6 +579,194 @@ static void its_free_ite(struct domain *d, struct its= _ite *ite) xfree(ite); } =20 +/* Must be called with its_lock mutex held */ +static struct its_ite *vgic_its_alloc_ite(struct vgic_its_device *device, + struct its_collection *collectio= n, + u32 event_id) +{ + struct its_ite *ite; + + ite =3D xzalloc(struct its_ite); + if ( !ite ) + return ERR_PTR(-ENOMEM); + + ite->event_id =3D event_id; + ite->collection =3D collection; + + list_add_tail(&ite->ite_list, &device->itt_head); + return ite; +} + +#define its_cmd_get_command(cmd) its_cmd_mask_field(cmd, 0, 0, 8) +#define its_cmd_get_deviceid(cmd) its_cmd_mask_field(cmd, 0, 32, 32) +#define its_cmd_get_size(cmd) (its_cmd_mask_field(cmd, 1, 0, 5) + 1) +#define its_cmd_get_id(cmd) its_cmd_mask_field(cmd, 1, 0, 32) +#define its_cmd_get_physical_id(cmd) its_cmd_mask_field(cmd, 1, 32, 32) +#define its_cmd_get_collection(cmd) its_cmd_mask_field(cmd, 2, 0, 16) +#define its_cmd_get_ittaddr(cmd) (its_cmd_mask_field(cmd, 2, 8, 44) <<= 8) +#define its_cmd_get_target_addr(cmd) its_cmd_mask_field(cmd, 2, 16, 32) +#define its_cmd_get_validbit(cmd) its_cmd_mask_field(cmd, 2, 63, 1) + +/* + * Check whether a guest physical address is owned by it +*/ +static bool __is_visible_gfn_locked(struct vgic_its *its, paddr_t gpa) +{ + gfn_t gfn =3D gaddr_to_gfn(gpa); + volatile struct domain *d; + struct page_info *page; + + page =3D mfn_to_page(gfn_to_mfn(its->domain, gfn)); + if ( !page ) + return false; + + d =3D page_get_owner(page); + if ( !d ) + return false; + + return d =3D=3D its->domain; +} + +/* + * Check whether an event ID can be stored in the corresponding Interrupt + * Translation Table, which starts at device->itt_addr. + */ +static bool vgic_its_check_event_id(struct vgic_its *its, + struct vgic_its_device *device, u32 ev= ent_id) +{ + int ite_esz =3D VGIC_ITS_TYPER_ITE_SIZE; + paddr_t gpa; + + /* max table size is: BIT_ULL(device->num_eventid_bits) * ite_esz */ + if ( event_id >=3D BIT(device->num_eventid_bits, ULL) ) + return false; + + gpa =3D (paddr_t)device->itt_addr + event_id * ite_esz; + return __is_visible_gfn_locked(its, gpa); +} + +/* + * Check whether an ID can be stored into the corresponding guest table. + * For a direct table this is pretty easy, but gets a bit nasty for + * indirect tables. We check whether the resulting guest physical address + * is actually valid (covered by a memslot and guest accessible). + * For this we have to read the respective first level entry. + */ +static bool vgic_its_check_id(struct vgic_its *its, u64 baser, u32 id, + paddr_t *eaddr) +{ + int l1_tbl_size =3D GITS_BASER_NR_PAGES(baser) * SZ_64K; + u64 indirect_ptr, type =3D GITS_BASER_TYPE(baser); + paddr_t base =3D GITS_BASER_ADDR_48_to_52(baser); + int esz =3D GITS_BASER_ENTRY_SIZE(baser); + int index; + + switch ( type ) + { + case GITS_BASER_TYPE_DEVICE: + if ( id >=3D BIT(VITS_TYPER_DEVBITS, ULL) ) + return false; + break; + case GITS_BASER_TYPE_COLLECTION: + /* as GITS_TYPER.CIL =3D=3D 0, ITS supports 16-bit collection ID */ + if ( id >=3D BIT(16, ULL) ) + return false; + break; + default: + return false; + } + + if ( !(baser & GITS_BASER_INDIRECT) ) + { + paddr_t addr; + + if ( id >=3D (l1_tbl_size / esz) ) + return false; + + addr =3D base + id * esz; + + if ( eaddr ) + *eaddr =3D addr; + + return __is_visible_gfn_locked(its, addr); + } + + /* calculate and check the index into the 1st level */ + index =3D id / (SZ_64K / esz); + if ( index >=3D (l1_tbl_size / sizeof(u64)) ) + return false; + + /* Each 1st level entry is represented by a 64-bit value. */ + if ( access_guest_memory_by_gpa(its->domain, + base + index * sizeof(indirect_ptr), + &indirect_ptr, sizeof(indirect_ptr), 0= ) ) + return false; + + indirect_ptr =3D le64_to_cpu(indirect_ptr); + + /* check the valid bit of the first level entry */ + if ( !(indirect_ptr & BIT(63, ULL)) ) + return false; + + /* Mask the guest physical address and calculate the frame number. */ + indirect_ptr &=3D GENMASK_ULL(51, 16); + + /* Find the address of the actual entry */ + index =3D id % (SZ_64K / esz); + indirect_ptr +=3D index * esz; + + if ( eaddr ) + *eaddr =3D indirect_ptr; + + return __is_visible_gfn_locked(its, indirect_ptr); +} + +/* + * Add a new collection into the ITS collection table. + * Returns 0 on success, and a negative error value for generic errors. + */ +static int vgic_its_alloc_collection(struct vgic_its *its, + struct its_collection **colp, u32 col= l_id) +{ + struct its_collection *collection; + + collection =3D xzalloc(struct its_collection); + if ( !collection ) + return -ENOMEM; + + collection->collection_id =3D coll_id; + collection->target_addr =3D COLLECTION_NOT_MAPPED; + + list_add_tail(&collection->coll_list, &its->collection_list); + *colp =3D collection; + + return 0; +} + + +static void vgic_its_free_collection(struct vgic_its *its, u32 coll_id) +{ + struct its_collection *collection; + struct vgic_its_device *device; + struct its_ite *ite; + + /* + * Clearing the mapping for that collection ID removes the + * entry from the list. If there wasn't any before, we can + * go home early. + */ + collection =3D find_collection(its, coll_id); + if ( !collection ) + return; + + for_each_lpi_its( device, ite, its) + if ( ite->collection && ite->collection->collection_id =3D=3D coll= _id ) + ite->collection =3D NULL; + + list_del(&collection->coll_list); + xfree(collection); +} + /* Requires the its_devices_lock to be held. */ void vgic_its_free_device(struct vgic_its_device *device) { @@ -352,10 +804,7 @@ static void vgic_its_free_collection_list(struct domai= n *d, struct its_collection *cur, *temp; =20 list_for_each_entry_safe(cur, temp, &its->collection_list, coll_list) - { - list_del(&cur->coll_list); - xfree(cur); - } + vgic_its_free_collection(its, cur->collection_id); } =20 /* Must be called with its_devices_lock mutex held */ @@ -419,6 +868,390 @@ void vgic_its_delete_device(struct domain *d, struct = vgic_its_device *its_dev) list_del(&its_dev->dev_list); } =20 +/* + * MAPD maps or unmaps a device ID to Interrupt Translation Tables (ITTs). + * Must be called with the its_lock mutex held. + */ + +static int vgic_its_cmd_handle_mapd(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + uint32_t guest_devid =3D its_cmd_get_deviceid(its_cmd); + bool valid =3D its_cmd_get_validbit(its_cmd); + u8 num_eventid_bits =3D its_cmd_get_size(its_cmd); + paddr_t itt_addr =3D its_cmd_get_ittaddr(its_cmd); + int ret =3D 0; + struct vgic_its_device *device; + + if ( !vgic_its_check_id(its, its->baser_device_table, guest_devid, NUL= L) ) + return E_ITS_MAPD_DEVICE_OOR; + + if ( valid && num_eventid_bits > VITS_TYPER_IDBITS ) + return E_ITS_MAPD_ITTSIZE_OOR; + + /* + * There is no easy and clean way for Xen to know the ITS device ID of= a + * particular (PCI) device, so we have to rely on the guest telling + * us about it. For *now* we are just using the device ID *Dom0* uses, + * because the driver there has the actual knowledge. + * Eventually this will be replaced with a dedicated hypercall to + * announce pass-through of devices. + */ + if ( is_hardware_domain(its->domain) ) + { + ret =3D gicv3_its_map_guest_device(its->domain, its->doorbell_addr= ess, + guest_devid, + its->vgic_its_base + ITS_DOORBELL_= OFFSET, + guest_devid, BIT(num_eventid_bits,= UL), + valid); + } + + if ( !ret && valid ) { + device =3D vgic_its_get_device(d, its->vgic_its_base + ITS_DOORBEL= L_OFFSET, guest_devid); + + device->itt_addr =3D (void *)itt_addr; + device->num_eventid_bits =3D num_eventid_bits; + } + + return ret; +} + +/* + * The MAPC command maps collection IDs to redistributors. + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_mapc(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + u16 coll_id; + u32 target_addr; + struct its_collection *collection; + bool valid; + + valid =3D its_cmd_get_validbit(its_cmd); + coll_id =3D its_cmd_get_collection(its_cmd); + target_addr =3D its_cmd_get_target_addr(its_cmd); + + if ( target_addr >=3D d->max_vcpus ) + return E_ITS_MAPC_PROCNUM_OOR; + + if ( !valid ) + { + vgic_its_free_collection(its, coll_id); + vgic_its_invalidate_cache(d); + } + else + { + collection =3D find_collection(its, coll_id); + + if ( !collection ) + { + int ret; + + if ( !vgic_its_check_id(its, its->baser_coll_table, coll_id, N= ULL) ) + return E_ITS_MAPC_COLLECTION_OOR; + + ret =3D vgic_its_alloc_collection(its, &collection, coll_id); + if ( ret ) + return ret; + collection->target_addr =3D target_addr; + } + else + { + collection->target_addr =3D target_addr; + update_affinity_collection(d, its, collection); + } + } + + return 0; +} + + +/* + * The MAPTI and MAPI commands map LPIs to ITTEs. + * Must be called with its_lock mutex held. + */ +static int vgic_its_cmd_handle_mapi(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + u32 device_id =3D its_cmd_get_deviceid(its_cmd); + u32 event_id =3D its_cmd_get_id(its_cmd); + u32 coll_id =3D its_cmd_get_collection(its_cmd); + struct its_ite *ite; + struct vcpu *vcpu =3D NULL; + struct vgic_its_device *device; + struct its_collection *collection, *new_coll =3D NULL; + struct vgic_irq *irq; + int lpi_nr; + + spin_lock(&d->arch.vgic.its_devices_lock); + device =3D find_its_device(its, device_id); + spin_unlock(&d->arch.vgic.its_devices_lock); + if ( !device ) + return E_ITS_MAPTI_UNMAPPED_DEVICE; + + if ( !vgic_its_check_event_id(its, device, event_id) ) + return E_ITS_MAPTI_ID_OOR; + + if ( its_cmd_get_command(its_cmd) =3D=3D GITS_CMD_MAPTI ) + lpi_nr =3D its_cmd_get_physical_id(its_cmd); + else + lpi_nr =3D event_id; + if ( lpi_nr < GIC_LPI_OFFSET || + lpi_nr >=3D max_lpis_propbaser(d->arch.vgic.propbaser) ) + return E_ITS_MAPTI_PHYSICALID_OOR; + + /* If there is an existing mapping, behavior is UNPREDICTABLE. */ + if ( find_ite(its, device_id, event_id) ) + return 0; + + collection =3D find_collection(its, coll_id); + if ( !collection ) + { + int ret; + + if ( !vgic_its_check_id(its, its->baser_coll_table, coll_id, NULL)= ) + return E_ITS_MAPC_COLLECTION_OOR; + + ret =3D vgic_its_alloc_collection(its, &collection, coll_id); + if ( ret ) + return ret; + new_coll =3D collection; + } + + ite =3D vgic_its_alloc_ite(device, collection, event_id); + if ( IS_ERR(ite) ) + { + if ( new_coll ) + vgic_its_free_collection(its, coll_id); + return PTR_ERR(ite); + } + + if ( its_is_collection_mapped(collection) ) + vcpu =3D d->vcpu[collection->target_addr]; + + irq =3D vgic_add_lpi(d, its, lpi_nr, device_id, event_id, vcpu); + if ( IS_ERR(irq) ) + { + if ( new_coll ) + vgic_its_free_collection(its, coll_id); + its_free_ite(d, ite); + return PTR_ERR(irq); + } + ite->irq =3D irq; + + return 0; +} + +/* + * The MOVI command moves an ITTE to a different collection. + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_movi(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + u32 device_id =3D its_cmd_get_deviceid(its_cmd); + u32 event_id =3D its_cmd_get_id(its_cmd); + u32 coll_id =3D its_cmd_get_collection(its_cmd); + struct vcpu *vcpu; + struct its_ite *ite; + struct its_collection *collection; + + ite =3D find_ite(its, device_id, event_id); + if ( !ite ) + return E_ITS_MOVI_UNMAPPED_INTERRUPT; + + if ( !its_is_collection_mapped(ite->collection) ) + return E_ITS_MOVI_UNMAPPED_COLLECTION; + + collection =3D find_collection(its, coll_id); + if ( !its_is_collection_mapped(collection) ) + return E_ITS_MOVI_UNMAPPED_COLLECTION; + + ite->collection =3D collection; + vcpu =3D d->vcpu[collection->target_addr]; + + vgic_its_invalidate_cache(d); + + return update_affinity(ite->irq, vcpu); +} + +/* + * The DISCARD command frees an Interrupt Translation Table Entry (ITTE). + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_discard(struct domain *d, struct vgic_its *= its, + u64 *its_cmd) +{ + u32 device_id =3D its_cmd_get_deviceid(its_cmd); + u32 event_id =3D its_cmd_get_id(its_cmd); + struct its_ite *ite; + + ite =3D find_ite(its, device_id, event_id); + if ( ite && its_is_collection_mapped(ite->collection) ) + { + /* + * Though the spec talks about removing the pending state, we + * don't bother here since we clear the ITTE anyway and the + * pending state is a property of the ITTE struct. + */ + vgic_its_invalidate_cache(d); + + its_free_ite(d, ite); + return 0; + } + + return E_ITS_DISCARD_UNMAPPED_INTERRUPT; +} + +/* + * The CLEAR command removes the pending state for a particular LPI. + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_clear(struct domain *d, struct vgic_its *it= s, + u64 *its_cmd) +{ + u32 device_id =3D its_cmd_get_deviceid(its_cmd); + u32 event_id =3D its_cmd_get_id(its_cmd); + struct its_ite *ite; + + ite =3D find_ite(its, device_id, event_id); + if ( !ite ) + return E_ITS_CLEAR_UNMAPPED_INTERRUPT; + + ite->irq->pending_latch =3D false; + + /* GICv4 style VLPIS are not yet supported */ + WARN_ON(ite->irq->hw); + + return 0; +} + +/* + * The MOVALL command moves the pending state of all IRQs targeting one + * redistributor to another. We don't hold the pending state in the VCPUs, + * but in the IRQs instead, so there is really not much to do for us here. + * However the spec says that no IRQ must target the old redistributor + * afterwards, so we make sure that no LPI is using the associated target_= vcpu. + * This command affects all LPIs in the system that target that redistribu= tor. + */ +static int vgic_its_cmd_handle_movall(struct domain *d, struct vgic_its *i= ts, + u64 *its_cmd) +{ + u32 target1_addr =3D its_cmd_get_target_addr(its_cmd); + u32 target2_addr =3D its_cmd_mask_field(its_cmd, 3, 16, 32); + struct vcpu *vcpu1, *vcpu2; + struct vgic_irq *irq; + u32 *intids; + int irq_count, i; + + if ( target1_addr >=3D d->max_vcpus || target2_addr >=3D d->max_vcpus ) + return E_ITS_MOVALL_PROCNUM_OOR; + + if ( target1_addr =3D=3D target2_addr ) + return 0; + + vcpu1 =3D d->vcpu[target1_addr]; + vcpu2 =3D d->vcpu[target2_addr]; + + irq_count =3D vgic_copy_lpi_list(d, vcpu1, &intids); + if ( irq_count < 0 ) + return irq_count; + + for ( i =3D 0; i < irq_count; i++ ) + { + irq =3D vgic_get_irq(d, NULL, intids[i]); + + update_affinity(irq, vcpu2); + + vgic_put_irq(d, irq); + } + + vgic_its_invalidate_cache(d); + + xfree(intids); + return 0; +} + +int vgic_its_inv_lpi(struct domain *d, struct vgic_irq *irq) +{ + return update_lpi_config(d, irq, NULL, true); +} + +/* + * The INV command syncs the configuration bits from the memory table. + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_inv(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + u32 device_id =3D its_cmd_get_deviceid(its_cmd); + u32 event_id =3D its_cmd_get_id(its_cmd); + struct its_ite *ite; + + ite =3D find_ite(its, device_id, event_id); + if ( !ite ) + return E_ITS_INV_UNMAPPED_INTERRUPT; + + return vgic_its_inv_lpi(d, ite->irq); +} + +/** + * vgic_its_invall - invalidate all LPIs targetting a given vcpu + * @vcpu: the vcpu for which the RD is targetted by an invalidation + * + * Contrary to the INVALL command, this targets a RD instead of a + * collection, and we don't need to hold the its_lock, since no ITS is + * involved here. + */ +int vgic_its_invall(struct vcpu *vcpu) +{ + struct domain *d =3D vcpu->domain; + int irq_count, i =3D 0; + u32 *intids; + + irq_count =3D vgic_copy_lpi_list(d, vcpu, &intids); + if ( irq_count < 0 ) + return irq_count; + + for ( i =3D 0; i < irq_count; i++ ) + { + struct vgic_irq *irq =3D vgic_get_irq(d, NULL, intids[i]); + if ( !irq ) + continue; + update_lpi_config(d, irq, vcpu, false); + vgic_put_irq(d, irq); + } + + xfree(intids); + return 0; +} + +/* + * The INVALL command requests flushing of all IRQ data in this collection. + * Find the VCPU mapped to that collection, then iterate over the VM's list + * of mapped LPIs and update the configuration for each IRQ which targets + * the specified vcpu. The configuration will be read from the in-memory + * configuration table. + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_invall(struct domain *d, struct vgic_its *i= ts, + u64 *its_cmd) +{ + u32 coll_id =3D its_cmd_get_collection(its_cmd); + struct its_collection *collection; + struct vcpu *vcpu; + + collection =3D find_collection(its, coll_id); + if ( !its_is_collection_mapped(collection) ) + return E_ITS_INVALL_UNMAPPED_COLLECTION; + + vcpu =3D d->vcpu[collection->target_addr]; + vgic_its_invall(vcpu); + + return 0; +} + /* * This function is called with the its_cmd lock held, but the ITS data * structure lock dropped. @@ -426,8 +1259,53 @@ void vgic_its_delete_device(struct domain *d, struct = vgic_its_device *its_dev) static int vgic_its_handle_command(struct domain *d, struct vgic_its *its, u64 *its_cmd) { + int ret =3D -ENODEV; + + spin_lock(&its->its_lock); + switch ( its_cmd_get_command(its_cmd) ) + { + case GITS_CMD_MAPD: + ret =3D vgic_its_cmd_handle_mapd(d, its, its_cmd); + break; + case GITS_CMD_MAPC: + ret =3D vgic_its_cmd_handle_mapc(d, its, its_cmd); + break; + case GITS_CMD_MAPI: + ret =3D vgic_its_cmd_handle_mapi(d, its, its_cmd); + break; + case GITS_CMD_MAPTI: + ret =3D vgic_its_cmd_handle_mapi(d, its, its_cmd); + break; + case GITS_CMD_MOVI: + ret =3D vgic_its_cmd_handle_movi(d, its, its_cmd); + break; + case GITS_CMD_DISCARD: + ret =3D vgic_its_cmd_handle_discard(d, its, its_cmd); + break; + case GITS_CMD_CLEAR: + ret =3D vgic_its_cmd_handle_clear(d, its, its_cmd); + break; + case GITS_CMD_MOVALL: + ret =3D vgic_its_cmd_handle_movall(d, its, its_cmd); + break; + case GITS_CMD_INV: + ret =3D vgic_its_cmd_handle_inv(d, its, its_cmd); + break; + case GITS_CMD_INVALL: + ret =3D vgic_its_cmd_handle_invall(d, its, its_cmd); + break; + case GITS_CMD_SYNC: + /* we ignore this command: we are in sync all of the time */ + ret =3D 0; + break; + default: + printk("Unknown GITS command\n"); + ret =3D -EINVAL; + break; + } + spin_unlock(&its->its_lock); =20 - return -ENODEV; + return ret; } =20 #define ITS_CMD_BUFFER_SIZE(baser) ((((baser)&0xff) + 1) << 12) diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index a14b519f77..2bcc62432a 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -29,6 +29,7 @@ #define IS_VGIC_ADDR_UNDEF(_x) ((_x) =3D=3D VGIC_ADDR_UNDEF) =20 #define INTERRUPT_ID_BITS_SPIS 10 +#define INTERRUPT_ID_BITS_ITS 16 #define VGIC_PRI_BITS 5 =20 #define vgic_irq_is_sgi(intid) ((intid) < VGIC_NR_SGIS) @@ -77,6 +78,7 @@ void vgic_v3_populate_lr(struct vcpu *vcpu, struct vgic_i= rq *irq, int lr); void vgic_v3_enable(struct vcpu *vcpu); int vgic_v3_map_resources(struct domain *d); bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, union hsr hsr); +bool vgic_lpis_enabled(struct vcpu *vcpu); unsigned int vgic_v3_init_dist_iodev(struct vgic_io_device *dev); int vgic_v3_set_redist_base(struct domain *d, u32 index, u64 addr, u32 cou= nt); int vgic_register_redist_iodev(struct vcpu *vcpu); @@ -111,6 +113,10 @@ static inline int vgic_v3_set_redist_base(struct domai= n *d, u32 index, u64 addr, { return 0; } +static inline bool vgic_lpis_enabled(struct vcpu *vcpu) +{ + return false; +} static inline int vgic_register_redist_iodev(struct vcpu *vcpu) { return 0; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621038; cv=pass; d=zohomail.com; s=zohoarc; b=eCO7ysSr/jE1yweBlQIlXH9Z8VdZMY7kTlMOUaxnUVQ+BOc3XMY4KPoK0I6Z5tpzlPf4M3N0q9kMd4xrHJr0udYF/KM2ITM+F22RW/W5+12hx+49fShp4tXYTMb/47UFhBQzqmn7UUXJ51a3CI0KfeY8TI/LCiPqO3yU9AU2nzc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621038; 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=9AzYgyWYOamJy7GvHjg0RF9EEsQKL3zTFRWpYK3zu7E=; b=Ld7Gfc/eiEJwTrZ1wKpor/av/XvDnWolZqfz12+hQCephmpDnc+gIHScy+jU6IH2yYwImOFHnpRTJboJYLcxAnafi02pnxgHIx5InUtnNSdSFGILDnWKRMkwn0we65tjLO6Dp4MN3CFBAQZgZcVFeRR24hja/p0RznC4yvdkX2I= 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 1699621038048595.836476361846; Fri, 10 Nov 2023 04:57:18 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630305.983104 (Exim 4.92) (envelope-from ) id 1r1R42-000414-Nx; Fri, 10 Nov 2023 12:56:46 +0000 Received: by outflank-mailman (output) from mailman id 630305.983104; Fri, 10 Nov 2023 12:56:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R42-0003xK-6X; Fri, 10 Nov 2023 12:56:46 +0000 Received: by outflank-mailman (input) for mailman id 630305; Fri, 10 Nov 2023 12:56:42 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3y-0001y0-64 for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:42 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 96644d25-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:39 +0100 (CET) Received: from pps.filterd (m0174677.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACIeem019156; Fri, 10 Nov 2023 12:56:32 GMT Received: from eur01-db5-obe.outbound.protection.outlook.com (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3u9kkyram6-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:31 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by DB3PR0302MB9063.eurprd03.prod.outlook.com (2603:10a6:10:43d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Fri, 10 Nov 2023 12:56:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:25 +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: 96644d25-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d8K0++DB6FDAmKoodfzo77guBfpDH4ZClDrvfuJLhNYc3G52jI+kNwULGGtEBqWPVE9TWAqqR2R4t0YE0PtZMnlud9jKxofXKSAo1pEut1kPaQI27FZRgAuxkdUQNFnEe+9230LnNlb0JNiFOpX2jryY+ClAOGrZY8EdHuGZ9hrHK/+TvJFSkl8kfRPS/A0SvHbUaRaryPDbB7l+RmxL/nq+rZaMuRYquFQS/Pye7cEGoKC30iWKTf0tAX2tIsDmh3v7N6EzM0fQ2/a8BNX8Xb7OIMQgALDrJ3lSlX6va7MK2lVUWs4BZtPJLPNvuHzbX9BpgXYWzZ8dU0zYhERCNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9AzYgyWYOamJy7GvHjg0RF9EEsQKL3zTFRWpYK3zu7E=; b=VFlwZk41fKH8FBqZTd7QsbRex4gr20qX7qXePy8WFj9THl/DG6LhnIEOunEK9CsiZboMz7JIOg65xQ3OifFtUZI5E9rvNinmoBox3NSogNj4ogAXHusTS3KJW8EZl6rf6y3iv4/zzsGqUG8YSAioHECOb8HxITT+HEqZqDA6yxnK/2C6I4uMyJOti3P84biJmJZVEoVGxIqFWYRN8bAid95imyfTJDa6qMs+sg6+zucCuZPh9VUmJdzBDJKPXTNYJORvXU3i003BJRb1ATEIoBH1GZmjBc7x8uvD2EUKP8dm9JrPd+qScBlGlzNZlnw8wrvSbWyr8v+U0i6djATeCw== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9AzYgyWYOamJy7GvHjg0RF9EEsQKL3zTFRWpYK3zu7E=; b=At1lufd+rzPWVrUMrppcQ+OQN1GRfSffBsqbxrzM7fTRGQAinzw6uLTMzw56xDUzuehRFIxIQ8FJC4SCtwltLjJJOAukgT82lMfb9MfHxvDJaw0/gPLLnntgDJxbmhFaTirt1Auw1LYzeyNWiSXCB3RMnn9ESy4dQqeA/BQKHy7KYXybxZ/sJ/qb1IZgN96/t7q9pK4Kb6MQTC+vdI1s3R8A1EwiSWfT4dfHZshgP/cnoVXzhp6+EHnc6eSnFxykQij8jkZzmdb9WOrnh3OzczKNVPXmb7HanS/vwW9DvJPXBp7McTiA/Dq6EvisvK7wFPJeUsmZgmS4m5EwQRxZmw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 21/25] arm: new VGIC: its: Implement MSI injection in ITS emulation Thread-Topic: [XEN PATCH v2 21/25] arm: new VGIC: its: Implement MSI injection in ITS emulation Thread-Index: AQHaE9VOmjckIYPQPEGT+3z3jWwEZg== Date: Fri, 10 Nov 2023 12:56:23 +0000 Message-ID: <6bb112c2232169798e5110f710cb394071848e74.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|DB3PR0302MB9063:EE_ x-ms-office365-filtering-correlation-id: a2246fe7-5184-457d-bc8c-08dbe1ec728a x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iS5mV7BWfFibvAKhPuyaZovC+NDnL8aIn71qyQflUa3Vevdn8RiPPA3ehvfkDZUaU7EsICw8WNIIv2cYD5Pyr4ROAU5ruMwVIHqbSbmJTbkopJoOBuClO+nSjMmdj2ydK7bkhuL8VzNP7VEmajj+o4nhMEfFBSw8iFrwRZEvpDKPDEGL6o452NXu20TiQ8uJRfmjiB0eXjtUFDCdjb3zXVp80AgIPpoFSt6yu+Co6aXIV/jhpt3Nx2hR+mVQZCNpBSlqjQKN/RHCizoINjHlxbX00n1SYVahGKPwMoCgTzvuE/MzOhwhJDM2n5aHugJL/Q0rs8TV8a63WWCwkL8moFCUgMmtDKfhQbrVokTuQVkAtHHgRw/XPgDyewm54ymBPLnWLY93KDb+UxoASL/5hKn/ox6sHljIQfvsJHlkkEr+GnI5b536O7hSgTmqH5k4UAsD5NMexq1zGdCBaLmhdJIpRTu2RzKcVrNwug1wVXDxStJrugQxA/VZyio0zh8WaUsQD/VOMXHH+k9jpT1ULrqu5fSckUcCgGwMAb3qkMnNG8Gv50xeExUjkGFiighxg+4qsnEzDJCN9UDnwYss4ZksjhPSkcvjZPCMU8eLDjogU0HZjwCtuwhFn++lEf7i 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:(13230031)(136003)(346002)(396003)(366004)(376002)(39860400002)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66556008)(86362001)(6512007)(6506007)(66946007)(66446008)(36756003)(66476007)(8936002)(76116006)(91956017)(8676002)(71200400001)(38100700002)(4326008)(26005)(5660300002)(6916009)(2616005)(6486002)(64756008)(316002)(478600001)(54906003)(2906002)(122000001)(41300700001)(83380400001)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?4K4llUywAaHNaoemyqCkK3lJf1Scb2WUiyBa534Hp7tkoevFLvjA81Zel0?= =?iso-8859-1?Q?GBkMC1FZXLw11qOLM2QGAZo1NjDqEtHK+JNXJOiLGlmbjHrRkpcEABv8Ij?= =?iso-8859-1?Q?YBPk5MSXyrE7p6lPsR2W2C4zVu5A1o6lBHG5tit1ySEsizcixCW8b9nFB3?= =?iso-8859-1?Q?V+GJu6ReaZBvuuOW0uS1Dqsejdwxl19nRCgEPpmUmWDdqrAhUIXULnRqvo?= =?iso-8859-1?Q?IG3Kr+kGiGFE+Ph/fh7Sx+tyAwAsAMelA4Q3paSUAqZn3B3fU4j72rQPAZ?= =?iso-8859-1?Q?EgwMEdMKn+LRSxkn35vFE8vQsqyvW+aqZRDHfOdj1z739W75zXYKthdr/5?= =?iso-8859-1?Q?QVNvyd1wV1CN4ucuUa859J/u3X+UOJdOcmUDRzkNgQRZHvVS0gz49KlWEJ?= =?iso-8859-1?Q?Vhw16bjjRLeluh1R5PKZt9Rd0wmu61oa4AGfa5rIepQpkwgEFvI+CYPtRA?= =?iso-8859-1?Q?zO/LS5Q398DkTlfYx/LruqypkBThwEId7MWSsy6uxdg7jQkMdvUsYBavCC?= =?iso-8859-1?Q?erDoWGCqDlnQCgdqBonIDeyXTfqU1axgkZlJ/DDIVLdGJnQAgcuieYLWuW?= =?iso-8859-1?Q?IAv2gu8KfOdC3ew1GDB4RZFGr9idRVKUVKt32kHMGbVPdmlZPJaho3W6KR?= =?iso-8859-1?Q?p/ufmXfRTzG/xescVZwWKH5u2oMnr4I/Qd6YQvEcBHvwhmt8e2xw6DRtzD?= =?iso-8859-1?Q?pYTEld1kuQlSaGojleKIFx1bRNRspm2Gfa7RaZFviqhSZd9O3or+wi/FpF?= =?iso-8859-1?Q?zVe5W/BCDmG/zANk7CZvOePAY+KDcigGTOzce6/qNpxLn08dpV+G8itwUM?= =?iso-8859-1?Q?3ZmcnFPJm4qvdBDtoSxEJQ4CcpCoOc264M47YGOnqu6N1JyKc/86WWtR1b?= =?iso-8859-1?Q?Io2M6gSJj8kH3hCH8WFsnJWtpr0gmHgGWcgU69CNXnCQFZpxt3jb1vUtSD?= =?iso-8859-1?Q?Th0g1mlZpgEq4CyX5wWZi5W2Ecw8PYOTMwsgkyVANOcHwwYJwvx6vtYzEe?= =?iso-8859-1?Q?RofauojtyQwAJK9BqiWbBRryRUMZaaDDddel+MXqYfkbPXjDZvatfuG+ge?= =?iso-8859-1?Q?rLFDESvNWvE9NY9GPEsJ2HzY9KmvTblJQqvQqqTCsNDmZEwZAu89POCx56?= =?iso-8859-1?Q?qhvquMhhp0uUOQtwQgOfPJGPN8KQ2e8dBLNjwtsrSubnwPJdbtRc5VRM1P?= =?iso-8859-1?Q?/nae+Xz4v7z/GR3SrlrTK/risdN8dXDfq7NlB7iLa14GYwdXgMTkyM0O3P?= =?iso-8859-1?Q?b/5SPoExKbuDLg/uVQ1LpmXbjOxwwHxAQyi/iSdjhs+VAHnuZJO39a14hf?= =?iso-8859-1?Q?E56Dq1ZE08Cv+a/qEMykBb30ZKyXm/RsR30xOTUJrVXAmn6m8ekSqReSJw?= =?iso-8859-1?Q?l511sEOo8dk1ReamKg2rhd8bv6+5WRUt1sVr6ClPrZoHeJqtozOrxQTxZv?= =?iso-8859-1?Q?63d9fkslcpRMjZtmwXx/V7cRRBls0bAeyM4Q1Pn1pjRyoOTQitIcPeHgEk?= =?iso-8859-1?Q?Y9UaY+5oUQ8e5EFrqUyfMHnaRYXovHRSc3CLDxCpxUXI2hn14hpGAeWsGz?= =?iso-8859-1?Q?NCTBtyWZPlIec/3DlGW+0AfYbr0URUWTy7dGio/MvYnx06qsWOIX4SNpq9?= =?iso-8859-1?Q?Zv1jdVS+JjPjufeHPutnpTndZtZVLui6uz5bff36YjZu+D4H0qGfi+Gg?= =?iso-8859-1?Q?=3D=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: a2246fe7-5184-457d-bc8c-08dbe1ec728a X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:23.3222 (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: cA15oGbc2TWv4jJsf3rw3pPhvoK7TKmZ3350Ohg60IJTxO6xW+yhV1cqZwMaosJWc8/IP15rgGKdpBRpErf4bQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0302MB9063 X-Proofpoint-GUID: NZn16RH7nLNGCMn3zAF7raMFcYfsfYDa X-Proofpoint-ORIG-GUID: NZn16RH7nLNGCMn3zAF7raMFcYfsfYDa X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_08,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 suspectscore=0 mlxscore=0 phishscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=982 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621039265100006 Content-Type: text/plain; charset="utf-8" Implement handling of the ITS INT command. With the help of the IO bus framework we learn the corresponding ITS from the doorbell address. We then use our wrapper functions to iterate the linked lists and find the proper Interrupt Translation Table Entry (ITTE) and thus the corresponding struct vgic_irq to finally set the pending bit. Based on Linux commit 2891a7dfb6c4a by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-its.c | 112 +++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 9a30087d3d..9534b26334 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -557,6 +557,81 @@ static u32 max_lpis_propbaser(u64 propbaser) return 1U << min(nr_idbits, INTERRUPT_ID_BITS_ITS); } =20 +int vgic_its_resolve_lpi(struct domain *d, struct vgic_its *its, u32 devid, + u32 eventid, struct vgic_irq **irq) +{ + struct vcpu *vcpu; + struct its_ite *ite; + + if ( !its->enabled ) + return -EBUSY; + + ite =3D find_ite(its, devid, eventid); + if ( !ite || !its_is_collection_mapped(ite->collection) ) + return E_ITS_INT_UNMAPPED_INTERRUPT; + + vcpu =3D d->vcpu[ite->collection->target_addr]; + if ( !vcpu ) + return E_ITS_INT_UNMAPPED_INTERRUPT; + + if ( !vgic_lpis_enabled(vcpu) ) + return -EBUSY; + + vgic_its_cache_translation(d, its, devid, eventid, ite->irq); + + *irq =3D ite->irq; + return 0; +} + +int vgic_its_inject_cached_translation(struct domain *d, struct vgic_its *= its, u32 devid, u32 eventid) +{ + struct vgic_irq *irq; + unsigned long flags; + paddr_t db; + + db =3D its->vgic_its_base + GITS_TRANSLATER; + irq =3D vgic_its_check_cache(d, db, devid, eventid); + if (!irq) + return -EWOULDBLOCK; + + spin_lock_irqsave(&irq->irq_lock, flags); + irq->pending_latch =3D true; + vgic_queue_irq_unlock(d, irq, flags); + + return 0; +} + +/* + * Find the target VCPU and the LPI number for a given devid/eventid pair + * and make this IRQ pending, possibly injecting it. + * Must be called with the its_lock mutex held. + * Returns 0 on success, a positive error value for any ITS mapping + * related errors and negative error values for generic errors. + */ +static int vgic_its_trigger_msi(struct domain *d, struct vgic_its *its, + u32 devid, u32 eventid) +{ + struct vgic_irq *irq =3D NULL; + unsigned long flags; + int err; + + if (!vgic_its_inject_cached_translation(d, its, devid, eventid)) + return 1; + + err =3D vgic_its_resolve_lpi(d, its, devid, eventid, &irq); + if ( err ) + return err; + + /* GICv4 style VLPIS are not yet supported */ + WARN_ON(irq->hw); + + spin_lock_irqsave(&irq->irq_lock, flags); + irq->pending_latch =3D true; + vgic_queue_irq_unlock(d, irq, flags); + + return 0; +} + static u64 its_cmd_mask_field(u64 *its_cmd, int word, int shift, int size) { return (le64_to_cpu(its_cmd[word]) >> shift) & (BIT(size, ULL) - 1); @@ -868,6 +943,27 @@ void vgic_its_delete_device(struct domain *d, struct v= gic_its_device *its_dev) list_del(&its_dev->dev_list); } =20 +void vgic_vcpu_inject_lpi(struct domain *d, unsigned int virq) +{ + /* + * TODO: this assumes that the struct pending_irq stays valid all of + * the time. We cannot properly protect this with the current locking + * scheme, but the future per-IRQ lock will solve this problem. + */ + struct vgic_irq *p =3D vgic_get_irq(d, d->vcpu[0], virq); + unsigned int vcpu_id; + + if ( !p ) + return; + + vcpu_id =3D ACCESS_ONCE(p->target_vcpu->vcpu_id); + if ( vcpu_id >=3D d->max_vcpus ) + return; + + vgic_put_irq(d, p); + vgic_inject_irq(d, d->vcpu[vcpu_id], virq, true); +} + /* * MAPD maps or unmaps a device ID to Interrupt Translation Tables (ITTs). * Must be called with the its_lock mutex held. @@ -1173,6 +1269,19 @@ static int vgic_its_cmd_handle_movall(struct domain = *d, struct vgic_its *its, return 0; } =20 +/* + * The INT command injects the LPI associated with that DevID/EvID pair. + * Must be called with the its_lock mutex held. + */ +static int vgic_its_cmd_handle_int(struct domain *d, struct vgic_its *its, + u64 *its_cmd) +{ + u32 msi_data =3D its_cmd_get_id(its_cmd); + u64 msi_devid =3D its_cmd_get_deviceid(its_cmd); + + return vgic_its_trigger_msi(d, its, msi_devid, msi_data); +} + int vgic_its_inv_lpi(struct domain *d, struct vgic_irq *irq) { return update_lpi_config(d, irq, NULL, true); @@ -1288,6 +1397,9 @@ static int vgic_its_handle_command(struct domain *d, = struct vgic_its *its, case GITS_CMD_MOVALL: ret =3D vgic_its_cmd_handle_movall(d, its, its_cmd); break; + case GITS_CMD_INT: + ret =3D vgic_its_cmd_handle_int(d, its, its_cmd); + break; case GITS_CMD_INV: ret =3D vgic_its_cmd_handle_inv(d, its, its_cmd); break; --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621033; cv=pass; d=zohomail.com; s=zohoarc; b=KfSx3kLOQ9D4o6naGpdWyv98oqOVqsljOY7pKX3KPZZAVgAzTIZuzRzdb6aE6iSM0LnXIx2esoQe5/B2E6ascRDkSoWuxsbxrRhFd9VeFsHpTWFKukK7xZecY9uVlEJoPyCnFsbbDKctKBMMt9fIiotMBoiTTVPEMaRvwT60qUA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621033; 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=HHz5hJhr12VTz+6oRnd6k1m3l8acsXE23yxPfe4m7RA=; b=Ymw1e/nkBycL7+nXde3OR558fEKxRkA0DuBRibqfXu1dXTXE8nBufquv8e4ZqgupYbYpa8KZw6MXWy7uCDOWG65Xdvns/AE1e3tYW20EM2z779Zn13wdGhkNg18hEQVYFfboc0SOzw8RNKYtF0sHPgAKi3Zb3UVIqjvvUCxtytA= 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 1699621033829961.127440214352; Fri, 10 Nov 2023 04:57:13 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630300.983052 (Exim 4.92) (envelope-from ) id 1r1R3x-0002hM-FA; Fri, 10 Nov 2023 12:56:41 +0000 Received: by outflank-mailman (output) from mailman id 630300.983052; Fri, 10 Nov 2023 12:56:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3x-0002dV-Ax; Fri, 10 Nov 2023 12:56:41 +0000 Received: by outflank-mailman (input) for mailman id 630300; Fri, 10 Nov 2023 12:56:39 +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 1r1R3v-0001y1-Bh for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:39 +0000 Received: from mx0b-0039f301.pphosted.com (mx0b-0039f301.pphosted.com [148.163.137.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 94e7eadd-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:37 +0100 (CET) Received: from pps.filterd (m0174681.ppops.net [127.0.0.1]) by mx0b-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACHn4m029609; Fri, 10 Nov 2023 12:56:28 GMT Received: from eur05-db8-obe.outbound.protection.outlook.com (mail-db8eur05lp2105.outbound.protection.outlook.com [104.47.17.105]) by mx0b-0039f301.pphosted.com (PPS) with ESMTPS id 3u93ptjrxk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:28 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AM0PR03MB6244.eurprd03.prod.outlook.com (2603:10a6:20b:158::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.21; Fri, 10 Nov 2023 12:56:25 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:25 +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: 94e7eadd-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FZf0sfFhQI0rxfqw20un2bDEXSbRMWQxGazC955Fw3UBB1ZquLANkbuR/CqmyVmAoraR8rp0OV8MIque7NfSvq8TS1Ouh4cb82FfQghGpHk1NMI1ip41be6vIEFrsa4GQaYbd4RD7cYBFbaQqy6sAGeQPT9YSQKPkDTCpWDRa+XdlqlvRZ7SAcPoOutSetCnxFhNXSFNdbPGUSoWa9yg9mNKHwjGMJSUqsBio80020G2RhDdopnaYmnAeG9PbFKYJCXEI5xX0crKUWAAGPxR6LW4rALkMQv71Bwph/XNKpxcZEUtNo/BIQQD8/IUgTY6dnebLTbW0YIFMlz+ZvZnGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HHz5hJhr12VTz+6oRnd6k1m3l8acsXE23yxPfe4m7RA=; b=Ti+7Icr3U8VAeoWzk2TCyOybdtiOUXA84naG+7EyrU5k+LH7wV/OP0VFcUM+PXdesS0ejBm8j3Fm1IDRO3KvmC607Qi+EaK5MXt3dYitU9Xg/pLiqzJbf5vRCCAF6bmTtXmMv7HLDYc9gSlPEjztMKUYEzQcto+w3OkfibQrjI7dD+yJ2D5cCBMlRIpY5fR+QBhWGAsvUFCUFzF3Dk5zoASNQDd+RbMwictCBdyAUuX6lysjoF5tnScRE2YTGd9y82zDxMjgw8yyzMiwtyoLaX5b1pE5/DogktooJhuPD94ULgX2wUhKwUVTErX1ABTN5xhjBt2I64y8WtvXxaG8fg== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HHz5hJhr12VTz+6oRnd6k1m3l8acsXE23yxPfe4m7RA=; b=HM1q6nkFRocitEVITYNKMD2NrLGZXrnqKPb0UbTKpyiNeBz/nhRrmkd+UDqrzhgVMOMUlWVJ40HYxPSX/mJtVSbqpbfPo3fFUSBQmceldN+jnp7SJLySQIcpHVJn3DB+kuRjzoLUfRaRK9AnSmXimyVhV1i8RJ3AvS3SmOA+k2r+RKMfZu8fYsVRG4yuPxqZ6jDuIMubFtZ1qFRDevvdEL/uj7TOPV+SSR8dMVvmpEkcKNoO4jVGB5HyTKNMFeN7HKWJgtbrz/CRVF36N/ssJns/AZw/aOC/WttkV+iQzbOh/QGOBW5IUqvxkkFowopudi7qYN61rxSY7E8TgDSZag== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 22/25] arm: new VGIC: its: Implement MMIO-based LPI invalidation Thread-Topic: [XEN PATCH v2 22/25] arm: new VGIC: its: Implement MMIO-based LPI invalidation Thread-Index: AQHaE9VP1TCckR1kUUClKplCDKRdTQ== Date: Fri, 10 Nov 2023 12:56:23 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AM0PR03MB6244:EE_ x-ms-office365-filtering-correlation-id: b2f8ab35-3194-4ec2-d0dc-08dbe1ec72bc x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RR+FsD6z06X+jwVRQCPg2vgIGlPCFU7MBWx4fFhLRc2Ion86Y4jRwoPM0rj0xgDQGm1e5vAyJUkxQx/BFlIZMBolNpc6eurw6qL2XM8cLRQDjDXjibPw6ChpLEw34WHnyA6s0QsEX+N2SZqhP1x00z+HR/3Du8GP2RO6KkiVatHqhd8V0rnljADPoE7b+Q+htEa9TwyilhdCDpIp20fMggiVA7ZCnfWhLnTiwKEn6DYH6TePU9BWZEJdrdLXn2TA9D7etr10ZwALdi3Tw4P9oai7Z4SqmhkD156i8fwv7l1t6ReeGi4bmxMX/0HBILkHOZ7ivWl6Kjea4tWK3Aw+YzBSK3GuZR99sEP2o2tflUQm8VvvLRyNQs2eiMzXRd5WmJs2L/WrexNo7rrVSua49ZIIr0Pv/GF7/kUX79X78JND6dNrjZBQy39fWobR8tT1KrQvSKJowrMFTZiEZNRCL5SMCvDuDDbGyakH3FwvwzGFzv3Wv+1obCaKjpB9uyvyalrHHO9ClmBfaVSPiXY86ha8EsBVPYDgdqiLWOhcAgvwT0iH/qD2pVc5ExKgDAVTAqGzh45zy+mr6ObYc3U4+7c7IU+oluRoHB+DfQ1wg0PUa3/NT6n/whTThZ7zPbPagXn9f0GvxNsDnhU/NW3p9Q== 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:(13230031)(376002)(366004)(396003)(39860400002)(346002)(136003)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(5660300002)(41300700001)(2906002)(83380400001)(26005)(8676002)(4326008)(8936002)(122000001)(54906003)(64756008)(316002)(6916009)(2616005)(38100700002)(76116006)(66556008)(66476007)(91956017)(66446008)(66946007)(38070700009)(6512007)(6506007)(478600001)(6486002)(36756003)(71200400001)(86362001)(309714004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ARv1zv7R0OqIHAYDgUkcvb6SetZEgi7JUz8ayLzBmT6j99p+e3M9HT2AX4?= =?iso-8859-1?Q?TozoLdFjEVblJ7nwpy34l41BXAE8QnAKyH/k+1Ooldns4+kRZ/NWu2+xsj?= =?iso-8859-1?Q?jy/pRg9xI7hjhz5e9HKyqslyiJ6m1Dc4lrjIE5NnxUA4oo07i5Mlu3wI3j?= =?iso-8859-1?Q?mhhgF5hrNSIsi/0bDXczJFEBUcuHQ9JH+Y9Wlo/IE1kjZlObI7JJz0qb4n?= =?iso-8859-1?Q?sLxqniDxxTKz4axkHkPQ76uqfLltrK+5qwhnlz4yC2pPumN3VIe7lCwYhI?= =?iso-8859-1?Q?mi2YYck7KA4PXl7R69KldpHJ/Ms3elDwMNxTlA8WWLf+g66PqZyo120KO3?= =?iso-8859-1?Q?3223bC+l9xJwieXMvbjycNSz5Fq/+/UXp0yP0OVZBB8cRv/QnlX1Wbr7O6?= =?iso-8859-1?Q?OCzp95fFWr5oxVKq/4bNS8urCFFKqx6fbAggB99F+yn/Enh630ICdU0JDN?= =?iso-8859-1?Q?7CESMa23F5XIE73MyzoVI+wFVbzu//rQ9FbYafWLHeCufbpBP6puc2UUJ8?= =?iso-8859-1?Q?YdmS73iPCvnVKzFO7P0mltvfustgdglH1vMCn3Gv39F0Pmg8EzjvaMKy89?= =?iso-8859-1?Q?NU9dTnqoZoO6z26avlMOq1LbYIt6JAneOSjOmlHXNCLoLbvz0dKqGqk/C6?= =?iso-8859-1?Q?f3fScVmwsC6xgVzrxs7qIf9qpG2mpYoe5ApxhZ/Wd/IuC00YLhaGDUnh+I?= =?iso-8859-1?Q?jKcV5eecbAX2n6sxEbz2DRi13qQLiRCSc73ut70SCZhnFpGjVjnLG/lOkW?= =?iso-8859-1?Q?gyWOn2VVLMzsE3/2fZB53YnmGfwXrP+2ZMlSMM9U4m91YnNPuuBvs4cazy?= =?iso-8859-1?Q?uT/OPtmQzRVQFFOlwjL26oEV8YziSSuuQ9DP3IaEqn/L0pbwznpMgX5kTO?= =?iso-8859-1?Q?nhnf82Hyg/dGVOw+SbbZ+9lPR7vqoby++C1yFCdPu57/1Ct08/fHMh13QO?= =?iso-8859-1?Q?kPUgo6MKFCSRdF0Ghdj+SRxNMAf1lBHQPJdCVO/3w1zBJxZPVXn/xTCaNM?= =?iso-8859-1?Q?gtej1g6V1mT0rh7cnX3mWbwxCM3RQAH3gIFb8TgRQqoswn9h6ujmc81Law?= =?iso-8859-1?Q?0tQERuFsqvXcKcUgL0LnJ0b7KFiByvqzyxtk45Kc1eAf+xdwbI4FMB59WY?= =?iso-8859-1?Q?68YXeaFtgrBRb+uVy5frH6o0djVZ/83GWndhj1NrzIZ0o8+HaVyu1PfQ5i?= =?iso-8859-1?Q?fwyluAbmkuBCAsfR3HesLwve+obMtw9SnjzSZKofPuevocgKJxFNNQAzaE?= =?iso-8859-1?Q?RmSUl6pvxCD2RT+JBbRHd0/BBHdU/NXCavZCB8FBVlqgoScvnELQEo4y6H?= =?iso-8859-1?Q?snFGpIcKLgxvS9awEbnekKUPB8Zg0nK5hHqX8OrQvs2Ufj7f1jzGNYllxt?= =?iso-8859-1?Q?2BGyQASApDAtzSZ+XM50gikqGTxKPDQ461KY8FXpBRLfcjM/FkgTnmePZp?= =?iso-8859-1?Q?N+y61bzCB/s0BGeaiLyg9NyNiJ86Bl+Mgw3ZMOmdMazLKw+vjsx0uPsI6d?= =?iso-8859-1?Q?kNp4dfMDXTEsBAYb+9bHZa4I7D4ZmmYEGs4mlbViA9ODZSmx2kcE7D9HZY?= =?iso-8859-1?Q?mh1RWOkrAnZsukuXULQoaUKgrQN62/Jv51lz0hvXsoL8PIYYXj96g9U0n7?= =?iso-8859-1?Q?8mrHmMYAIH4BHXXe8l5Ucia3VZiN0mCLvyHV0HjXE2m6rDx+732OClaw?= =?iso-8859-1?Q?=3D=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: b2f8ab35-3194-4ec2-d0dc-08dbe1ec72bc X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:23.6475 (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: 4sYCuxpwjJRtJEFaAx5jXbbe1b0k35wl2yVUZXSYFvmJnKWZtXdHgu/K21V8NMsnPLfWXdTE60JsBNkNzYIlLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR03MB6244 X-Proofpoint-ORIG-GUID: f_btpiF4EMSn5sL61PFKUfdEHyErFq57 X-Proofpoint-GUID: f_btpiF4EMSn5sL61PFKUfdEHyErFq57 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1015 impostorscore=0 mlxlogscore=983 mlxscore=0 adultscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621035188100002 Content-Type: text/plain; charset="utf-8" Since GICv4.1, it has become legal for an implementation to advertise GICR_{INVLPIR,INVALLR,SYNCR} while having an ITS, allowing for a more efficient invalidation scheme (no guest command queue contention when multiple CPUs are generating invalidations). Provide the invalidation registers as a primitive to their ITS counterpart. Note that we don't advertise them to the guest yet. Based on Linux commit 4645d11f4a553 by Marc Zyngier Signed-off-by: Mykyta Poturai --- xen/arch/arm/include/asm/new_vgic.h | 1 + xen/arch/arm/vgic/vgic-mmio-v3.c | 65 +++++++++++++++++++++++++++-- xen/arch/arm/vgic/vgic-mmio.h | 15 +++++++ 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/include/asm/new_vgic.h b/xen/arch/arm/include/asm= /new_vgic.h index b038fb7861..dfc434ab41 100644 --- a/xen/arch/arm/include/asm/new_vgic.h +++ b/xen/arch/arm/include/asm/new_vgic.h @@ -239,6 +239,7 @@ struct vgic_cpu { struct vgic_io_device rd_iodev; struct vgic_redist_region *rdreg; uint32_t rdreg_index; + atomic_t syncr_busy; struct vgic_io_device sgi_iodev; =20 /* Contains the attributes and gpa of the LPI pending tables. */ diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index 4bf8c21203..0e3835d38a 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -583,6 +583,65 @@ static void vgic_mmio_write_pendbase(struct vcpu *vcpu= , paddr_t addr, old_pendbaser ); } =20 +static unsigned long vgic_mmio_read_sync(struct vcpu *vcpu, paddr_t addr, + unsigned int len) +{ + return !!atomic_read(&vcpu->arch.vgic.syncr_busy); +} + +static void vgic_set_rdist_busy(struct vcpu *vcpu, bool busy) +{ + if ( busy ) + { + atomic_inc(&vcpu->arch.vgic.syncr_busy); + smp_mb__after_atomic(); + } + else + { + smp_mb__before_atomic(); + atomic_dec(&vcpu->arch.vgic.syncr_busy); + } +} + +static void vgic_mmio_write_invlpi(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + struct vgic_irq *irq; + + /* + * If the guest wrote only to the upper 32bit part of the + * register, drop the write on the floor, as it is only for + * vPEs (which we don't support for obvious reasons). + * + * Also discard the access if LPIs are not enabled. + */ + if ( (addr & 4) || !vgic_lpis_enabled(vcpu) ) + return; + + vgic_set_rdist_busy(vcpu, true); + + irq =3D vgic_get_irq(vcpu->domain, NULL, val & 0xffffffff); + if ( irq ) + { + vgic_its_inv_lpi(vcpu->domain, irq); + vgic_put_irq(vcpu->domain, irq); + } + + vgic_set_rdist_busy(vcpu, false); +} + +static void vgic_mmio_write_invall(struct vcpu *vcpu, paddr_t addr, + unsigned int len, unsigned long val) +{ + /* See vgic_mmio_write_invlpi() for the early return rationale */ + if ( (addr & 4) || !vgic_lpis_enabled(vcpu) ) + return; + + vgic_set_rdist_busy(vcpu, true); + vgic_its_invall(vcpu); + vgic_set_rdist_busy(vcpu, false); +} + static const struct vgic_register_region vgic_v3_dist_registers[] =3D { REGISTER_DESC_WITH_LENGTH(GICD_CTLR, vgic_mmio_read_v3_misc, vgic_mmio_write_v3_misc, @@ -655,13 +714,13 @@ static const struct vgic_register_region vgic_v3_rd_r= egisters[] =3D { vgic_mmio_read_pendbase, vgic_mmio_write_pendbase, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_INVLPIR, - vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + vgic_mmio_read_raz, vgic_mmio_write_invlpi, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_INVALLR, - vgic_mmio_read_raz, vgic_mmio_write_wi, 8, + vgic_mmio_read_raz, vgic_mmio_write_invall, 8, VGIC_ACCESS_64bit | VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_SYNCR, - vgic_mmio_read_raz, vgic_mmio_write_wi, 4, + vgic_mmio_read_sync, vgic_mmio_write_wi, 4, VGIC_ACCESS_32bit), REGISTER_DESC_WITH_LENGTH(GICR_IDREGS, vgic_mmio_read_v3_idregs, vgic_mmio_write_wi, 48, diff --git a/xen/arch/arm/vgic/vgic-mmio.h b/xen/arch/arm/vgic/vgic-mmio.h index edf8665cda..12f4d690f6 100644 --- a/xen/arch/arm/vgic/vgic-mmio.h +++ b/xen/arch/arm/vgic/vgic-mmio.h @@ -153,4 +153,19 @@ unsigned long extract_bytes(uint64_t data, unsigned in= t offset, uint64_t update_64bit_reg(u64 reg, unsigned int offset, unsigned int len, unsigned long val); =20 +#ifdef CONFIG_HAS_ITS +int vgic_its_inv_lpi(struct domain *d, struct vgic_irq *irq); +int vgic_its_invall(struct vcpu *vcpu); +#else +static inline int vgic_its_inv_lpi(struct domain *d, struct vgic_irq *irq) +{ + return 0; +} + +static inline int vgic_its_invall(struct vcpu *vcpu) +{ + return 0; +} +#endif + #endif --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621029; cv=pass; d=zohomail.com; s=zohoarc; b=j53S3b4yOaHjykQZahJnenT4LCbN2UH/HaRAmDT0tewgJDa0fo2WkxoKi51MxBRtqwDtEXbujfTms52wjSAKpaOQgAHL7/pualo16BXT2efHLoGFb2yX/+uVecWtpYbWt3KnxmK8Grho27BfwMF5w6us/r6UF364Dy8kmPxA0DU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621029; 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=15Ru6p3LMyODkoJGnBcHsi/MdAVNxVqs6BxYDcJDskw=; b=c7M7qnNvWrfODiSm/ST6mWOJL6nwm9skfbK2DAdzqcYE5INzFgfztaauTMYEueuFThJXIewlPm75+NBp9M1aJleeo6zUXkkLRaHww21Sq60ygRZmLpVkCBiDd4c8VcWvAvKUixDWgeveksR6PJQr+xy+4Ckhf8aiC3vZ56RAWOI= 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 169962102964966.08705195691994; Fri, 10 Nov 2023 04:57:09 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630298.983042 (Exim 4.92) (envelope-from ) id 1r1R3w-0002Po-Pu; Fri, 10 Nov 2023 12:56:40 +0000 Received: by outflank-mailman (output) from mailman id 630298.983042; Fri, 10 Nov 2023 12:56:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R3w-0002NV-GY; Fri, 10 Nov 2023 12:56:40 +0000 Received: by outflank-mailman (input) for mailman id 630298; Fri, 10 Nov 2023 12:56:38 +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 1r1R3u-0001y1-BP for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:38 +0000 Received: from mx0b-0039f301.pphosted.com (mx0b-0039f301.pphosted.com [148.163.137.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 948ff425-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:36 +0100 (CET) Received: from pps.filterd (m0174681.ppops.net [127.0.0.1]) by mx0b-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACHn4n029609; Fri, 10 Nov 2023 12:56:29 GMT Received: from eur05-db8-obe.outbound.protection.outlook.com (mail-db8eur05lp2105.outbound.protection.outlook.com [104.47.17.105]) by mx0b-0039f301.pphosted.com (PPS) with ESMTPS id 3u93ptjrxk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:29 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AM0PR03MB6244.eurprd03.prod.outlook.com (2603:10a6:20b:158::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.21; Fri, 10 Nov 2023 12:56:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:26 +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: 948ff425-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g3XnCIBLRva6oLDOEJO3/1Gx17lxVJrof+SDvS9VuXhSoAdJW233UDT3jEh2GxwJql2rqlmHxe4KhoQdt6lSd9cB6UMYSopihvgCvARICrfr0dUzkp0uvML4pS0oWu4fontCf2WVMtlXEEyg9nWX197/loTN7FNWVTDAG63CqlLGmChcf0Zd8/vrlk3VP3ETwrxjOuJ4DvqGJtFEj0hr4pVOpYvsQmf/AMIIlRo7wh4pB9Q6PTm97kv4bF8yC+u9rtNLuTC0EA3Gjr7yK/VErReKDM7VMmBbipe4Kly9W8ycg6iOplOPfISFqK6DnFgHQFsy4MEe2BdZ/C1lc+MeZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=15Ru6p3LMyODkoJGnBcHsi/MdAVNxVqs6BxYDcJDskw=; b=PpSVBVwje95PZVHbr1rKKuj0vqm83mHF0y+zWSFbk9D3WAaL+aCto4eN8Y5BPXAQNHx18nECmyxcPzwl6L2226lcZDbEOPwssMOS8Z8XANZZHGtu/Mf1S/8TclwG4OGkYl1+9x46CQd8oVF3THBoh3M6P8YB9Y0MqeLgyeMHEhrmcJt6KTxv3g7OfFPNPp48i700+s8xwm8+Fwf8gjYO4R4JS+3nFZ85Y46cNKJOyGB5m7qDsWZtxQPemvYIek+wzaAmIl6Bes9lxW2Htcbgoss6brOzNjBugVaGCkHPif30z/EbUCSP9YNQY7o1rARVt/Ep30YlZaaKrqdNFu4I3Q== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=15Ru6p3LMyODkoJGnBcHsi/MdAVNxVqs6BxYDcJDskw=; b=BCBuDbVxRHdCgum/mdmDmUDeX1Z3SkJjwpSoOkRFx67FrtUMt7CbIneP8SK5b3jZdGXTLblYNPVYYEX8u2IK0uyxNk4c0aiHDkd8ScDxBNyvdTl2t7HkhjRQqIqmK7++5VFAvC2ZM6NqHPEJkTbivmCzOZl/ZpH4Dlwd07E/KqWwXVtwHfFg8sbdhJtqudJMZu+LoMLZfrv5vl7AApUJD0BMBmeeVS+F+BcpnxWtXfPDGu1rRzJiMWavNiMTlkR2aM4+ibNctct94yQtZxt0jdpfSoc0AQ3HABrDr8V9lpjbSIneWfISJfXIcNdj1ODSG33bBJ+hNkKHEHlXbobb4A== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 23/25] arm: new VGIC: its: Enable ITS emulation as a virtual MSI controller Thread-Topic: [XEN PATCH v2 23/25] arm: new VGIC: its: Enable ITS emulation as a virtual MSI controller Thread-Index: AQHaE9VPXAWKwT607Ue2PXRr/Vo1Xw== Date: Fri, 10 Nov 2023 12:56:23 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AM0PR03MB6244:EE_ x-ms-office365-filtering-correlation-id: 5eece678-bc2b-41be-a476-08dbe1ec72f3 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: eXztD9PHLeKPg/c2aCQdsr9BZfuaofeVRqwLL+xGLTARw766dkt+rCoKv713AKAWwE+GeewY3ul8H4i8RQdtBUxE9cUprLw3EG4f85hOSecNiuFb+9J7AXLjRIV1CSspnnyWQ+rjWL3Hmc1LpmEWY+OMYD548+VdKDtXXuyiuoyf1+fHLbGwjWTTh9SJpvYTP2UCSx8Iszc8ov7tHiHm0au1LJnzRMglcr6CSfPi1ci4DHonlcD+nYtgrg9VVl8YkfZb/IqPVF6LuCh+nQsZ+UUPADXCgN8GgWvSYf8GhCQq0B3/SfbiFTU0bEHg+WDZPVmtAcaYRPJ6PtwTSzM7g7NHyaZKfoLHt1sj+gqth4ftDyYCY0RN0HitmbeV78gbPFtFMVPFzQa+X17ec8G29A1Bjv5ZvKdfw8M2HqwE/mSynEzSRl95vSjyczN4GkhPCDfzvVENTYVdyBfga4dY0bySHz0EQd1zl5iV2Yv5trnEyFwfdV+bJAlzqFtoEhcpkpnwj5q+1kT4mw8E3cnBsuTt6x8Flq/6ZrftWincUWsp4FpzzuKhw1QVLDDWWbVGs1X497zpdD8j8loZzNoAdulnkuQckDhpuVviR5J4s0c= 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:(13230031)(376002)(366004)(396003)(39860400002)(346002)(136003)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(5660300002)(41300700001)(2906002)(83380400001)(26005)(8676002)(4326008)(8936002)(122000001)(54906003)(64756008)(316002)(6916009)(2616005)(38100700002)(76116006)(66556008)(66476007)(91956017)(66446008)(66946007)(38070700009)(6512007)(6506007)(478600001)(6486002)(36756003)(71200400001)(86362001)(6666004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?NkFuv2l6hE0HsbDu2y0BUCxxl8IuuM+BNwgPOp8CfVDTLvA1iX3pUAz/uR?= =?iso-8859-1?Q?BEs6yeDsbrDKVguOKOwBcOG0YK8SsBNwoL3ncyVSa9hIt2d934G2gwLkOh?= =?iso-8859-1?Q?OP2LAKH5yUDZZU3Fm5VoUzrwIarmcByfaR2bcK0v2qd2FE23yfCP2ooDgD?= =?iso-8859-1?Q?bIi5Lgo7qvbXJxekmFdTb1zxmbFhuiQYeW7xywcDcoMrcSLzH6BUaPmuHE?= =?iso-8859-1?Q?zKpc6Sy5uvg6iG1P5kjba1aVuBwYp9bFHLQlmqciHTu/+/bO8Ud+bAL3Oa?= =?iso-8859-1?Q?oXmFw3U/15z+nSUebTymIZxY8iiOJHELFQ7PS66zPa42TNiBTZXyoQsCP8?= =?iso-8859-1?Q?oanFDARnnZJ4JfEOsKYnHnayg1W11V2GBNMq6HlhgaO0uhD3vVBalj50cu?= =?iso-8859-1?Q?LzJyRT46SxOFduDEZOZkWB8CxKEpMapA8XEjoxSRSbcj7qCQaywmLzjpYc?= =?iso-8859-1?Q?gfE94Sw1ERjs16Vi22+ecd42FuZydoAJG3KZmOZFVIIZy0v5XYrhld75JR?= =?iso-8859-1?Q?Qlp+hi6l7DPqi93VZm54fNlRxhRp+Fm/PnQKPswIAhnBCNiGMEC4IdfdqO?= =?iso-8859-1?Q?6LXk3ftRy6GSO+16fQ47JsSbqXNSyfXF1HT6BnyzD5yvjr4Z1TL8N5xbJG?= =?iso-8859-1?Q?SDYD7oVIu0ygFxb/pbD6z2oRayJW/fS/ByBlPztuMBiJJupDSkII0PIF5z?= =?iso-8859-1?Q?VOLZcRw03tE2ctrCXsJsTOaPZx1/Fcx0s33VUdi1hpKPrxT5fWb3Twd5zG?= =?iso-8859-1?Q?csxdOFO0Zxc4BHn6upOeYVI25wRwRPxeiOVTs7F4gc8uxmJBW0A0YLfV9I?= =?iso-8859-1?Q?6ucCcO1UMSJwLsVnonW6IYMP3//eFsvG237n/3QjqkQsJVwZjman8iukr7?= =?iso-8859-1?Q?SIZTx/XIaUS61O49pChllK9XdO3c6ssHVhseHL7GseuJSZyXVYq8ac6X+f?= =?iso-8859-1?Q?iT6eJ48sAy2RJfCQW52WDoWAdUNAJ9iIe3gr9eiwVuO0xkmtadXBU5efnn?= =?iso-8859-1?Q?vIrau2fbBhdjRq9cz42I5ShyVIpQEueQ6ImXigN8OlZXExjt22gtyCeYIx?= =?iso-8859-1?Q?nLRz0/PdJd63rxus3OT1UJcO07FmJfzXVv/o9r0HRV5SuqyrM++R2RqAjJ?= =?iso-8859-1?Q?mR4BbY6SK4EVdmZGMZdagIV2B1k6JvRRrEPegh9GBmWAiT2+DaMdYlC6Hd?= =?iso-8859-1?Q?uudDVLg+u0ZnYuHUXQeO736TPVnx9nAKA0ZbkLBC2SteRpdWQQKHr74+yo?= =?iso-8859-1?Q?7gRhjd/UbXsYBiWQaCrifVmHgWgrij+mEY0E1/tZg7lyOrLDqPJiHt1iSt?= =?iso-8859-1?Q?IDi9+2k0FB0ks+zWHP/w3lk1VbvRIO9TfwAm2vsL9ewaMuLYPjmsIU45yL?= =?iso-8859-1?Q?TfMBO9PGZF1aGwzw8K+q1NcI5d0BCBv6D8zrMc5ervZ3byE3rnSg3HNiCN?= =?iso-8859-1?Q?MD2mhSNd5Nr0Viq74uQPWfrg/Cj+vWJTgOmHFTark9eNZDD0Is5WC9eKqZ?= =?iso-8859-1?Q?Yhzq12bZZWI9/gd5OeWtrTm9HuUhZkLXERF8ZyyDr3EQfWQKhejoTxOqNi?= =?iso-8859-1?Q?0BppLx2vc/M3N3h9CX/OwtqFn4EfZrtuJVvC1+r98rqSanXL+wS6JYzcba?= =?iso-8859-1?Q?YJjFrhUOpOOB8oDxb3GtFKEUvhV30yRMBdIU9ZzfuBKVC61hxISBQiUQ?= =?iso-8859-1?Q?=3D=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: 5eece678-bc2b-41be-a476-08dbe1ec72f3 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:23.9501 (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: EF7OsO29C2KF9BWTHx2YeT3TgS2LNvtGYdi72AjTNOX3eil/jRJot3vaDmohqq2R0yPv3OPVB5IuBFDcOhDqIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR03MB6244 X-Proofpoint-ORIG-GUID: 2wucOZ7wNj0rsTgxhzcWowTMjUbQjAJ5 X-Proofpoint-GUID: 2wucOZ7wNj0rsTgxhzcWowTMjUbQjAJ5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1015 impostorscore=0 mlxlogscore=590 mlxscore=0 adultscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621031182100001 Content-Type: text/plain; charset="utf-8" Now that all ITS emulation functionality is in place, we advertise the ITS device to the guest. Based on Linux commit 0e4e82f154e38 by Andre Przywara Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-init.c | 7 +++++ xen/arch/arm/vgic/vgic-its.c | 2 +- xen/arch/arm/vgic/vgic-mmio-v3.c | 44 ++++++++++++++++++++++++++++++-- xen/arch/arm/vgic/vgic-mmio.h | 5 ++++ 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/vgic/vgic-init.c b/xen/arch/arm/vgic/vgic-init.c index 96f6669d38..fb27e440fc 100644 --- a/xen/arch/arm/vgic/vgic-init.c +++ b/xen/arch/arm/vgic/vgic-init.c @@ -18,6 +18,7 @@ #include #include #include +#include =20 #include "vgic.h" =20 @@ -173,8 +174,14 @@ int domain_vgic_init(struct domain *d, unsigned int nr= _spis) } =20 INIT_LIST_HEAD(&dist->lpi_list_head); + INIT_LIST_HEAD(&dist->lpi_translation_cache); + dist->lpi_list_count=3D0; spin_lock_init(&dist->lpi_list_lock); =20 + ret =3D vgic_v3_its_init_domain(d); + if ( ret ) + return ret; + if ( dist->version =3D=3D GIC_V2 ) ret =3D vgic_v2_map_resources(d); else diff --git a/xen/arch/arm/vgic/vgic-its.c b/xen/arch/arm/vgic/vgic-its.c index 9534b26334..3b097bd0c4 100644 --- a/xen/arch/arm/vgic/vgic-its.c +++ b/xen/arch/arm/vgic/vgic-its.c @@ -168,7 +168,7 @@ static int update_lpi_config(struct domain *d, struct v= gic_irq *irq, return 0; } =20 -static int vgic_v3_lpi_sync_pending_status(struct domain *d, struct vgic_i= rq *irq) +int vgic_v3_lpi_sync_pending_status(struct domain *d, struct vgic_irq *irq) { struct vcpu *vcpu; int byte_offset, bit_nr; diff --git a/xen/arch/arm/vgic/vgic-mmio-v3.c b/xen/arch/arm/vgic/vgic-mmio= -v3.c index 0e3835d38a..84aa8568dc 100644 --- a/xen/arch/arm/vgic/vgic-mmio-v3.c +++ b/xen/arch/arm/vgic/vgic-mmio-v3.c @@ -29,7 +29,7 @@ bool vgic_has_its(struct domain *d) if ( dist->version !=3D GIC_V3 ) return false; =20 - return false; + return dist->has_its; } =20 static struct vcpu *mpidr_to_vcpu(struct domain *d, unsigned long mpidr) @@ -211,6 +211,29 @@ bool vgic_v3_emulate_reg(struct cpu_user_regs *regs, u= nion hsr hsr) } } =20 +void vgic_flush_pending_lpis(struct vcpu *vcpu) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic; + struct vgic_irq *irq, *tmp; + unsigned long flags; + + spin_lock_irqsave(&vgic_cpu->ap_list_lock, flags); + + list_for_each_entry_safe(irq, tmp, &vgic_cpu->ap_list_head, ap_list) + { + if ( irq->intid >=3D VGIC_MIN_LPI ) + { + spin_lock(&irq->irq_lock); + list_del(&irq->ap_list); + irq->vcpu =3D NULL; + spin_unlock(&irq->irq_lock); + vgic_put_irq(vcpu->domain, irq); + } + } + + spin_unlock_irqrestore(&vgic_cpu->ap_list_lock, flags); +} + /* * The Revision field in the IIDR have the following meanings: * @@ -234,7 +257,15 @@ static unsigned long vgic_mmio_read_v3_misc(struct vcp= u *vcpu, paddr_t addr, case GICD_TYPER: value =3D vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; value =3D (value >> 5) - 1; - value |=3D (INTERRUPT_ID_BITS_SPIS - 1) << 19; + if ( vgic_has_its(vcpu->domain) ) + { + value |=3D (INTERRUPT_ID_BITS_ITS - 1) << 19; + value |=3D GICD_TYPE_LPIS; + } + else + { + value |=3D (INTERRUPT_ID_BITS_SPIS - 1) << 19; + } break; case GICD_TYPER2: break; @@ -365,6 +396,9 @@ static unsigned long vgic_mmio_read_v3r_typer(struct vc= pu *vcpu, paddr_t addr, value =3D (u64)(mpidr & GENMASK(23, 0)) << 32; value |=3D ((target_vcpu_id & 0xffff) << 8); =20 + if ( vgic_has_its(vcpu->domain) ) + value |=3D GICR_TYPER_PLPIS; + if ( vgic_mmio_vcpu_rdist_is_last(vcpu) ) value |=3D GICR_TYPER_LAST; =20 @@ -422,12 +456,18 @@ static void vgic_mmio_write_v3r_ctlr(struct vcpu *vcp= u, paddr_t addr, GICR_CTLR_RWP); if ( ctlr !=3D GICR_CTLR_ENABLE_LPIS ) return; + + vgic_flush_pending_lpis(vcpu); + vgic_its_invalidate_cache(vcpu->domain); + atomic_set(&vgic_cpu->ctlr, 0); } else { ctlr =3D atomic_cmpxchg(&vgic_cpu->ctlr, 0, GICR_CTLR_ENABLE_LPIS); if ( ctlr !=3D 0 ) return; + + vgic_enable_lpis(vcpu); } } =20 diff --git a/xen/arch/arm/vgic/vgic-mmio.h b/xen/arch/arm/vgic/vgic-mmio.h index 12f4d690f6..32fc7a6ba2 100644 --- a/xen/arch/arm/vgic/vgic-mmio.h +++ b/xen/arch/arm/vgic/vgic-mmio.h @@ -156,6 +156,7 @@ uint64_t update_64bit_reg(u64 reg, unsigned int offset,= unsigned int len, #ifdef CONFIG_HAS_ITS int vgic_its_inv_lpi(struct domain *d, struct vgic_irq *irq); int vgic_its_invall(struct vcpu *vcpu); +void vgic_its_invalidate_cache(struct domain *d); #else static inline int vgic_its_inv_lpi(struct domain *d, struct vgic_irq *irq) { @@ -166,6 +167,10 @@ static inline int vgic_its_invall(struct vcpu *vcpu) { return 0; } + +static inline void vgic_its_invalidate_cache(struct domain *d) +{ +} #endif =20 #endif --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621725; cv=pass; d=zohomail.com; s=zohoarc; b=K42VAdmE5tHvSu8H9szTSLZKw9+ZWer2sfkiEO/B5zxd4G+ldj3stD4IdFZJIXM72Ge1F+vaxVHYdG61DUjWDZgXMZw9SF9iuNUx79yEGIcKJuouk/fTWyKOJhF2SxE0F+akS3XmjIJEIggnqD0K3kCIdfpdUAVUJJQSbKlSAuY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621725; 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=1TkmTLEQVHA1r1cVFkXW4q/O26dCX6I43k5x/u2XgFQ=; b=cBDiUhtZRKn8KgoFDwXEyo/dBkrd4Td5OjgCNWxfPBnmfuOj1z1G3Hes1qY23gC5VpoqEbJr/OrsAeJ8jKDnBTMmMJU1bfutevs9zK4QOgfeedi6mgNr4kAokWAXjHUF4PlVOzoPTv5Uc9vim6jCTvZzwHEGRzMLxjzNhdUnZq8= 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 1699621725359831.5888681388652; Fri, 10 Nov 2023 05:08:45 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630368.983230 (Exim 4.92) (envelope-from ) id 1r1RFC-0007rd-7K; Fri, 10 Nov 2023 13:08:18 +0000 Received: by outflank-mailman (output) from mailman id 630368.983230; Fri, 10 Nov 2023 13:08:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1RFC-0007rW-4d; Fri, 10 Nov 2023 13:08:18 +0000 Received: by outflank-mailman (input) for mailman id 630368; Fri, 10 Nov 2023 13:08:16 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1r1R43-0001y0-6p for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:47 +0000 Received: from mx0b-0039f301.pphosted.com (mx0b-0039f301.pphosted.com [148.163.137.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 97bdc968-7fc8-11ee-9b0e-b553b5be7939; Fri, 10 Nov 2023 13:56:41 +0100 (CET) Received: from pps.filterd (m0174681.ppops.net [127.0.0.1]) by mx0b-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACHn4o029609; Fri, 10 Nov 2023 12:56:30 GMT Received: from eur05-db8-obe.outbound.protection.outlook.com (mail-db8eur05lp2105.outbound.protection.outlook.com [104.47.17.105]) by mx0b-0039f301.pphosted.com (PPS) with ESMTPS id 3u93ptjrxk-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:29 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AM0PR03MB6244.eurprd03.prod.outlook.com (2603:10a6:20b:158::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.21; Fri, 10 Nov 2023 12:56:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:26 +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: 97bdc968-7fc8-11ee-9b0e-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AWTY9vk7dTTeZkGbBbQCKUseRvHC9ZMktD1o0BlK/YJH3ayxw96emMrTDkldGuUx2dOyLHJFGVSR5tjJreBFhExwBupzEq/3u99RG9C7owTo0MStcw1UF+F8GQ/jHyQVp6qhwzLDlVt2KggiaxuIPREotK590pLb/HsF2/jGF8pmWUwvk5cdvvXga1iGSu3BGJcIyl66dS2H4bkOYUNZfqW/E3k0mIvFLcONGrxk48I6U8TtGPxmvRKf0XcVpy1lqWphLcZmyKH8SqIt26r/klttypGKfGkGQhfuKkrHjQ48IgdLNCtsGY9o05h4tR0YhmebOAqJNpuhE7wWG8tF1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1TkmTLEQVHA1r1cVFkXW4q/O26dCX6I43k5x/u2XgFQ=; b=mJsCjq1AtracdpTcoMr14WCj8zros1Z1QwBuL+2TRn7YVVgwwmrq2EiONvQyiSMNyPgFyU/801G7465TwJ26hyR+5wNZg4agbvNHqVax5ReA5cPIlohTGSq/QWZlC/iTD6x3MD1+t62/YiqNvqKf3RbxybE/KZ4bDgHtS3yATjDPgVOCi2jx9KmMKRXv+scTnzWmLtUoAfAw81dA+FuGt9X8/X5/7Pz3ghzR8PGCRy1+fe/GT7dahjKuzEev/H1V5yVvaINIpSqj8ypbPEFqLBihJfs0kszhHKpB/xeAATaarFwYQEKwjetzKp3NEog4odNJiPSzPy7BNxYKncawVw== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1TkmTLEQVHA1r1cVFkXW4q/O26dCX6I43k5x/u2XgFQ=; b=UeduFmBNRQwvTaHpPaT5TAye0klznATFuJsqpzgiAg/32Z75mOW0BJVZZQ70wbxZr9txK8ZBSUzUNps9fG80npk1Y9UJaU1MxLrL6qtZqQeqHan5SebE7XJ841kLjN0qEs4b8LCY4VAYB+8rlcU4QZTYeoYhr8U5BZetfJCWqyCIr8qx6407E8w/M5ITsK7/auszgpRmu1VO6G9Rp5l+N3IezTWwTPG8PipARD//cDyRli46LlcY9/vIgssfkOqJ7NOYssJeHRMyTNLgsT9W2ybLjG6a3p1/TVgwcX0QNeW3b5YILWlymSh6s9zk19CqxAPubtscXg54th5XEpvFMg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 24/25] arm: new VGIC: its: Wire new ITS into the build system Thread-Topic: [XEN PATCH v2 24/25] arm: new VGIC: its: Wire new ITS into the build system Thread-Index: AQHaE9VPZ7cPBIWT6UCB5x9GhgF0Kw== Date: Fri, 10 Nov 2023 12:56:24 +0000 Message-ID: <9fb487465f44f84f8d4358900df7e4d4d0bdbfd7.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AM0PR03MB6244:EE_ x-ms-office365-filtering-correlation-id: 751e9753-3996-4767-05dd-08dbe1ec7315 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /tw2qn0NA6QIrHckqs76Ejmc/XeI3GC+h/edAIqRAHgmZjfoHdd383n5EudFUZtG4BLsucIBHrkJAaqDJySf5D9rSHmmoN2bJnkAYt0Svwmzp5BaZlysUGlD7HF7jeuR9yzhPhAzoRdH/5SU0hv7bsyOxhU+8li84qW5kvXuhdrXWva+Za8hbkVmsgi0fvjEQl71o9hXq5ufPAV/c2VWSn8n5zmk4dxN695KUDP3bsA12kOrS4MZHd5CMv1eWBRTWh9ubArsHBwk5LuUEYYMvGPW+s0m/0Qf0BypXkZXGq3O6dYcdUhiGkcVb2HeCwb5MjyiEak1YqX7/TwJyBdD2vAHPYujI1FwclTb7TnVrHEwbVV63luM/ZMBHVph73FjO1S1bqkw4jZYEKGlJVDduRljj2gf81NN3gc+vYMNsajdq7GyUuASZ1VDcTTF+kC9vUi/hE8/TiVxPwk7aY/uJC45uHVFg2r2znlSybOrusWx0dyA1GXFqpN/ibbB0yc/sWX0ZGlHKyTJ8NqdnJ76+ly1uBtN42ZShXek/R55HubuBxo1D81zMDdunouniBdrdI7xdK649NDJxuwitA0Wf9NjPLRG54PhMYcBD6gUGp+FGWesJs7B2v/9PJW2yksL 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:(13230031)(376002)(366004)(396003)(39860400002)(346002)(136003)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(5660300002)(41300700001)(2906002)(83380400001)(26005)(8676002)(4326008)(8936002)(122000001)(54906003)(64756008)(316002)(6916009)(2616005)(38100700002)(76116006)(66556008)(66476007)(91956017)(66446008)(66946007)(38070700009)(6512007)(6506007)(478600001)(6486002)(36756003)(71200400001)(86362001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?f2wXy2j/0piI09iMfEEUYu9z+8IqqWEkCMiCHCynijzzZieJvF6jEjYX5O?= =?iso-8859-1?Q?sUfga54ZHKRsiVvG+vhr/LyLPypb1Tva688nYJSZ1GK30QCt8Kai6HAiFb?= =?iso-8859-1?Q?4QlcxiDB0EcKQ64p+bPbkaXGbf5CiSjmMYqDUQeWQExv3fDEfi8aodpJli?= =?iso-8859-1?Q?09jn/hDh8+vZd7lIE5P0CfZ8kV+BJf3Dw9FHUdDtTaW3fraY3BwZvFLlSt?= =?iso-8859-1?Q?3vkLbRNOGIpKgcKEWm94x08L7VCW6aGzkeQdPwSUoXfuS0lWgytK4630kW?= =?iso-8859-1?Q?akua5UzxH96L3im2gVmXZ43sciFgqltwPpYnFuGnFR1U5Vc0VFwlJgO4Yq?= =?iso-8859-1?Q?4yLIxau8CxL43ehxhHFp5b1mZJN5j6RpsKThI8ax7IZ6zbrjfagNO8rr8b?= =?iso-8859-1?Q?32v2f5ki8tsQ08nkqJwBlHl/aHdJa3B9WcFIO8Big0ei7S94CWO2Q1/KX2?= =?iso-8859-1?Q?8V+BGVqFXWWZpODpLBqAwN0mii7+gnO2sd9nuZof/RILL/tS7vUKJPNz9P?= =?iso-8859-1?Q?D0lJ+AovVVidOJkDD9eZrF6GS5LCZDxkHD0X/6K7fka2lLWJRmg9OZTelD?= =?iso-8859-1?Q?s3h2gpNyg5ydusrx0NQAluA1xM5jlNsM/53ZK6VekDGT+nQCZs0S4Xja/J?= =?iso-8859-1?Q?O9vf1209z7kFrP6UgALgWVBvVFRffdJM08lwAKgBcP/M31v6zDAkbXB23r?= =?iso-8859-1?Q?gldELiwV5qGQ2VCiSnl2KmNrTyT9BfmR/YUg/mMiaUu2Vl6O2H5FGUSInS?= =?iso-8859-1?Q?g2xULxTiw5h4aQzMfm9V2jrDe1uMQPa+7wdRtFK5GccHDXmYl/IDmDx6Tw?= =?iso-8859-1?Q?357MWqVPzsLbYgR+YiYfk3n8Wui+j1VtZ3uTqREr/SyyfmXfJVsb4ZMzKH?= =?iso-8859-1?Q?KZcuO8PeMXg3cncTSqvrRVITOvu05JW+sSAYK8trsDKty8RLTkFgu2zc4J?= =?iso-8859-1?Q?2Ggh0cohIeh3WwHGmiW3yRt5XE+OFsYLz2yMSFKo+bORq9ze1zesIUJ5/P?= =?iso-8859-1?Q?LLX/0xxuELaTA21Pk806VD6kBpHyCHACwoGjGlHLb1qfd32H1kIu9rSbRV?= =?iso-8859-1?Q?GOdANK0sycfzUSap1wLsf/sj/VgXVdcmoOzE2AYWPTlwZ7s1w3YGS6uR1m?= =?iso-8859-1?Q?5/Z/o5DTZuamU4i6nu+RmFxPkKQrdIYJQh5FTdcJ6nsAw3sruoy1UWEOHP?= =?iso-8859-1?Q?fhj6GLwKkjCqab24MUiHF7WFjghLU9kDrgu/4GhEJxoo9wsGd4ss7aWBzh?= =?iso-8859-1?Q?owkXvXzbrwoXeyizyjIgYRmgO2u5jAS2fXa9kweF+oapgmy8QV+8pQf2sq?= =?iso-8859-1?Q?wNJ0hD6xIrK782ifd5LK0+3r0/rw9Q/tJ22tw5fc863ouLoHO8/Bbax/jY?= =?iso-8859-1?Q?WDzgLbnzutO57TS65lSXIobzhgCyXaelA4TTA+Nwn6SRUGl3n1tNDxIXZR?= =?iso-8859-1?Q?CMgz+tCqGIoe/Kksrr80fPCp9/Z7ecCTusBPOEjfYi4EQP0OsGddygSEXc?= =?iso-8859-1?Q?OVF/xLdDfv/Nuos5s1KrxIE80Dfdl/n9BAVfDfZOn02rhpA8bcPbyABOij?= =?iso-8859-1?Q?timHWR75DBXMt/Pmq3ewZM9rgWWVu7cbdFm607y+NDG/qiUA26ClcJoA5D?= =?iso-8859-1?Q?NpBFAWp6mmjxSFFMmcce5Py7oUw853PVuREmqfPXuXygGwpjD0fkjvAA?= =?iso-8859-1?Q?=3D=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: 751e9753-3996-4767-05dd-08dbe1ec7315 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:24.2742 (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: KOpVS5IHZX5Vxbx/IU+eiqApYPqgbHHhIpFn9hEUnoyoVsaGfkMSo/rQwSn3M2Fn072by5r+7KMaeo7oGeQFtQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR03MB6244 X-Proofpoint-ORIG-GUID: LGpLdLLlK9UrjPtc8liztQabBI6vERCK X-Proofpoint-GUID: LGpLdLLlK9UrjPtc8liztQabBI6vERCK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1015 impostorscore=0 mlxlogscore=667 mlxscore=0 adultscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621726885100001 Content-Type: text/plain; charset="utf-8" Add vgic-its.o to the build system. Remove the dependency on !NEW_VGIC from CONFIG_HAS_ITS. Signed-off-by: Mykyta Poturai --- xen/arch/arm/Kconfig | 4 ++-- xen/arch/arm/vgic/Makefile | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig index c91011bc15..d803793b09 100644 --- a/xen/arch/arm/Kconfig +++ b/xen/arch/arm/Kconfig @@ -90,8 +90,8 @@ config GICV3 If unsure, use the default setting. =20 config HAS_ITS - bool "GICv3 ITS MSI controller support (UNSUPPORTED)" if UNSUPPORT= ED - depends on GICV3 && !NEW_VGIC && !ARM_32 + bool "GICv3 ITS MSI controller support (UNSUPPORTED on old VGIC)" = if UNSUPPORTED || NEW_VGIC + depends on GICV3 && !ARM_32 =20 config OVERLAY_DTB bool "DTB overlay support (UNSUPPORTED)" if UNSUPPORTED diff --git a/xen/arch/arm/vgic/Makefile b/xen/arch/arm/vgic/Makefile index 21a71d2502..fe6821c724 100644 --- a/xen/arch/arm/vgic/Makefile +++ b/xen/arch/arm/vgic/Makefile @@ -5,3 +5,4 @@ obj-y +=3D vgic-mmio.o obj-y +=3D vgic-mmio-v2.o obj-$(CONFIG_GICV3) +=3D vgic-mmio-v3.o obj-y +=3D vgic-init.o +obj-$(CONFIG_HAS_ITS) +=3D vgic-its.o --=20 2.34.1 From nobody Tue May 21 15:05:31 2024 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=1699621034; cv=pass; d=zohomail.com; s=zohoarc; b=bMeDS/2xJqo63+K3QFr0nFT+zpIAa4YVC/Gb6cS7z9vVk6BqLbUp1j/vkMRUhXvNVDDyzPywxlux2ruj4fVBsff90TEpyzHoLvbHo1XyZkWDknGOAsh0jmwdOOHamuTKLNWPc6xNEPj05w+J7LAn4TCC3Yu62DyPeKAUjwLxApg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699621034; 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=Essb1Ld/1j1kT+sD5meqRu42KXbfpKOnx9aVBNLbuT0=; b=MJmL49gaE2+qU654NIDJKSIXu9n+pAhrDnNaoxe78QsrD24bWkEEb0KlyeamFDgCutdA6LUmYUxNP4Q21gmraNDuJ72RsXIncdvx3mF/ie1kIFrfBQihsbmtnNV+Gowg73MI3S4UovXa9cBzgzDz770q2fsTCj/DztHEuN7Q6yY= 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 1699621034640773.0017865582251; Fri, 10 Nov 2023 04:57:14 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.630303.983086 (Exim 4.92) (envelope-from ) id 1r1R40-0003XH-Fh; Fri, 10 Nov 2023 12:56:44 +0000 Received: by outflank-mailman (output) from mailman id 630303.983086; Fri, 10 Nov 2023 12:56: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 1r1R40-0003Vj-3L; Fri, 10 Nov 2023 12:56:44 +0000 Received: by outflank-mailman (input) for mailman id 630303; Fri, 10 Nov 2023 12:56: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 1r1R3x-0001y1-Bp for xen-devel@lists.xenproject.org; Fri, 10 Nov 2023 12:56:41 +0000 Received: from mx0b-0039f301.pphosted.com (mx0b-0039f301.pphosted.com [148.163.137.242]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 95e99666-7fc8-11ee-98da-6d05b1d4d9a1; Fri, 10 Nov 2023 13:56:38 +0100 (CET) Received: from pps.filterd (m0174681.ppops.net [127.0.0.1]) by mx0b-0039f301.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACHn4p029609; Fri, 10 Nov 2023 12:56:30 GMT Received: from eur05-db8-obe.outbound.protection.outlook.com (mail-db8eur05lp2105.outbound.protection.outlook.com [104.47.17.105]) by mx0b-0039f301.pphosted.com (PPS) with ESMTPS id 3u93ptjrxk-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 10 Nov 2023 12:56:30 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AM0PR03MB6244.eurprd03.prod.outlook.com (2603:10a6:20b:158::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.21; Fri, 10 Nov 2023 12:56:26 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::f172:7877:386b:8dc0%6]) with mapi id 15.20.6954.029; Fri, 10 Nov 2023 12:56:26 +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: 95e99666-7fc8-11ee-98da-6d05b1d4d9a1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c63QVfsZewcF1pWl26rSCmI8aikPmmNMdhmvOPBfUUhQeeXO5k/WuMsCcmYwTxXpCfO/AmLrnH1b5O8eNfbEfjCyjd5/+VzvpSUSTitAvfGwhVS9o+nu3IS7nEm3Kn5IsE8I7elEtd1bmLNUtP0as2boFaLyDVAOtZ+PiMjplVGbv8xpEl0QSjTgfROA91oxOhNpz8o7DQ50RxbxO5nHVwM4u4qILMBf+sjHrIvc7qQ3zpnELrCSyQMu0AhB845S7A/+TqcBGthZ5dPV6qtworo8wJNmmcF/AvL+udSqVI/jmH1KWPhTQmjvkZwSVjPJdlGvAXLwbeUdD11lSkBdlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Essb1Ld/1j1kT+sD5meqRu42KXbfpKOnx9aVBNLbuT0=; b=JHqFEL3swVJGriUuAufGagmNbwJHARD27sO97vBV0IVNmOAeWTdP9esqyKaII2xRx77q7N8skwm3lkxt21Nw9GFCtdW9AM1OhmYdd64T0wIgBMYqalwuWv9riYEvwsVqaTUiRaDzp/+69D0nUL0D9ga7jM+22lW3ky+LeRu5mj+tUMGeCzvfeXaXVEUDg17ALTPjKVV1aixY+XcboFYZuhlL4BqrKvkcSEPnaEywWw7MYhJd1iuZ9oBFXGiMPof35DME3Tk9YqMscEmCni4ZKxXgiIsYOZjuvvOQZzzdKXCyrV+aAruIDmDo0v4Rp+15P7psDZjVj3KJTTb2vR30Og== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Essb1Ld/1j1kT+sD5meqRu42KXbfpKOnx9aVBNLbuT0=; b=sNV6GEB6/LdzZyLvNa7HxTbKQmHUSa7NymfYOtixAaiwinKEPgbc9ntoux9skJ01vSoVoq41FAH9WvL8Lfd1mILUNl0LqXHPe13vah+bZR3CBDJC9+QpqnKnHf0VmbqNgd802yWwPFUFj2pPh27ig0/i9UkuclFxFW6Ek3XWo1uoJlpOITnE2F73x1r3xQr8UUw16vgheYQaMDrKu9bxFWndLq7unthnnvKji5cqIavsWg1LMMIHnnapEojXutLxiATSuCx34EiKtX4P+CaYWkxY52A1nZ92WpJnGl+6LX+B7MSjKptAfbdnDZPl3CiUtkAlBBXV2+vaWTqfi1uXdA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Volodymyr Babchuk , Michal Orzel Subject: [XEN PATCH v2 25/25] arm: new VGIC: Improve MMIO handling Thread-Topic: [XEN PATCH v2 25/25] arm: new VGIC: Improve MMIO handling Thread-Index: AQHaE9VPvUK8VLpzMkyL6GJ3SfoYcA== Date: Fri, 10 Nov 2023 12:56:24 +0000 Message-ID: <86465b3762ed8c9cdd24752792d0ca0e19698d22.1699618395.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: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AM0PR03MB6244:EE_ x-ms-office365-filtering-correlation-id: c10c18bb-b423-4a97-c8df-08dbe1ec7338 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: WaG648WEIxuUbX/Oa/9TeYfNtcsrr6ZSiNUSLrkbUcFk9r8JJIJ17TlyUAePUANS9Hs9Laiql9L/aiXm7TQ0hma6oyL3TQTGfMlK992oahnMX9Aq9snWAI3ypZeg43a+fw4yaXV8XLmA6S4MDOU717HV3FGxLi0xPnoWEeqquOhzD9n/81T924XbUlu2pixQP70BMODdGArU84lDxVUBKFk42xWo0KwDTi7HjB7AEvrURbzUpq9A9C/0cbpltUAOYmp3f2IkyUapDHHi/QxXCz79WRxPzcLwuc+321QitKaLURQn3AAslNQHFBgsQN0GnHOCg1PgYeJnKB2oLbWNTdMi0Tu668go2pS/Jt0k1oWuA1To0bcaqGOKj97zmGdIxWYTiJCZYNScEUuI3UwAe0oTziT/WqjXXLb0s45OYZ2WLs/EfdbhRnryocgZx1keZgmz11o+hm6S0ZImTDdXv0zUvQ2vOWWtm/xOtlRIMsTpKvbDPoaz7iIZQA/87RoZ+qlSZ+KWkjZ4TYBJ9YFCgPqu3TEHscC6tdDz2A7ITfKmymk+0iuAhTpwok6dlZ8iztc03LWoX7RiQtc7xFatKzt0DKWlf12/R7StZi5qSz+v1OJg7SEN9Vqh6pKnPewF 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:(13230031)(376002)(366004)(396003)(39860400002)(346002)(136003)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(5660300002)(41300700001)(2906002)(83380400001)(26005)(8676002)(4326008)(8936002)(122000001)(54906003)(64756008)(316002)(6916009)(2616005)(38100700002)(76116006)(66556008)(66476007)(91956017)(66446008)(66946007)(38070700009)(6512007)(6506007)(478600001)(6486002)(36756003)(71200400001)(86362001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?FhkxuoYfwRsvYQke8HuDW0cdZ5YbhRAOD5SCgJGGd6ZrZK6snCwg82RCiQ?= =?iso-8859-1?Q?Gc6kLNBf6vJJfu0/+5VO+GrSBk7b1JQMNkrhPJVwC46uHsD7WmzC/Wq2Ma?= =?iso-8859-1?Q?CaaHKZcqh3lzxG5hw1v6JcNlBm/EpRzsN4TqNc+ffLh4buKUlZaRk5hkJN?= =?iso-8859-1?Q?pxEER+Rs77ApHZ+rxuLi9ybFB5uDQf2EKw3wvT9urbjOiylknv2K4V5h1s?= =?iso-8859-1?Q?KMwfkGpFexwCyDM8p+81Ks0AEVhUWCiyhJyB/turtkEeunMRNVeMg4YRcJ?= =?iso-8859-1?Q?nvGuuSVyHLYzU5JTw4EIhC4gBRZ19s7eeztv0R7jOMm+r6SeEfWw3vZem1?= =?iso-8859-1?Q?dE97oN+6TwC0ZsJlK4ApABiD/QPNWTm2I2TK+tWk52n3jLIC2vFPbjQq4A?= =?iso-8859-1?Q?9JF2CZ5EsN1Sb/3SkWuG/4N7n11QKXGollu6P05TAAJZ0UWLBwu5z6mUNt?= =?iso-8859-1?Q?6LizCJxJF+dysCgKFE0lKFBaICEe9KhIMvoiDvJ1cWAuL8umPzvuI8VeaW?= =?iso-8859-1?Q?N40E7wrGxGFrb6acHnAXYFIINNM9QK7R3B1Fuo0vvjlZZxIrTzLmJ1sRo0?= =?iso-8859-1?Q?Wfh0Ck70dN/VZk8B7d1+jSofVhHA7CONQ5pnRGbeQ9uN05zQ6ZksbzbU0U?= =?iso-8859-1?Q?xrh8VyKQueQyM9CAq1GP4FAXYGFvqvmgP8ujFi5LfTXd5dYSAu4PJb1N61?= =?iso-8859-1?Q?aT9iDJ4ab5IhTdAzg91Ex6FmZjYz369P7mkm6YtX4i09ikwv1fIpGiGWTn?= =?iso-8859-1?Q?5UrgsnCT2yW1dB5zSCisxSpvF7gnJOCS0TPFc/CQMmH9ILr4hf9WMOHxOJ?= =?iso-8859-1?Q?7M/Hq5DWzUZtBUuCYL61yx1qSK/EcukpCZQLMQ6pIN/RzZ5XDgaNGzv/UT?= =?iso-8859-1?Q?05KWfGPCAqd0v4TNwQpJRYsFBLmAOE1tRCNNkzSZEH7US/JMaLtw7UUX2n?= =?iso-8859-1?Q?hy3UVJ7UpDYzd87XJsH/fSR7gMUpU1dGnUzOw5AhhOhLxyg8sjShtqZ1Zq?= =?iso-8859-1?Q?3oVJGByhWpkqrDfJyctfmL74iijHIl7aeibU49/+dYmUWGIfwiSMKhzA6v?= =?iso-8859-1?Q?0EWEIE51FpYx4B7XRgPZm+qOzyV5C/LMl4W27gQd2x+vBwZFYSwaHu1+Kd?= =?iso-8859-1?Q?+0MAcpje5frBLKgJv22fTSS65bsgd4x2rkFW+LwWfv75t2PHfqva0osBVg?= =?iso-8859-1?Q?B8BlSiu00LsDtK4eir2QWgWKRXLSAP2zhmkxyMjM7AyKTBIfGTLB+tzY34?= =?iso-8859-1?Q?w2liS0umC2mAgl9Gv75/DuCbxNLWS9ZoRLZ+gpmnvs8+TFom0Jy1yqoQMm?= =?iso-8859-1?Q?SWfS+f/1/2zHWkdUwxVRil7wDIULBLvX/b3VHLW8ix0ghNv66MD27iJRd2?= =?iso-8859-1?Q?CJNXPQvGhNpqN9X5XQLo+nW2tshLGWfFcFpbWgOG6oXS29APXSvZr02zH5?= =?iso-8859-1?Q?pmJSVsRXaPmJYKU8UYy4Mb3g1plZK2+agvYEhC1cUx9M5mPTiXPs89rPG7?= =?iso-8859-1?Q?E0k855C9Nt5XELUVCPHQw7b17jj/8wWs3vIYtbWT8+4KTIRvJ3MF0sTw/F?= =?iso-8859-1?Q?DujK0oS15dNjhggv2rvlsGe4kUYBcsyL9CsfzzS4vFD7UVIN/HFdtEGe9j?= =?iso-8859-1?Q?IgO9D8Td1H2PygvpCzhLOMFz9Yh42280F9f9qMX9m0nokY03U+Jtua5Q?= =?iso-8859-1?Q?=3D=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: c10c18bb-b423-4a97-c8df-08dbe1ec7338 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Nov 2023 12:56:24.5661 (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: gQn2UEzqJBNOz6AO6CZuTX/LsBYFiR3c3rcv+m7enJhUM6gKSTzHb/KyS08/Cbyp66AABrl0McVvHx+mhHfIUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR03MB6244 X-Proofpoint-ORIG-GUID: Fpgoxg6hpt-rrGfZtlI9QyKkLHsnyNb0 X-Proofpoint-GUID: Fpgoxg6hpt-rrGfZtlI9QyKkLHsnyNb0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_09,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 clxscore=1015 impostorscore=0 mlxlogscore=356 mlxscore=0 adultscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100106 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1699621035167100001 Content-Type: text/plain; charset="utf-8" Currently the full register address is used in VGIC MMIO handlers. This can cause issues when VGIC_ADDR_TO_IRQ_MASK overlaps with the base address. For example the current GUEST_GICV3_GICD_BASE overlaps with addr to irq mask for 64 bit registers, causing intids to be calculated incorrectly. This patch fixes the issue by subtracting the base address from the full register address before passing it to the MMIO handlers. Thus giving the MMIO handler only the relevant offset. Signed-off-by: Mykyta Poturai --- xen/arch/arm/vgic/vgic-mmio.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/vgic/vgic-mmio.c b/xen/arch/arm/vgic/vgic-mmio.c index 7a28be53bc..abf7854af0 100644 --- a/xen/arch/arm/vgic/vgic-mmio.c +++ b/xen/arch/arm/vgic/vgic-mmio.c @@ -540,7 +540,7 @@ vgic_get_mmio_region(struct vcpu *vcpu, struct vgic_io_= device *iodev, =20 region =3D vgic_find_mmio_region(iodev->regions, iodev->nr_regions, addr - gfn_to_gaddr(iodev->base_fn)); - if ( !region || !check_region(vcpu->domain, region, addr, len) ) + if ( !region || !check_region(vcpu->domain, region, addr - gfn_to_gadd= r(iodev->base_fn), len) ) return NULL; =20 return region; @@ -565,13 +565,13 @@ static int dispatch_mmio_read(struct vcpu *vcpu, mmio= _info_t *info, switch (iodev->iodev_type) { case IODEV_DIST: - data =3D region->read(vcpu, addr, len); + data =3D region->read(vcpu, addr - gfn_to_gaddr(iodev->base_fn), l= en); break; case IODEV_REDIST: - data =3D region->read(iodev->redist_vcpu, addr, len); + data =3D region->read(iodev->redist_vcpu, addr - gfn_to_gaddr(iode= v->base_fn), len); break; case IODEV_ITS: - data =3D region->its_read(vcpu->domain, iodev->its, addr, len);; + data =3D region->its_read(vcpu->domain, iodev->its, addr - gfn_to_= gaddr(iodev->base_fn), len);; break; } =20 @@ -596,13 +596,13 @@ static int dispatch_mmio_write(struct vcpu *vcpu, mmi= o_info_t *info, switch (iodev->iodev_type) { case IODEV_DIST: - region->write(vcpu, addr, len, data); + region->write(vcpu, addr - gfn_to_gaddr(iodev->base_fn), len, data= ); break; case IODEV_REDIST: - region->write(iodev->redist_vcpu, addr, len, data); + region->write(iodev->redist_vcpu, addr - gfn_to_gaddr(iodev->base_= fn), len, data); break; case IODEV_ITS: - region->its_write(vcpu->domain, iodev->its, addr, len, data); + region->its_write(vcpu->domain, iodev->its, addr - gfn_to_gaddr(io= dev->base_fn), len, data); break; } =20 --=20 2.34.1