From patchwork Tue Apr 20 14:07:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 12214409 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E512EC433ED for ; Tue, 20 Apr 2021 14:09:43 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 6A19F613B2 for ; Tue, 20 Apr 2021 14:09:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6A19F613B2 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from list by lists.xenproject.org with outflank-mailman.113757.216805 (Exim 4.92) (envelope-from ) id 1lYr4H-00014E-8d; Tue, 20 Apr 2021 14:09:33 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 113757.216805; Tue, 20 Apr 2021 14:09:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4H-000146-4d; Tue, 20 Apr 2021 14:09:33 +0000 Received: by outflank-mailman (input) for mailman id 113757; Tue, 20 Apr 2021 14:09:32 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4G-0000zG-2V for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:32 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id b40bcfae-143a-4654-8be5-2c212677886f; Tue, 20 Apr 2021 14:09:29 +0000 (UTC) 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: b40bcfae-143a-4654-8be5-2c212677886f DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927769; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=6L0j1iiPQW70GePi9+FEHwvdvq0ZaAVrpOxXuvH7hIQ=; b=byfWbq8+7g7HtmToX2U/qtSB3R7JWJlcji6Sa1xis5YRMY8d2hQTW9+9 IyF5xXek6ctTkqJ8JhJ5/M1mQL9eqWyy2AL5GvzVmLo4GLdkZxy/6sWCl zRDzev50k14YbG2+wXhzI80H/Q7/PVfsCZVTQ5/PcwazkNm+m3whINX46 4=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: zhkjseTqvvuYOwR7qST6apGvsxr6Xik8h2qGAqLUuc/iAtQJ3CsL2sFsACEtxUMm66VazzNgaf +/BoNIG2aZxbcwoEjF2sAEo2Y2834eR7/zE3DL7j9cK13rlC+0oHyWR2SdesZmlRdQ28zd65eO u2MxNxBI0Gc4QYoYRnJqSS2h6j/2EojTATrj9m1CKdnlWo9NWVwP9h/6ylVBAO4+Y/KQvbYPK2 KnfZ0PoDb+45F6YU32u7AxquHJvwpKNrdLjmIZx6VUXyJmUCjXJ7MpEKN3Sjq7hN+/OXl60G4U +eo= X-SBRS: 5.2 X-MesageID: 41988265 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:YqHlVaF4bRfW4RtzpLqFMpHXdLJzesId70hD6mlYVQFVfsuEl8 qngfQc0lvOhCwMXWw78OrsBICrR3TA+ZlppbQAJLvKZniChEKEDqFHqbHjzTrpBjHk+odmv5 tIXqBiBLTLYmRSot395GCDfeoI5Pmi3OSWifzFz3FrJDsaCZ1IywtiEA6UHglXaWB9ZaYRL5 aX6spZqzfIQx1+AviTPXUZQ/PF4+TCiZOOW3U7LiQ64wqDhy7A0s+YLzGk2H4lMg9n8PMZ3k Xu1yf44aiitP/T8G6n60bjq654tfGk5t9KBMmngtUYJDP2mm+TFflccozHhh8ZiqWC70srjc ntrn4bTrhOwkKURE6Zi1/M3BTtyzkn4XOK8y7mvVLT5fbXaRh/Lugpv/M8TjLpr3AOkfs57Y dwm0WejJZTBQOoplWE2/H4EytEu2DxnWAvioco/htieLpbUpB9h6oF8nhYFZ8RdRiKk7wPIa 1VAMbQ6O0+SyL9U1np+m1mwNmbVn8uBBuxQk8bpsyP0zRN9UoJtncl+A== X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41988265" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MqQtk0CwPztfWf60ynG8Os+hHZs3pZ62aG7RaxLK5Mmq3EYMWfJbO4+0tc1TLZfoQ2iu+SqYtO5SFjZNiJ+zl9G4mrw6SdMzibA4JOHjgYV211dfiP4Frl5tn6yU1a4jPIid4uIsbW0s3MUt/3ZopiPXz3QOx5iMdXkeOlbqhZCGHEhpF/qStGd6Ic1FlntcQGR35JftIEmpwBjvrfJVyCncn+wkbrRZ2KuBso5klj8PiB+uQ6OZlFvQNZ7p+kDe0JoBNFOopIa0lUAQqmmOsdXVrugZQTzUnQepuxcRRl0KgoPvHhaaWdv2eFwrKLJYBK0AjNdj5t0hsWbZ6e+ueA== 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-SenderADCheck; bh=jpUsr/JnxQIEWmJlrtvNxTXkMm0vHvWvojx4g2pQUcc=; b=MIYlEK2t3m7btstQBZDo03dUwFN6brqNUK1zyp/FlkhtJXyBbDwvKfP0OlD9w+SM2OPlCacyzcd5WbiBxGEVGQS3DswGT4ABWIviP7wszuTWLAm416lRZ6saI+/tjMdr5yeqMhf91iu9sYRYamJLKmOqE/0bnwuHaSRQNd/+sY1zQvO4KeUMfkAPdWbsN7LQWEj1aEvdguO/Yd0tp8yOEPzKrhEd/n/4PyKRi1pBkwKMyYzTmYUq1xkpxSDN4MY7rxD6pylDJHxhBvQJY/wYB4jx/XuEYbrx6O0EdY1ci3pvHbeu5yGgd3RsXwVL0E22cwJAashi3BP6GeOPt/SPog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jpUsr/JnxQIEWmJlrtvNxTXkMm0vHvWvojx4g2pQUcc=; b=LUceU/r6nVW8V3uurI3Cl57VJTvQaSvY6BRauUYHaaXP/8Pm3jqI0O5FJHvmY+DKS5hOoez7fnoE9RyHs8kHr9mG+NqTxabZbNkSKaaolBzg3EXy8zeyUT2LoYGXdU/Yd/n+PF37LVjOtIKVzZ4kGLMoMAZgAYvqljLUXSCr2GY= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Paul Durrant Subject: [PATCH v4 06/12] x86/dpci: move code Date: Tue, 20 Apr 2021 16:07:17 +0200 Message-ID: <20210420140723.65321-7-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> X-ClientProxiedBy: MR2P264CA0071.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:31::35) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cf3ad0de-373d-4716-2073-08d90405e7b8 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1tLRgrbaX5cc9IRLzM9BwJzsahNRZsJ93LOUczHqIDBGOJa+BvHfmC1+kzEU2McxOGFBGABV0Jj0wB+0cyLIyk/b56zVywMQSjNJqItUXqPiQzp+QinfLjB200E6Uq+bsXfODGVn9jIeDk4AFDJIQmuABW3iHEWUpai2qY5oDNs7U8yuIhbNHZ/lENosKAlbiQ0D+5RimtyPJiv+GQfWNEESuL/WrSGBeGAtkw2/CYfKdJSGVw309kQ4ib/22x6d1WfNiq1j/kvYRaZUyw8rPLmeBhBOdvQg70HkwmFFIROU5q3GsjVkYA7V8mIzWglbEfPA/imQnJU2ExxRtuMmGgVEdePzsHExEo6qkOc7BNzLQugyzpAWcBbJdJ3mIxDFE0PstLI+h6KEPbH+zxx1HA7FItT1SUIvZG+rSAga3co8KnXHvsxP94n7na10NAXmLVFwkhdP/9uvNdmsYOSo+SqVV4JrGTvuExnE5iFdw1RNUvaMz4qAGVjv2aXsubBVNn0yUTsWOb/xsAg61OIePa+P354eV74sr8PSoagcU07k5FLGvZDxmt7daJtrVRJuQX14DIWOx6mw248FNKU3RfJfmq5g5uS8VYL9mo+kXAg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?q?tncir335aauAQnVFtDTIwVpDYO0b2D?= =?utf-8?q?HoOAi9nOTpcYRM22p9z8+9RxVqaSWQs836ME3UtxiuWs+dpJ5XGdunnM9smZu7L99?= =?utf-8?q?LafaaSi8wl/85at3ciObPt4XZT/OOUvK23VSTIlomvzZ2JQQKNjBxw1NfXBZejjww?= =?utf-8?q?1elmdfyaJO6+sZUDdl4cnROBKYlLdK+7fi7axPlhZ8uQnLo+VKpr4F81FiNQi8H/7?= =?utf-8?q?B3BTXTTSe8l/A23JBe6NlFin5yql0ffLd53lxlH9xRg7JygjtdCYYbOo79zmJawrV?= =?utf-8?q?NN/PC1vjjtEYrz1UhcPiaEgKNAsG2m4GmIRpuQGJPGEzr22SrIkrYkoje7f6fausf?= =?utf-8?q?XpdOeAJUDTnxKK6gE8AO5ofs8mJBUbGejdmhfIjF1WGL6apUzySX4mCqWN/ZcP2QG?= =?utf-8?q?7iT5hIn1x26zaS/RTaMPdEkMMwQrukBB88UHdEZCSbdklt4C0CpRozEP0FySDhokr?= =?utf-8?q?dDxI3c5UCF3SM3K9uiNfM5VP5bgNK68gRnMat6syv+8YlzpPXDUrBBHKY1yE3cuhJ?= =?utf-8?q?19aTENAcAB4hn4FkUHUP1MS4GN8FpNf50OwgYwJEPtffI0Mp0h8qZ4dfOlEhF/+BF?= =?utf-8?q?y5t6gINcLyP5gXe4c0P60idT+ztgAfe3+9Dxk8O5ioSfNFKbuYeJzaVn7kxUYld7P?= =?utf-8?q?sccfWXMIpPVNSDBq1Yu4PgAuHNbX2EX+YFoPW4tarGNNOSFN1rFLjE5JQuUYcGx7B?= =?utf-8?q?rI5ymD6dol5Q+RHQewOGX5JfGz0cR5zUR1e5UDUnCjmL/PliGCWM7G19s5S0OTkjs?= =?utf-8?q?dUkFBY3Kb6ZGm+FuO40gyqxBVdJcXn1dCkk2lvLxxiUwdzgrUuLdId53GxIVujazV?= =?utf-8?q?jQDF+/vbtyddfJLB9XwsMO1VAF0KkxmSV7KsP3FoQErqvcKLanPove2dW98E66Os/?= =?utf-8?q?tRAMgG1lUfKmN6bRoeKQU5x4Ish6bE3DPnp8Lx5qMxs3v8SPO3b+QaxjUZTU2OFgi?= =?utf-8?q?cZW2QD2xSzB0/rcxZT4iS1rCLOv6Xb9cIc++VgyaxEaJvu00Ht+PgwMxOpxwQOJvJ?= =?utf-8?q?j4mpocRlfTtyvpoXxvGrfLwnd0wnRHLVAsWJKHnfdwWjJ1ZY8hskeJqw2v2UOURco?= =?utf-8?q?DUo8PjjW5gqy/btqzK4KqbuMgtc0fEbcNXruhV/JXTFK1rJTwseQTn8hWgIBuCDUh?= =?utf-8?q?92XuabJ/KRRGFRte+qjtg+r5xLjZQnlntx/rzF2qsPqQ6R7f21EQxJEgLCtceXXxj?= =?utf-8?q?OilHnK1rVwS/uYVmbBIIau08sOTKPxjj/reU5JYen8N7ctH4qhEPhkULMpaZUzPIP?= =?utf-8?q?y4d9H+T01Lr5lt?= X-MS-Exchange-CrossTenant-Network-Message-Id: cf3ad0de-373d-4716-2073-08d90405e7b8 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:25.9443 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 67TMlg6cG6+8pgAyISVinxZF4Pg8j8pCqtTngRllmZbVZSteeG3WnfHX+IvqMskAgIp4D8ywzBZ9clOALq6CXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com This is code movement in order to simply further changes. No functional change intended. Signed-off-by: Roger Pau Monné Acked-by: Jan Beulich --- Changes since v2: - Drop one of the leading underscores from __hvm_dpci_eoi. Changes since v1: - New in this version. --- xen/drivers/passthrough/x86/hvm.c | 162 +++++++++++++++--------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/xen/drivers/passthrough/x86/hvm.c b/xen/drivers/passthrough/x86/hvm.c index 8f78c0935b9..0db26e5dbb2 100644 --- a/xen/drivers/passthrough/x86/hvm.c +++ b/xen/drivers/passthrough/x86/hvm.c @@ -205,6 +205,87 @@ static struct vcpu *vector_hashing_dest(const struct domain *d, return dest; } +static void hvm_pirq_eoi(struct pirq *pirq) +{ + struct hvm_pirq_dpci *pirq_dpci; + + if ( !pirq ) + { + ASSERT_UNREACHABLE(); + return; + } + + pirq_dpci = pirq_dpci(pirq); + + /* + * No need to get vector lock for timer + * since interrupt is still not EOIed + */ + if ( --pirq_dpci->pending || + /* When the interrupt source is MSI no Ack should be performed. */ + (pirq_dpci->flags & HVM_IRQ_DPCI_TRANSLATE) ) + return; + + pirq_guest_eoi(pirq); +} + +static void __hvm_dpci_eoi(struct domain *d, + const struct hvm_girq_dpci_mapping *girq) +{ + struct pirq *pirq = pirq_info(d, girq->machine_gsi); + + if ( !hvm_domain_use_pirq(d, pirq) ) + hvm_pci_intx_deassert(d, girq->device, girq->intx); + + hvm_pirq_eoi(pirq); +} + +static void hvm_gsi_eoi(struct domain *d, unsigned int gsi) +{ + struct pirq *pirq = pirq_info(d, gsi); + + /* Check if GSI is actually mapped. */ + if ( !pirq_dpci(pirq) ) + return; + + hvm_gsi_deassert(d, gsi); + hvm_pirq_eoi(pirq); +} + +void hvm_dpci_eoi(struct domain *d, unsigned int guest_gsi) +{ + const struct hvm_irq_dpci *hvm_irq_dpci; + const struct hvm_girq_dpci_mapping *girq; + + if ( !is_iommu_enabled(d) ) + return; + + if ( is_hardware_domain(d) ) + { + spin_lock(&d->event_lock); + hvm_gsi_eoi(d, guest_gsi); + goto unlock; + } + + if ( guest_gsi < NR_ISAIRQS ) + { + hvm_dpci_isairq_eoi(d, guest_gsi); + return; + } + + spin_lock(&d->event_lock); + hvm_irq_dpci = domain_get_irq_dpci(d); + + if ( !hvm_irq_dpci ) + goto unlock; + + list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) + __hvm_dpci_eoi(d, girq); + +unlock: + spin_unlock(&d->event_lock); +} + int pt_irq_create_bind( struct domain *d, const struct xen_domctl_bind_pt_irq *pt_irq_bind) { @@ -860,87 +941,6 @@ static void hvm_dirq_assist(struct domain *d, struct hvm_pirq_dpci *pirq_dpci) spin_unlock(&d->event_lock); } -static void hvm_pirq_eoi(struct pirq *pirq) -{ - struct hvm_pirq_dpci *pirq_dpci; - - if ( !pirq ) - { - ASSERT_UNREACHABLE(); - return; - } - - pirq_dpci = pirq_dpci(pirq); - - /* - * No need to get vector lock for timer - * since interrupt is still not EOIed - */ - if ( --pirq_dpci->pending || - /* When the interrupt source is MSI no Ack should be performed. */ - (pirq_dpci->flags & HVM_IRQ_DPCI_TRANSLATE) ) - return; - - pirq_guest_eoi(pirq); -} - -static void __hvm_dpci_eoi(struct domain *d, - const struct hvm_girq_dpci_mapping *girq) -{ - struct pirq *pirq = pirq_info(d, girq->machine_gsi); - - if ( !hvm_domain_use_pirq(d, pirq) ) - hvm_pci_intx_deassert(d, girq->device, girq->intx); - - hvm_pirq_eoi(pirq); -} - -static void hvm_gsi_eoi(struct domain *d, unsigned int gsi) -{ - struct pirq *pirq = pirq_info(d, gsi); - - /* Check if GSI is actually mapped. */ - if ( !pirq_dpci(pirq) ) - return; - - hvm_gsi_deassert(d, gsi); - hvm_pirq_eoi(pirq); -} - -void hvm_dpci_eoi(struct domain *d, unsigned int guest_gsi) -{ - const struct hvm_irq_dpci *hvm_irq_dpci; - const struct hvm_girq_dpci_mapping *girq; - - if ( !is_iommu_enabled(d) ) - return; - - if ( is_hardware_domain(d) ) - { - spin_lock(&d->event_lock); - hvm_gsi_eoi(d, guest_gsi); - goto unlock; - } - - if ( guest_gsi < NR_ISAIRQS ) - { - hvm_dpci_isairq_eoi(d, guest_gsi); - return; - } - - spin_lock(&d->event_lock); - hvm_irq_dpci = domain_get_irq_dpci(d); - - if ( !hvm_irq_dpci ) - goto unlock; - - list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) - __hvm_dpci_eoi(d, girq); - -unlock: - spin_unlock(&d->event_lock); -} - static int pci_clean_dpci_irq(struct domain *d, struct hvm_pirq_dpci *pirq_dpci, void *arg) {