From nobody Mon Feb 9 04:22:33 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; 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; dmarc=fail(p=none dis=none) header.from=arm.com ARC-Seal: i=1; a=rsa-sha256; t=1606328232; cv=none; d=zohomail.com; s=zohoarc; b=axMWUAe+nrzysQe6FWZgPrCXhLrwPn9aAIM4tbv7BoSZ38ARkzKw2ZqJnv3b8lf0DEPSe1EyPZ/tNWnO/eOb7npBVoTG/a5rWLIZn2QOuc3/SfErV5RtFcwPFJWdMfbDPYqpv2BEi5uySN2PQG5RIOrg/iXIm2rRQzSEo2gBkjA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606328232; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=q4wfSazuqL1xQCGUo7lD1winh355HKXQxgsKT7ZWQSE=; b=Xtx17L5YVDY0P50AaRke/wQU8SL2KsEP7eW6KsYSTmApwn3+ZVYjT3JGU7nAsiXB8Qz0Rmi/t/HheWjfD4UExfvFn0wAe0rqzAqApRgpQYkqV7DOycdht5KwXe/EY8dlhdvg4ICxDOkW6bd4SlnCSKxO7P4As5DAnSHeRGuqUZo= ARC-Authentication-Results: i=1; mx.zohomail.com; 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; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1606328232782284.3806582326008; Wed, 25 Nov 2020 10:17:12 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.37951.70552 (Exim 4.92) (envelope-from ) id 1khzLV-0001R0-PY; Wed, 25 Nov 2020 18:16:49 +0000 Received: by outflank-mailman (output) from mailman id 37951.70552; Wed, 25 Nov 2020 18:16: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 1khzLV-0001Qt-Ma; Wed, 25 Nov 2020 18:16:49 +0000 Received: by outflank-mailman (input) for mailman id 37951; Wed, 25 Nov 2020 18:16:48 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1khzLU-0001Oz-9Q for xen-devel@lists.xenproject.org; Wed, 25 Nov 2020 18:16:48 +0000 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-rack-iad1.inumbo.com (Halon) with ESMTP id 28b115bf-7771-4d9e-820d-affdbf0e73bb; Wed, 25 Nov 2020 18:16:45 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 205EE11D4; Wed, 25 Nov 2020 10:16:45 -0800 (PST) Received: from scm-wfh-server-rahsin01.stack04.eu02.mi.arm.com (unknown [10.58.246.76]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AD29E3F23F; Wed, 25 Nov 2020 10:16:43 -0800 (PST) Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1khzLU-0001Oz-9Q for xen-devel@lists.xenproject.org; Wed, 25 Nov 2020 18:16:48 +0000 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-rack-iad1.inumbo.com (Halon) with ESMTP id 28b115bf-7771-4d9e-820d-affdbf0e73bb; Wed, 25 Nov 2020 18:16:45 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 205EE11D4; Wed, 25 Nov 2020 10:16:45 -0800 (PST) Received: from scm-wfh-server-rahsin01.stack04.eu02.mi.arm.com (unknown [10.58.246.76]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AD29E3F23F; Wed, 25 Nov 2020 10:16:43 -0800 (PST) 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: 28b115bf-7771-4d9e-820d-affdbf0e73bb From: Rahul Singh To: xen-devel@lists.xenproject.org Cc: bertrand.marquis@arm.com, rahul.singh@arm.com, Jan Beulich , Paul Durrant , Andrew Cooper , George Dunlap , Ian Jackson , Julien Grall , Stefano Stabellini , Wei Liu Subject: [PATCH v4 1/3] xen/pci: Move x86 specific code to x86 directory. Date: Wed, 25 Nov 2020 18:16:02 +0000 Message-Id: <3500f44e3b6f8f05f9d05fa170817d5bc6f39f22.1606326929.git.rahul.singh@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: In-Reply-To: References: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" passthrough/pci.c file is common for all architecture, but there is x86 specific code in this file. Move x86 specific code to the drivers/passthrough/io.c file to avoid compilation error for other architecture. As drivers/passthrough/io.c is compiled only for x86 move it to x86 directory and rename it to hvm.c. No functional change intended. Signed-off-by: Rahul Singh Acked-by: Jan Beulich Reviewed-by: Bertrand Marquis Reviewed-by: Stefano Stabellini --- Changes in v4: - fixed compilation error when CONFIG_HVM is disabled=20 - remove iommu_update_ire_from_msi from the patch will send another patch to fix. --- xen/drivers/passthrough/Makefile | 3 - xen/drivers/passthrough/pci.c | 71 +-------------------- xen/drivers/passthrough/x86/Makefile | 1 + xen/drivers/passthrough/{io.c =3D> x86/hvm.c} | 66 +++++++++++++++++++ xen/include/xen/pci.h | 9 +++ 5 files changed, 77 insertions(+), 73 deletions(-) rename xen/drivers/passthrough/{io.c =3D> x86/hvm.c} (95%) diff --git a/xen/drivers/passthrough/Makefile b/xen/drivers/passthrough/Mak= efile index e973e16c74..cc646612c7 100644 --- a/xen/drivers/passthrough/Makefile +++ b/xen/drivers/passthrough/Makefile @@ -6,6 +6,3 @@ obj-$(CONFIG_ARM) +=3D arm/ obj-y +=3D iommu.o obj-$(CONFIG_HAS_PCI) +=3D pci.o obj-$(CONFIG_HAS_DEVICE_TREE) +=3D device_tree.o - -x86-$(CONFIG_HVM) :=3D io.o -obj-$(CONFIG_X86) +=3D $(x86-y) diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c index 51e584127e..3c6ab1bcb6 100644 --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -14,9 +14,6 @@ * this program; If not, see . */ =20 -#include -#include -#include #include #include #include @@ -24,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -842,71 +838,6 @@ int pci_remove_device(u16 seg, u8 bus, u8 devfn) return ret; } =20 -static int pci_clean_dpci_irq(struct domain *d, - struct hvm_pirq_dpci *pirq_dpci, void *arg) -{ - struct dev_intx_gsi_link *digl, *tmp; - - pirq_guest_unbind(d, dpci_pirq(pirq_dpci)); - - if ( pt_irq_need_timer(pirq_dpci->flags) ) - kill_timer(&pirq_dpci->timer); - - list_for_each_entry_safe ( digl, tmp, &pirq_dpci->digl_list, list ) - { - list_del(&digl->list); - xfree(digl); - } - - radix_tree_delete(&d->pirq_tree, dpci_pirq(pirq_dpci)->pirq); - - if ( !pt_pirq_softirq_active(pirq_dpci) ) - return 0; - - domain_get_irq_dpci(d)->pending_pirq_dpci =3D pirq_dpci; - - return -ERESTART; -} - -static int pci_clean_dpci_irqs(struct domain *d) -{ - struct hvm_irq_dpci *hvm_irq_dpci =3D NULL; - - if ( !is_iommu_enabled(d) ) - return 0; - - if ( !is_hvm_domain(d) ) - return 0; - - spin_lock(&d->event_lock); - hvm_irq_dpci =3D domain_get_irq_dpci(d); - if ( hvm_irq_dpci !=3D NULL ) - { - int ret =3D 0; - - if ( hvm_irq_dpci->pending_pirq_dpci ) - { - if ( pt_pirq_softirq_active(hvm_irq_dpci->pending_pirq_dpci) ) - ret =3D -ERESTART; - else - hvm_irq_dpci->pending_pirq_dpci =3D NULL; - } - - if ( !ret ) - ret =3D pt_pirq_iterate(d, pci_clean_dpci_irq, NULL); - if ( ret ) - { - spin_unlock(&d->event_lock); - return ret; - } - - hvm_domain_irq(d)->dpci =3D NULL; - free_hvm_irq_dpci(hvm_irq_dpci); - } - spin_unlock(&d->event_lock); - return 0; -} - /* Caller should hold the pcidevs_lock */ static int deassign_device(struct domain *d, uint16_t seg, uint8_t bus, uint8_t devfn) @@ -966,7 +897,7 @@ int pci_release_devices(struct domain *d) int ret; =20 pcidevs_lock(); - ret =3D pci_clean_dpci_irqs(d); + ret =3D arch_pci_clean_pirqs(d); if ( ret ) { pcidevs_unlock(); diff --git a/xen/drivers/passthrough/x86/Makefile b/xen/drivers/passthrough= /x86/Makefile index a70cf9460d..69284a5d19 100644 --- a/xen/drivers/passthrough/x86/Makefile +++ b/xen/drivers/passthrough/x86/Makefile @@ -1,2 +1,3 @@ obj-y +=3D ats.o obj-y +=3D iommu.o +obj-$(CONFIG_HVM) +=3D hvm.o diff --git a/xen/drivers/passthrough/io.c b/xen/drivers/passthrough/x86/hvm= .c similarity index 95% rename from xen/drivers/passthrough/io.c rename to xen/drivers/passthrough/x86/hvm.c index 6b1305a3e5..41cfa2e200 100644 --- a/xen/drivers/passthrough/io.c +++ b/xen/drivers/passthrough/x86/hvm.c @@ -1036,6 +1036,72 @@ unlock: spin_unlock(&d->event_lock); } =20 +static int pci_clean_dpci_irq(struct domain *d, + struct hvm_pirq_dpci *pirq_dpci, void *arg) +{ + struct dev_intx_gsi_link *digl, *tmp; + + pirq_guest_unbind(d, dpci_pirq(pirq_dpci)); + + if ( pt_irq_need_timer(pirq_dpci->flags) ) + kill_timer(&pirq_dpci->timer); + + list_for_each_entry_safe ( digl, tmp, &pirq_dpci->digl_list, list ) + { + list_del(&digl->list); + xfree(digl); + } + + radix_tree_delete(&d->pirq_tree, dpci_pirq(pirq_dpci)->pirq); + + if ( !pt_pirq_softirq_active(pirq_dpci) ) + return 0; + + domain_get_irq_dpci(d)->pending_pirq_dpci =3D pirq_dpci; + + return -ERESTART; +} + +int arch_pci_clean_pirqs(struct domain *d) +{ + struct hvm_irq_dpci *hvm_irq_dpci =3D NULL; + + if ( !is_iommu_enabled(d) ) + return 0; + + if ( !is_hvm_domain(d) ) + return 0; + + spin_lock(&d->event_lock); + hvm_irq_dpci =3D domain_get_irq_dpci(d); + if ( hvm_irq_dpci !=3D NULL ) + { + int ret =3D 0; + + if ( hvm_irq_dpci->pending_pirq_dpci ) + { + if ( pt_pirq_softirq_active(hvm_irq_dpci->pending_pirq_dpci) ) + ret =3D -ERESTART; + else + hvm_irq_dpci->pending_pirq_dpci =3D NULL; + } + + if ( !ret ) + ret =3D pt_pirq_iterate(d, pci_clean_dpci_irq, NULL); + if ( ret ) + { + spin_unlock(&d->event_lock); + return ret; + } + + hvm_domain_irq(d)->dpci =3D NULL; + free_hvm_irq_dpci(hvm_irq_dpci); + } + spin_unlock(&d->event_lock); + + return 0; +} + /* * Note: 'pt_pirq_softirq_reset' can clear the STATE_SCHED before we get to * doing it. If that is the case we let 'pt_pirq_softirq_reset' do ref-cou= nting. diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h index 20a54a5bb4..8e3d4d9454 100644 --- a/xen/include/xen/pci.h +++ b/xen/include/xen/pci.h @@ -208,4 +208,13 @@ int msixtbl_pt_register(struct domain *, struct pirq *= , uint64_t gtable); void msixtbl_pt_unregister(struct domain *, struct pirq *); void msixtbl_pt_cleanup(struct domain *d); =20 +#ifdef CONFIG_HVM +int arch_pci_clean_pirqs(struct domain *d); +#else +static inline int arch_pci_clean_pirqs(struct domain *d) +{ + return 0; +} +#endif /* CONFIG_HVM */ + #endif /* __XEN_PCI_H__ */ --=20 2.17.1