x86/dpci: move hvm_dpci_isairq_eoi() to generic HVM code

The function hvm_dpci_isairq_eoi() has no dependencies on VT-d driver code
and can be moved from xen/drivers/passthrough/vtd/x86/hvm.c to
xen/drivers/passthrough/x86/hvm.c, along with the corresponding copyrights.

Remove the now empty xen/drivers/passthrough/vtd/x86/hvm.c.

Since the function is used only in this file, declare it static.

No functional change intended.

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
This commit is contained in:
Xenia Ragiadakou authored and Jan Beulich committed 2023-02-13 16:29:20 +01:00
1 parent 0d57bba8ad
commit bb1057ed40
4 files changed
+45 -66

No files matched your search

-1
View File
@@ -1,3 +1,2 @@
obj-y += ats.o
obj-$(CONFIG_HVM) += hvm.o
obj-y += vtd.o
-64
View File
@@ -1,64 +0,0 @@
/*
* Copyright (c) 2008, Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope 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 <http://www.gnu.org/licenses/>.
*
* Copyright (C) Allen Kay <allen.m.kay@intel.com>
* Copyright (C) Weidong Han <weidong.han@intel.com>
*/
#include <xen/iommu.h>
#include <xen/irq.h>
#include <xen/sched.h>
static int cf_check _hvm_dpci_isairq_eoi(
struct domain *d, struct hvm_pirq_dpci *pirq_dpci, void *arg)
{
struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int isairq = (long)arg;
const struct dev_intx_gsi_link *digl;
list_for_each_entry ( digl, &pirq_dpci->digl_list, list )
{
unsigned int link = hvm_pci_intx_link(digl->device, digl->intx);
if ( hvm_irq->pci_link.route[link] == isairq )
{
hvm_pci_intx_deassert(d, digl->device, digl->intx);
if ( --pirq_dpci->pending == 0 )
pirq_guest_eoi(dpci_pirq(pirq_dpci));
}
}
return 0;
}
void hvm_dpci_isairq_eoi(struct domain *d, unsigned int isairq)
{
struct hvm_irq_dpci *dpci = NULL;
ASSERT(isairq < NR_ISAIRQS);
if ( !is_iommu_enabled(d) )
return;
write_lock(&d->event_lock);
dpci = domain_get_irq_dpci(d);
if ( dpci && test_bit(isairq, dpci->isairq_map) )
{
/* Multiple mirq may be mapped to one isa irq */
pt_pirq_iterate(d, _hvm_dpci_isairq_eoi, (void *)(long)isairq);
}
write_unlock(&d->event_lock);
}
+45
View File
@@ -14,6 +14,7 @@
* this program; If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (C) Allen Kay <allen.m.kay@intel.com>
* Copyright (C) Weidong Han <weidong.han@intel.com>
* Copyright (C) Xiaohui Xin <xiaohui.xin@intel.com>
*/
@@ -923,6 +924,50 @@ static void hvm_gsi_eoi(struct domain *d, unsigned int gsi)
hvm_pirq_eoi(pirq);
}
static int cf_check _hvm_dpci_isairq_eoi(
struct domain *d, struct hvm_pirq_dpci *pirq_dpci, void *arg)
{
const struct hvm_irq *hvm_irq = hvm_domain_irq(d);
unsigned int isairq = (long)arg;
const struct dev_intx_gsi_link *digl;
list_for_each_entry ( digl, &pirq_dpci->digl_list, list )
{
unsigned int link = hvm_pci_intx_link(digl->device, digl->intx);
if ( hvm_irq->pci_link.route[link] == isairq )
{
hvm_pci_intx_deassert(d, digl->device, digl->intx);
if ( --pirq_dpci->pending == 0 )
pirq_guest_eoi(dpci_pirq(pirq_dpci));
}
}
return 0;
}
static void hvm_dpci_isairq_eoi(struct domain *d, unsigned int isairq)
{
const struct hvm_irq_dpci *dpci = NULL;
ASSERT(isairq < NR_ISAIRQS);
if ( !is_iommu_enabled(d) )
return;
write_lock(&d->event_lock);
dpci = domain_get_irq_dpci(d);
if ( dpci && test_bit(isairq, dpci->isairq_map) )
{
/* Multiple mirq may be mapped to one isa irq */
pt_pirq_iterate(d, _hvm_dpci_isairq_eoi, (void *)(long)isairq);
}
write_unlock(&d->event_lock);
}
void hvm_dpci_eoi(struct domain *d, unsigned int guest_gsi)
{
const struct hvm_irq_dpci *hvm_irq_dpci;
-1
View File
@@ -201,7 +201,6 @@ int hvm_do_IRQ_dpci(struct domain *, struct pirq *);
int pt_irq_create_bind(struct domain *, const struct xen_domctl_bind_pt_irq *);
int pt_irq_destroy_bind(struct domain *, const struct xen_domctl_bind_pt_irq *);
void hvm_dpci_isairq_eoi(struct domain *d, unsigned int isairq);
struct hvm_irq_dpci *domain_get_irq_dpci(const struct domain *);
void free_hvm_irq_dpci(struct hvm_irq_dpci *dpci);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.