From patchwork Mon Apr 14 09:51:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 14050079 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 257BFC369B5 for ; Mon, 14 Apr 2025 09:51:36 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.949485.1346007 (Exim 4.92) (envelope-from ) id 1u4GTK-0006Fj-CN; Mon, 14 Apr 2025 09:51:22 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 949485.1346007; Mon, 14 Apr 2025 09:51:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1u4GTK-0006F9-7N; Mon, 14 Apr 2025 09:51:22 +0000 Received: by outflank-mailman (input) for mailman id 949485; Mon, 14 Apr 2025 09:51:20 +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 1u4GTI-0006C8-Kb for xen-devel@lists.xenproject.org; Mon, 14 Apr 2025 09:51:20 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2061a.outbound.protection.outlook.com [2a01:111:f403:260e::61a]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 03f79f7f-1916-11f0-9eae-5ba50f476ded; Mon, 14 Apr 2025 11:51:19 +0200 (CEST) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB6872.eurprd03.prod.outlook.com (2603:10a6:20b:294::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.33; Mon, 14 Apr 2025 09:51:15 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%4]) with mapi id 15.20.8632.030; Mon, 14 Apr 2025 09:51:15 +0000 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: 03f79f7f-1916-11f0-9eae-5ba50f476ded ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ezpq3xkgoIJ3LcQ5OcA2VWMP8axnTD2P0e7WQRt7iSRfHubGFByGaQ6TWCqxlGffFkgu8KSm4z97wiQ380eZ6v+ti1CeZtqYd2b9R6qS7M1BDvpBu+zXyn71cbL6o94bjXZRoxvIoGZ0HUZuBq7CA0bwTb3tWqchGcGIwmaZLiYiJRjkhfEWr8rgwGdQ3uuIh+o59Ikw2ATKyR5z6fPuI2xcuZ9yHmwIKsZxzre6uGzcIOqH3xpT9Y7aNipU6Lt6vnc7NkBYUGqhDH229NlRigI7ZWRvqtEHT+IjqOowTEFmEntcXztsVp/71foU01EK8MQvzj4PUNPAU7gTkZcKfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=N+vR8dRTwJ+Uk8oCJ0o0/7hbQ9YNMpt9YztKzxqFNpE=; b=AJ1pSWiP8qcehQ6Zg+sU257L3gKnCqwyKg2IXI445CI7ZMsjjn7vZCM4yHkKuy8QQPOqusUZHmeZHh8hgDlYOFS7Su67j8l3xxNuXm8xAA31HPasUwuv/0LWVJaeuQcWDevxln5HgIhbEmwpFIfDPScWmoyuMXg7nPZpmB8dSidX4DUVXUWd8VZGrcNidWhZkR0PjRP38OID7hm/yxFIk5j2VkZnADYnQBKoxfIpzABbYBZJdB2MGvVhDPyaxG1nkYb94dp221EMOXhsxtStlyfSsCHSOaYG37cpVzPC9hJnKPpjtVwaZskV8nHMI92GH8pB09iiVDdp4zborcqo2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=N+vR8dRTwJ+Uk8oCJ0o0/7hbQ9YNMpt9YztKzxqFNpE=; b=cYdUNIOkXt3B6NhLw2tQMhA+FKkZbcjjBC9qsDuL/qP58J4NTubVVHDd81Y/C+k1pAzBs4od5B7Xli12fxodPETO/D/7j75j3s9w5Ro1r555ZEJvq2vJPlU0mIgc1qU0fembM/XpdAt08L/X1VwsIxOEXf6sfPS/JE9z1gnr0a29IJutCJn4ieT8vD59rucSA+3H4R30JW3E6XPvzhCEJSNn+41EnG0NtDfa0ueq/m4lqVNFcCVZWCR/rzvbKjREPNlVIkcBKaM4lNfFBG15JQJ3A6HHSPUI80I3TwGfzBJuHLiGtyRvixcISbgh1e96UtkByqS55oPNjhZMiCB1xw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Mykyta Poturai Subject: [PATCH v2 1/2] arm: vgic: Add the ability to trigger MSIs from the Hypervisor Thread-Topic: [PATCH v2 1/2] arm: vgic: Add the ability to trigger MSIs from the Hypervisor Thread-Index: AQHbrSLDj8+kM3eLrkyegn+x6Pj4JA== Date: Mon, 14 Apr 2025 09:51:15 +0000 Message-ID: <3dba1b51984f24e36d5fbd81396ab7dd53d8ac95.1744621166.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB6872:EE_ x-ms-office365-filtering-correlation-id: ed3fa4f8-0175-4168-4c3a-08dd7b39e5fd x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|376014|366016|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?q?350i9P1tHmLqHNSITUqD6QajRU?= =?iso-8859-1?q?gIrX+mfuEiivy3heQqEYHpujU3TXu7S3guZpeKRhJweZgxXLBNJDACtLgguj?= =?iso-8859-1?q?JVQz1OY4qfc3m92lW3ysJxSm0QnMasIODF64ybQI7BjdiqaEi2R9nhT8pnBe?= =?iso-8859-1?q?JQSmfDb23FcinXZrUMXth7dE7cpKO7bBcgerd7i5+rLw3XLIurJAgALUrgjG?= =?iso-8859-1?q?bI5B33yYN0Llc//woOGxkdqUXxkZwWNS0PVgIBiLZVxxRPn8eVesmm7+FAz6?= =?iso-8859-1?q?1nK0xVAH4wxEu/hYfhaTVBEyg9/+EcvKHfuHhE9a0acEHQFJHWtRrsNVdtLH?= =?iso-8859-1?q?jSxosVUEzcPzc3Ja8wuggsOzJp89p117i1PPoqeJdwlTfFcL8yuoYUq5Q/Tv?= =?iso-8859-1?q?BH5M8dVHhueTtUWIwyhiLxvR2SImWzsH+z2EHH7eClOHOrbyJ+Qv9AuARPVN?= =?iso-8859-1?q?U+s4Yfs+hT1Hr4mP3VEnzCA6M3EBn+6BM0i+4M9r+BOLNo09qt/DbYdo82xY?= =?iso-8859-1?q?k2vyappDuQNn5s1GMfRquipDTg/M282W4dvJuTeNKfd8u+hkT1SyFb2X9Wc9?= =?iso-8859-1?q?TCfsrHa62WUf8p5j9WS6EP2fXpaVsruPHwqPUnCk2yetWFYfV/qGbxoWYa5s?= =?iso-8859-1?q?/NN6RznyBzfrZrCjGUwIyl2rkF5vpt5ldEWMD55O4J45BzWkEeghFs4nXjn0?= =?iso-8859-1?q?rCb/qijcBRpCFbt+RgXjrNWxYRuo6o6M95N9bkdzOOHMG0fsP0Hkufo86bnC?= =?iso-8859-1?q?xoDZAusBl+osGJgAtw2WzWlU3Hg+hFZXfE/xMv5TqNW87Q3L1z+O+mkcUvbO?= =?iso-8859-1?q?kFdIlpwYIOZCHcKng2sUJVzQc3rLiuCkJW7W2ErK9ju+rZEQgp2VQBlGz3ae?= =?iso-8859-1?q?e0VPMxGTI+E/8v/0HHJJ3+G+jMk6ecF9V0l4PhjpiGF4MuE0XbejooTkXSpf?= =?iso-8859-1?q?SqKGmdAvzy267cFX0SxklxRrZamrV3XQGOldXpK+ngZqmYm3CJtDH7jNlyW6?= =?iso-8859-1?q?qtTIC5fDr9B8Olt5obaD962SRM2WipZHVvTFlf473gzTsRG9w76yuB9lreyM?= =?iso-8859-1?q?sekiGtqaIViKgSkge9q5ph6lMoXpBvWSJ1Vi0GFz+g5kmZmHjmI0cmJbveEb?= =?iso-8859-1?q?TFAyta2A52QJ5Vq6VYe6o0YwInDXAaJq6T9ogCv23o4iKPdD0nzOa+fZP4aW?= =?iso-8859-1?q?QIAMgdQ48mjgxbQSVgFbMTsUDEuqYtq+ODlNdCQLYm7sbiv20JlUoVOkn15T?= =?iso-8859-1?q?ClRkwXCv3BFWu8yJFupQv5NNcPOuog6AkhqbQ6fh6nZnL1euDBbOsdbmu6eU?= =?iso-8859-1?q?eeagDwEhEltHzq1ItKTOJ1jr8CtvP8EeDW8sBU4hf96j80jojEJtoIZaSIGA?= =?iso-8859-1?q?J+kQMqFcBg64t+AvJMlZ9EnES/k5wjK1ua+EfHSnznxc7afP1oLSnAd9sAu5?= =?iso-8859-1?q?EEL2t17nJWB6UB5wmIDJ8ADLpXwp2WHOB7ZoOxothQTw+rwiWABQ5IwRkEPi?= =?iso-8859-1?q?F2ExBiA5e7uwenXRsUEgp7sxtG7g=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?TYi35JLBSO1NTgJilvIwsxj?= =?iso-8859-1?q?evbQZZnt1EFeet7whPPNhsbP+3HuaWP2fG+cuDoU4ofAFUf1VVyjKXpqppeQ?= =?iso-8859-1?q?RrRkbVrU7nCep66rV4lGvEc8RixknDdfUpJFso4C3MLOt/Y2rQdXlN2OdjqG?= =?iso-8859-1?q?45pkHJGhb946HSgcixTo6Tttn/Knc9TEYWuhsBo1ZqobvqrCsg8LfNknP2Bj?= =?iso-8859-1?q?Yh7aYUUtrpkoJyj/DbW6GG8XrdOYK6NRUJwsETGRCz6w8mBydlFyseeY9ZIx?= =?iso-8859-1?q?N2blp73i6OiBuhv0HXSv2q/CV7SzcVjjc3cri1MO7CX0YB9jagYTpsM0jFw1?= =?iso-8859-1?q?TQPWZUp/yovIJsuIwS+uDbbqkrc24gNuSZwkjxTztRIgrWttB/ZlzvRJU4WT?= =?iso-8859-1?q?rsXHJOfenBJtU8wHiGhVC14MDXLxQEX/eD57aHPV5bNvWht6aU0ASPNjIblZ?= =?iso-8859-1?q?JsRdJ8pj7EXBsvl6/VTzrR0ai5GIr3SMIxguSO6vJzC9ZyNn2vNXVTImjdYT?= =?iso-8859-1?q?LwrKaikeNHZw8+72fuQpUIwi2fQNYBu/H8x7lro+qb/SsmbUjryuxjL4omYn?= =?iso-8859-1?q?Q4158vb11Zw/WsY5xUKMp8msHspycZt7/rhlOpkUP67CG+8dCW2AyW8njcC9?= =?iso-8859-1?q?e1+PHxG8dUumqrcLBjCe0URMhti66iEauahIxIlutW2Fcs7h/jWEc7t9vBuk?= =?iso-8859-1?q?iK0FCuEpQshMDDvuIBHi9zR0SBd/2KIwFZd6X4H2IwxzzYHLN+i7pqCQHK2L?= =?iso-8859-1?q?ica/8IN6YVIF4pjE7B10UWF9vuDte5myDjuGS+AhXa8r16f2EnnfY0yhZfqg?= =?iso-8859-1?q?YLeQBQ4sQJ4YstOWEDSq9JdnJEdjKFiVYmDq8SBgZGaPMPDMKBVDZl8rO3/a?= =?iso-8859-1?q?nmMCprfec44B8v5PqUtp5XnIxSgOIzTuj1BjUTtX1lo9Ga1Stp3xNXfs032k?= =?iso-8859-1?q?rQg9PIWYafE3xEJzxhU8XEJAHmt7EzJ6LItWxrXI+bdD2rx+vkaVBhqnQLn/?= =?iso-8859-1?q?Fde/eKRayRfgXh9R+L+YaV1gvKU0VX7BWH132C19XV2Kr0Vkpmfx8oPc4EUg?= =?iso-8859-1?q?g2oxrNV76DokowdX1k6zped+8zbRNi/ToBbStRjm2nxzLkKXnI5dK+7zDtbE?= =?iso-8859-1?q?cEdWvkIKPxtjIETau1N37Rw3+TpAyoUHNUEjYIVz2AKrdweWiB81vfDNkSPy?= =?iso-8859-1?q?sN+vo885OWzeL3e0kB+NA+2tghNUiCtT35moCjT41BOpp9WUwFVGvwnsuHMg?= =?iso-8859-1?q?Lep4CswwnViZqgMUdCWcghUfiBLjrDbleFAd+xlKhh3MSFTH21RnGtFVxgpP?= =?iso-8859-1?q?vPf9t+ASqgPnRjhByGi0Swh+oRlys09Biy9EJqSjSUgyeoUBiPfXkfoeBkQ2?= =?iso-8859-1?q?RA1BHXEFGkQxuluHSeqYIrum8QtoOO5zuwm2iNaCoOzBEsrKQyxsLlM8T/DB?= =?iso-8859-1?q?5Kp1NZMg0CvODNxlMzp0BFrUx/IaCOMCqkqVP/mPexsZ980tGHO0uoERsdIQ?= =?iso-8859-1?q?MRmX00Xv4b7U481ZHJWb1w6e6guF8sQDZJ2V3DK/AAO2ux8714GRo1xVGahh?= =?iso-8859-1?q?wPj0daC1pRPO0tjXNHdv6o+wfwm4unVf9tTn3+vbeheWtnGV+woxDtdMofLG?= =?iso-8859-1?q?ZW8bwJi2B+4H6mjE/ZN+rkY1bNr22ukzyBcdzZw=3D=3D?= 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: ed3fa4f8-0175-4168-4c3a-08dd7b39e5fd X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Apr 2025 09:51:15.7913 (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: ez8qfmnrv1AQV4QRm+FRt4LeTPzMJJEROla4dUrZeUtBc80w/ApJugkVKA1hKg0af92x46I0jie+LGf0jLKx8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB6872 From: Mykyta Poturai Add the vgic_its_trigger_msi() function to the vgic interface. This function allows to inject MSIs from the Hypervisor to the guest. Which is useful for userspace PCI backend drivers. Signed-off-by: Mykyta Poturai --- v1->v2: * replace -1 with -ENOENT * reduce guest memory access in vgic_its_trigger_msi --- xen/arch/arm/include/asm/vgic.h | 11 +++++++++++ xen/arch/arm/vgic-v3-its.c | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgic.h index e309dca1ad..3d8e3a8343 100644 --- a/xen/arch/arm/include/asm/vgic.h +++ b/xen/arch/arm/include/asm/vgic.h @@ -318,6 +318,17 @@ extern bool vgic_migrate_irq(struct vcpu *old, struct vcpu *new, unsigned int ir extern void vgic_check_inflight_irqs_pending(struct vcpu *v, unsigned int rank, uint32_t r); +#ifdef CONFIG_HAS_ITS +int vgic_its_trigger_msi(struct domain *d, paddr_t doorbell_address, + u32 devid, u32 eventid); +#else +static inline int vgic_its_trigger_msi(struct domain *d, paddr_t doorbell_address, + u32 devid, u32 eventid) +{ + return -EOPNOTSUPP; +} +#endif /* CONFIG_HAS_ITS */ + #endif /* !CONFIG_NEW_VGIC */ /*** 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 c65c1dbf52..be5bfe0d21 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -1484,6 +1484,25 @@ static int vgic_v3_its_init_virtual(struct domain *d, paddr_t guest_addr, return 0; } +int vgic_its_trigger_msi(struct domain *d, paddr_t doorbell_address, + u32 devid, u32 eventid) +{ + struct pending_irq *pend; + unsigned int vcpu_id; + + pend = gicv3_its_get_event_pending_irq(d,doorbell_address, devid, eventid); + if ( !pend ) + return -ENOENT; + + vcpu_id = ACCESS_ONCE(pend->lpi_vcpu_id); + if ( vcpu_id >= d->max_vcpus ) + return -ENOENT; + + vgic_inject_irq(d, d->vcpu[vcpu_id], pend->irq, true); + + return 0; +} + unsigned int vgic_v3_its_count(const struct domain *d) { struct host_its *hw_its; From patchwork Mon Apr 14 09:51:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mykyta Poturai X-Patchwork-Id: 14050080 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B8FCDC369B6 for ; Mon, 14 Apr 2025 09:51:36 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.949486.1346014 (Exim 4.92) (envelope-from ) id 1u4GTK-0006RM-Qf; Mon, 14 Apr 2025 09:51:22 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 949486.1346014; Mon, 14 Apr 2025 09:51:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1u4GTK-0006P1-L2; Mon, 14 Apr 2025 09:51:22 +0000 Received: by outflank-mailman (input) for mailman id 949486; Mon, 14 Apr 2025 09:51:21 +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 1u4GTJ-0006C8-Kc for xen-devel@lists.xenproject.org; Mon, 14 Apr 2025 09:51:21 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2061a.outbound.protection.outlook.com [2a01:111:f403:260e::61a]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 04410c13-1916-11f0-9eae-5ba50f476ded; Mon, 14 Apr 2025 11:51:20 +0200 (CEST) Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by AS8PR03MB6872.eurprd03.prod.outlook.com (2603:10a6:20b:294::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.33; Mon, 14 Apr 2025 09:51:16 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::35ac:8893:c31c:b971%4]) with mapi id 15.20.8632.030; Mon, 14 Apr 2025 09:51:16 +0000 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: 04410c13-1916-11f0-9eae-5ba50f476ded ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NFQ5dgZrv0fkg1sFb4wfi/0HGvOyl9P5UkdgddWG4iQlO2ULIOTwKnP1h+2RpoI5SmQF11F/xpUw/6ep8LywMzzYyIpaTvEweNf1iV7+ArYsewkEHayKX01F3uLgMtPvc6DOvHXNvCZvolNEfaHNmPhZm7TLuKRtY1S6VDLhSQaBFWSS6SYAgpdDiU54E3D77gn6PCA3OlXWpj35RfaKWQMxyy/f5N6/Suz+PfOfM47NRrGXsqRDzPiRCv89yoB3hCOc8/+j3HTYT1zIVDuVDS4U5Aihu7bvoSDZ+NhwZ/DzOi0MrsOEYvBIqH9rfYxMzfM3OOLusQnXzHG32ZgbEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DCUrpCPZhHZRdV45SQAWMseE8AkytIb8kJ3NzO6GCss=; b=VlvEjAmwuwxM1DE6D1XxCSusxMZkHGkqOm7oRzD8x0L3yzz2xLuvSa+0GXSmkmAQaBMG8ESLbrY2/vh0lLgOFcim3GPMJIHPRps3xH4ngWeqgfgWwW6nf4kZdC+WQ8J10mmAprmw6xcGoxlCrjO0NuIBiPRTx3rpzG9/5iZdYtf9+D11WbrXX1xTPWruh/TzbwnDHGpi/SBR34cfmrnROo3qU2jHQWLmk2gYjiNLgnuZX77/Zi1P7fTp9dWAPFZlFo7AyDl4MtLR+oE/JOLrvh+EWlvlV9G+ySu/qqY1TI4g4CQs1BzFxWbhsy3zKeurEi3KGGw15+lX5m5kU3PAqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DCUrpCPZhHZRdV45SQAWMseE8AkytIb8kJ3NzO6GCss=; b=nUoWioedMYBYmsLu7u24mjZXYi8H7QZgsIMEIbUAbyCVG+Cp1efyMd6/in3XtkCgCzOY66XSa+Wr4F8DMX22RSWIsugk4+YixCU4yn8M0B3tHS8eBnhmMIb1loeT17t+T9JHgSZd0OYLMMIIufon3wvvNRZsnYVlnNPITgG2Ax1fqYc2Y3UqLqHA7mh6iPUZyrQ2Ouh/iri0BBuH272kkNfUPzf9dR8qaCkuHkxhKvCxHGXpMk+FB3ugrBV2Eo+4SGP5kERzZynXk6vN6HPLbQUhceDUQCzZxLMYl6lGfiSS/mI/x1rvrBmNcZzesAXmvIXJ0traow1ZAkoGVKMZBw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Anthony PERARD , Juergen Gross , Andrew Cooper , Jan Beulich , Julien Grall , Stefano Stabellini , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , =?iso-8859-1?q?Roger_Pau_Mo?= =?iso-8859-1?q?nn=E9?= , Mykyta Poturai Subject: [PATCH v2 2/2] xen/dm: arm: Introduce inject_msi2 DM op Thread-Topic: [PATCH v2 2/2] xen/dm: arm: Introduce inject_msi2 DM op Thread-Index: AQHbrSLDkG1zT9bAeU6MKrLu8tJrtQ== Date: Mon, 14 Apr 2025 09:51:16 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|AS8PR03MB6872:EE_ x-ms-office365-filtering-correlation-id: 00afb2a2-3706-48c0-36be-08dd7b39e640 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?q?HatIaZQtJ7x7qAQ9R/od3DDTYo?= =?iso-8859-1?q?mVlrt9+1mhL5nf4KJnFZDMkuYjZ961L6lhU2B6s3FIsA51eM/i44PkauREwO?= =?iso-8859-1?q?lAXBw1mz00DtsaEfioMCRThJ+nPnY6+QR9OIgb0F7AZ7Jgkx1lBike9GO/ud?= =?iso-8859-1?q?JSAIfkSiuwebsb9rCTVX2RWOpmH8OfYA4B1bwXWNQffsmnVZKJV15CCsbeVj?= =?iso-8859-1?q?Klfph9bUJ41X5ec5rdkzL8olZJzM/ymuiWZFTRlL7n4HP3V6/AZ71nWBnObd?= =?iso-8859-1?q?qLRydPvxXr7QZOZ/GYwjd1Tr8/Gw/j0Cihdpus1EIS3Mp0dVBs8EqhD36w4Y?= =?iso-8859-1?q?CkoeOA/t16YdbpGSOduBOsQhqWsoLk1Y5Rpxts6U0YhiyWRvCY0aHCSiPuYn?= =?iso-8859-1?q?c1Hfix5v2bygHFC9mlChuCjVLVMokuWGZeiO0Ejc+sCYRqb6vqOsQep/vx7O?= =?iso-8859-1?q?edNWQS1rxGmWKB5Zhz2nUk7PfzWFDBwF/gkhXzee0TVlIKm6zOetdM/M/ib6?= =?iso-8859-1?q?XSIA0GhvGSkF47iX7szJwUadYjohEbtqQuDOpetZNjPLRrzytLIkeVJe3tgH?= =?iso-8859-1?q?1uuub4WYNQXyW/gPl/nzFQLyk5yto0FSJk/UvXsnxRa29kW+MtuRNg72jpvD?= =?iso-8859-1?q?gKZZPO4qAKKoeTSK+gl+ee32v5eTEnIMtUtSMxpHEk561o3VadjJyPTOcwQO?= =?iso-8859-1?q?LKYgobUHVd9SA9COTzHpdLD2IpN4Qvp4v1MWBAqHWpBBIvyDppIm0WLx29H+?= =?iso-8859-1?q?lEKSaHguP5UH7bHbCQwIqiPahUQ2PK+ZEyXCdb/wb5MuwvFrBlkdBurHsy4s?= =?iso-8859-1?q?l4eeAFMWGEVR0yqr3RaFZZOqcS2GeL/F5DKPhgLav2LaKJSTE2Txc9YyoQif?= =?iso-8859-1?q?YLGoULGBny9HpOFKtH4KVebXYAJK86JU4GHueD9EGpferWJWSoQYhdkQJaCF?= =?iso-8859-1?q?0LnifMfc/mxuN3M/7YBqOaVRBfyuNJurWxo3rHhW/wmN/sZ4jJ7/gTyrW3Ix?= =?iso-8859-1?q?9HjJ3t/GVa+qdi0Z/98NrV5RhCmaZ+c7OTxTNwA5m3QT14T98gzjAw/em7/I?= =?iso-8859-1?q?Q67RqYr8aOj8gb6XzPPtILy7ogLFrL7LCfCJmKhEVdCFpWcCh8j7NVVdctwy?= =?iso-8859-1?q?aZEPb85LdTrS38ph8cnz+GoNQBtgku7AuFdYhz4EDwS/ku/8IzR3eXyQKQ1z?= =?iso-8859-1?q?dcY4dVlHt8UViSgUVAEn1MjAXvxukRLVmFiaOgyMDCBIWZjWv7BXuLSSyx1u?= =?iso-8859-1?q?/x/AzeCgHsMamvdH7cDo4VlSHXmbiH+c9jp5qIIKulTN2O2GzzZKKICyntRZ?= =?iso-8859-1?q?dJD9FSPrb3TsItts+4HwVANfZxI5c3CDxmDH4shGaGmNyG7zSWPXGL+yh6y3?= =?iso-8859-1?q?gsXgNisilYlwXYu1vxboef/J3+9xhzRXjwAE0S5tyj1LvBDDtuIevO8pDpxf?= =?iso-8859-1?q?PkaNQd60R3UVE6lcP3+XZR8PS4QU3TbSkylQsJVOdtsHd2DHmvoltztxh0LK?= =?iso-8859-1?q?CWaPLJvu1bdrEb5gG+PxhsaSLlsw=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?gZD94UDwIR0+ybymvK9cOSB?= =?iso-8859-1?q?nivzBqiLEtUHrYAryWeFiUQNcWZ5CbG8cGBWgiRGJKvx1ZENprZTbx8icSOZ?= =?iso-8859-1?q?Z+H0ILmxKnawhGugdHAUArP42/sxadQOlLMu6aOodWiNo0asE9Qeyr0woq9U?= =?iso-8859-1?q?psz8kzZpMCo5ZGvZUc1aJru4X1R7UoWehzbJuP6KWTEY10n770IoYHJ/uYIM?= =?iso-8859-1?q?RYRXPV4XS9BZx+SQN/Vc31JG7ccOKipSllhOdNFgOs91SH5ywDe/t8ecm02D?= =?iso-8859-1?q?SdCxR/FFnxJeHnQ5sSHu1DztLvMt4MyyHw6ZZ0ojqqEwRpk6zOdUGRSfp8Rj?= =?iso-8859-1?q?+Z2Rd+Y5gqBQv/x7H32d43OcMHxn4Rqrz8a7guZZ/WeVkv0ojdRJuNMkjPu0?= =?iso-8859-1?q?FfZb5gq3dIx1XdrH2aAC9RclapktyBiYjhNqtA6wYWvq+c+/fRMtBlDG2VyC?= =?iso-8859-1?q?LSh/g+0Je2FPjxrxgRMDU91686uy5yafs9Hu12O1Vo8RbfVGv2BHchcQokoz?= =?iso-8859-1?q?lyk9jiDpVl8cy4vU6zEs8jEDkjQkBA2l0K5P/TwegOrKUDzwxh5lnlZ5pcVS?= =?iso-8859-1?q?8g4IwUwSVPgoJyc4GB3cNC7HMpxa9+ZfIIFY9ahryaMdmPotN26E9drtI406?= =?iso-8859-1?q?DCiRnrro9QZN6e+mYNxkt2oOgAVNkenj7ibzQLDjNn7d1geg9SodbYJF0orQ?= =?iso-8859-1?q?mn81VuXVSMTSzccLTVj3ZqRMi+pHLeOLJ8H07Dn2/oXwV6A7SzNWl/G3uIIV?= =?iso-8859-1?q?E9GAzBeliXBMZ3gGSo/TiGbJivZep/XJmR5iXL2NLBWOMAGlYGnSJ1wLa0xc?= =?iso-8859-1?q?jJWYqGmS0cwJmMkMKHgS77CdgEKpOea8kUINMigzrXiaipTsGwh8i+XlRVK3?= =?iso-8859-1?q?T/DXABmwQUGYoFUVU1ZBrxTJuhZyVARUzD9D8BTku017gX69kZ2cRop09DjP?= =?iso-8859-1?q?0SuDb502tXnuG5FZxA0Q9tiPdJsYJx2thBE/cGZ2IXrbbk9fHD1Guuei7RgV?= =?iso-8859-1?q?TfHq1obm7T8FcVQEXdpQUF2Ld7g78Eah+HyI09zWgoeAhLIpBTjsujAqo8aV?= =?iso-8859-1?q?HlDGFbhAtshftNGvjNQrTC6BFU9srBhtW+DqaAOlB61raJw57s0+dvx9Hbi6?= =?iso-8859-1?q?c5st3RWdgX2HVNn8eNKF1xrv6Z1Jc3ZEvnDx8daK45PQdJ3zZoz3gKrHrwvL?= =?iso-8859-1?q?TDY9iKSF11+1ACA03bsXlD18G9B8TfN3WES144viRw/jOZI0VPtkoJB7TksG?= =?iso-8859-1?q?X01QcF09D0Zz+9Ier/F23qJLgByttb7nOdgL/GTEZfXg0vQ8lHyp3rcz/iJO?= =?iso-8859-1?q?+il8LxyDufMbfYlg3r5mZsTzuV4W78a4fPLrMNZa900/USkqr88qCQAjCDsH?= =?iso-8859-1?q?SrRbTtF5E1V7IfhaQBjh/jNYMiYPujqx1p+FYNuqnNPyLEDYVfNaUh/5Nid1?= =?iso-8859-1?q?e4FsIHO8osb1qREJBANkX/sD0y+vrZlXu+eQ/Uae1XvjKZ41gsfqeOn1dCn1?= =?iso-8859-1?q?FaZsLhb89QPzmsrixJq7XH9x4cf/uAANmz7uG1lI65HDsOVPRblpXDXo3q+U?= =?iso-8859-1?q?8HQlG/qe3qcooyPdO5OPHz5eNgEnD1KcY0zaThSfigFJkxXc+GukD5ubHWgj?= =?iso-8859-1?q?GhU5IkwxFPEVyDZ94ss6Ab83VJg/VxJILg8ObOg=3D=3D?= 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: 00afb2a2-3706-48c0-36be-08dd7b39e640 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Apr 2025 09:51:16.2252 (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: ypg7E5VFDg85D3v9NetfqsiB3SU+P2vVTQrWtyfqQE74snVUTJnM+mqPYY7A+natRp0935CY2QNrr5sjYKFv7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB6872 From: Mykyta Poturai Add the second version of inject_msi DM op, which allows to specify the source_id of an MSI interrupt. This is needed for correct MSI injection on ARM. It would not be safe to include the source_id in the original inject_msi in the pad field, because we have no way to know if it is set or not. Signed-off-by: Mykyta Poturai --- v1->v2: * fix warning for ignored source_id * rework xen_dm_op_inject_msi2 struct * rework xendevicemodel_inject_msi2 params --- tools/include/xendevicemodel.h | 14 ++++++++++++++ tools/libs/devicemodel/core.c | 20 ++++++++++++++++++++ tools/libs/devicemodel/libxendevicemodel.map | 5 +++++ xen/arch/arm/dm.c | 17 +++++++++++++++++ xen/arch/x86/hvm/dm.c | 18 ++++++++++++++++++ xen/include/public/hvm/dm_op.h | 18 ++++++++++++++++++ 6 files changed, 92 insertions(+) diff --git a/tools/include/xendevicemodel.h b/tools/include/xendevicemodel.h index 227e7fd810..d0847dfdc8 100644 --- a/tools/include/xendevicemodel.h +++ b/tools/include/xendevicemodel.h @@ -236,6 +236,20 @@ int xendevicemodel_inject_msi( xendevicemodel_handle *dmod, domid_t domid, uint64_t msi_addr, uint32_t msi_data); +/** + * This function injects an MSI into a guest. + * + * @parm dmod a handle to an open devicemodel interface. + * @parm domid the domain id to be serviced + * @parm msi_addr the MSI address + * @parm source_id the PCI SBDF of the source device + * @parm msi_data the MSI data + * @return 0 on success, -1 on failure. +*/ +int xendevicemodel_inject_msi2( + xendevicemodel_handle *dmod, domid_t domid, uint64_t addr, uint32_t source_id, + uint32_t data); + /** * This function enables tracking of changes in the VRAM area. * diff --git a/tools/libs/devicemodel/core.c b/tools/libs/devicemodel/core.c index 8e619eeb0a..92db92e89b 100644 --- a/tools/libs/devicemodel/core.c +++ b/tools/libs/devicemodel/core.c @@ -448,6 +448,26 @@ int xendevicemodel_set_irq_level( return xendevicemodel_op(dmod, domid, 1, &op, sizeof(op)); } +int xendevicemodel_inject_msi2( + xendevicemodel_handle *dmod, domid_t domid, uint64_t addr, uint32_t source_id, + uint32_t data) +{ + uint16_t segment = source_id >> 16; + uint16_t bdf = source_id & 0xffff; + struct xen_dm_op op = { + .op = XEN_DMOP_inject_msi2, + .u.inject_msi2 = { + .addr = addr, + .data = data, + .segment = segment, + .source_id = bdf, + .flags = XEN_DMOP_MSI_SOURCE_ID_VALID, + }, + }; + + return xendevicemodel_op(dmod, domid, 1, &op, sizeof(op)); +} + int xendevicemodel_set_pci_link_route( xendevicemodel_handle *dmod, domid_t domid, uint8_t link, uint8_t irq) { diff --git a/tools/libs/devicemodel/libxendevicemodel.map b/tools/libs/devicemodel/libxendevicemodel.map index f7f9e3d932..aa05768642 100644 --- a/tools/libs/devicemodel/libxendevicemodel.map +++ b/tools/libs/devicemodel/libxendevicemodel.map @@ -44,3 +44,8 @@ VERS_1.4 { xendevicemodel_set_irq_level; xendevicemodel_nr_vcpus; } VERS_1.3; + +VERS_1.5 { + global: + xendevicemodel_inject_msi2; +} VERS_1.4; diff --git a/xen/arch/arm/dm.c b/xen/arch/arm/dm.c index 773a0a2592..a1340b45a3 100644 --- a/xen/arch/arm/dm.c +++ b/xen/arch/arm/dm.c @@ -27,6 +27,7 @@ int dm_op(const struct dmop_args *op_args) [XEN_DMOP_set_ioreq_server_state] = sizeof(struct xen_dm_op_set_ioreq_server_state), [XEN_DMOP_destroy_ioreq_server] = sizeof(struct xen_dm_op_destroy_ioreq_server), [XEN_DMOP_set_irq_level] = sizeof(struct xen_dm_op_set_irq_level), + [XEN_DMOP_inject_msi2] = sizeof(struct xen_dm_op_inject_msi2), [XEN_DMOP_nr_vcpus] = sizeof(struct xen_dm_op_nr_vcpus), }; @@ -112,6 +113,22 @@ int dm_op(const struct dmop_args *op_args) break; } + case XEN_DMOP_inject_msi2: + { + const struct xen_dm_op_inject_msi2 *data = &op.u.inject_msi2; + uint32_t pci_sbdf = data->segment << 16 | data->source_id; + + if ( !(data->flags & XEN_DMOP_MSI_SOURCE_ID_VALID) || data->pad || + data->flags & ~XEN_DMOP_MSI_SOURCE_ID_VALID ) + { + rc = -EINVAL; + break; + } + + rc = vgic_its_trigger_msi(d, data->addr, pci_sbdf, data->data); + break; + + } case XEN_DMOP_nr_vcpus: { struct xen_dm_op_nr_vcpus *data = &op.u.nr_vcpus; diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c index 462691f91d..da0a00844b 100644 --- a/xen/arch/x86/hvm/dm.c +++ b/xen/arch/x86/hvm/dm.c @@ -344,6 +344,7 @@ int dm_op(const struct dmop_args *op_args) [XEN_DMOP_set_mem_type] = sizeof(struct xen_dm_op_set_mem_type), [XEN_DMOP_inject_event] = sizeof(struct xen_dm_op_inject_event), [XEN_DMOP_inject_msi] = sizeof(struct xen_dm_op_inject_msi), + [XEN_DMOP_inject_msi2] = sizeof(struct xen_dm_op_inject_msi2), [XEN_DMOP_map_mem_type_to_ioreq_server] = sizeof(struct xen_dm_op_map_mem_type_to_ioreq_server), [XEN_DMOP_remote_shutdown] = sizeof(struct xen_dm_op_remote_shutdown), [XEN_DMOP_relocate_memory] = sizeof(struct xen_dm_op_relocate_memory), @@ -539,6 +540,23 @@ int dm_op(const struct dmop_args *op_args) break; } + case XEN_DMOP_inject_msi2: + { + const struct xen_dm_op_inject_msi2 *data = &op.u.inject_msi2; + + if ( data->pad || data->flags & ~XEN_DMOP_MSI_SOURCE_ID_VALID ) + { + rc = -EINVAL; + break; + } + + if ( data->flags & XEN_DMOP_MSI_SOURCE_ID_VALID ) + gprintk(XENLOG_WARNING "XEN_DMOP_inject_msi2: source_id is ignored\n"); + + rc = hvm_inject_msi(d, data->addr, data->data); + break; + } + case XEN_DMOP_remote_shutdown: { const struct xen_dm_op_remote_shutdown *data = diff --git a/xen/include/public/hvm/dm_op.h b/xen/include/public/hvm/dm_op.h index 2bf0fdc1ae..4141af4300 100644 --- a/xen/include/public/hvm/dm_op.h +++ b/xen/include/public/hvm/dm_op.h @@ -444,6 +444,23 @@ struct xen_dm_op_nr_vcpus { }; typedef struct xen_dm_op_nr_vcpus xen_dm_op_nr_vcpus_t; +#define XEN_DMOP_inject_msi2 21 + +struct xen_dm_op_inject_msi2 { + /* IN - MSI data */ + uint32_t data; + /* IN - next two fields form an ID of the device triggering the MSI */ + uint16_t segment; /* The segment number */ + uint16_t source_id; /* The source ID that is local to segment (PCI BDF) */ + /* IN - types of source ID */ + uint32_t flags; +#define XEN_DMOP_MSI_SOURCE_ID_VALID (1u << 0) + uint32_t pad; + /* IN - MSI address */ + uint64_aligned_t addr; +}; +typedef struct xen_dm_op_inject_msi2 xen_dm_op_inject_msi2_t; + struct xen_dm_op { uint32_t op; uint32_t pad; @@ -463,6 +480,7 @@ struct xen_dm_op { xen_dm_op_set_mem_type_t set_mem_type; xen_dm_op_inject_event_t inject_event; xen_dm_op_inject_msi_t inject_msi; + xen_dm_op_inject_msi2_t inject_msi2; xen_dm_op_map_mem_type_to_ioreq_server_t map_mem_type_to_ioreq_server; xen_dm_op_remote_shutdown_t remote_shutdown; xen_dm_op_relocate_memory_t relocate_memory;