|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 2/4] PCI: move pdev_list field to common structure
Its management shouldn't be arch-specific, and in particular there
should be no need for special precautions when creating the special
domains.
At this occasion
- correct parenthesization of for_each_pdev(),
- stop open-coding for_each_pdev() in vPCI code.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -496,7 +496,6 @@ int arch_domain_create(struct domain *d,
uint32_t emflags;
int rc;
- INIT_LIST_HEAD(&d->arch.pdev_list);
INIT_PAGE_LIST_HEAD(&d->arch.relmem_list);
spin_lock_init(&d->arch.e820_lock);
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -291,7 +291,6 @@ void __init arch_init_memory(void)
*/
dom_xen = domain_create(DOMID_XEN, NULL, false);
BUG_ON(IS_ERR(dom_xen));
- INIT_LIST_HEAD(&dom_xen->arch.pdev_list);
/*
* Initialise our DOMID_IO domain.
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -389,6 +389,10 @@ struct domain *domain_create(domid_t dom
rwlock_init(&d->vnuma_rwlock);
+#ifdef CONFIG_HAS_PCI
+ INIT_LIST_HEAD(&d->pdev_list);
+#endif
+
err = -ENOMEM;
if ( !zalloc_cpumask_var(&d->dirty_cpumask) )
goto fail;
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
@@ -315,7 +315,7 @@ static int reassign_device(struct domain
if ( devfn == pdev->devfn )
{
- list_move(&pdev->domain_list, &target->arch.pdev_list);
+ list_move(&pdev->domain_list, &target->pdev_list);
pdev->domain = target;
}
--- a/xen/drivers/passthrough/pci.c
+++ b/xen/drivers/passthrough/pci.c
@@ -467,7 +467,7 @@ static void _pci_hide_device(struct pci_
if ( pdev->domain )
return;
pdev->domain = dom_xen;
- list_add(&pdev->domain_list, &dom_xen->arch.pdev_list);
+ list_add(&pdev->domain_list, &dom_xen->pdev_list);
}
int __init pci_hide_device(unsigned int seg, unsigned int bus,
@@ -803,7 +803,7 @@ int pci_add_device(u16 seg, u8 bus, u8 d
goto out;
}
- list_add(&pdev->domain_list, &hardware_domain->arch.pdev_list);
+ list_add(&pdev->domain_list, &hardware_domain->pdev_list);
}
else
iommu_enable_device(pdev);
@@ -1153,7 +1153,7 @@ static int __hwdom_init _setup_hwdom_pci
if ( !pdev->domain )
{
pdev->domain = ctxt->d;
- list_add(&pdev->domain_list, &ctxt->d->arch.pdev_list);
+ list_add(&pdev->domain_list, &ctxt->d->pdev_list);
setup_one_hwdom_device(ctxt, pdev);
}
else if ( pdev->domain == dom_xen )
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -2453,7 +2453,7 @@ static int reassign_device_ownership(
if ( devfn == pdev->devfn )
{
- list_move(&pdev->domain_list, &target->arch.pdev_list);
+ list_move(&pdev->domain_list, &target->pdev_list);
pdev->domain = target;
}
--- a/xen/drivers/vpci/header.c
+++ b/xen/drivers/vpci/header.c
@@ -267,7 +267,7 @@ static int modify_bars(const struct pci_
* Check for overlaps with other BARs. Note that only BARs that are
* currently mapped (enabled) are checked for overlaps.
*/
- list_for_each_entry(tmp, &pdev->domain->arch.pdev_list, domain_list)
+ for_each_pdev ( pdev->domain, tmp )
{
if ( tmp == pdev )
{
--- a/xen/drivers/vpci/msi.c
+++ b/xen/drivers/vpci/msi.c
@@ -282,7 +282,7 @@ void vpci_dump_msi(void)
printk("vPCI MSI/MSI-X d%d\n", d->domain_id);
- list_for_each_entry ( pdev, &d->arch.pdev_list, domain_list )
+ for_each_pdev ( d, pdev )
{
const struct vpci_msi *msi;
const struct vpci_msix *msix;
--- a/xen/include/asm-x86/domain.h
+++ b/xen/include/asm-x86/domain.h
@@ -298,8 +298,6 @@ struct arch_domain
bool_t s3_integrity;
- struct list_head pdev_list;
-
union {
struct pv_domain pv;
struct hvm_domain hvm;
@@ -476,8 +474,6 @@ struct arch_domain
#define has_pirq(d) (!!((d)->arch.emulation_flags & X86_EMU_USE_PIRQ))
#define has_vpci(d) (!!((d)->arch.emulation_flags & X86_EMU_VPCI))
-#define has_arch_pdevs(d) (!list_empty(&(d)->arch.pdev_list))
-
#define gdt_ldt_pt_idx(v) \
((v)->vcpu_id >> (PAGETABLE_ORDER - GDT_LDT_VCPU_SHIFT))
#define pv_gdt_ptes(v) \
--- a/xen/include/xen/pci.h
+++ b/xen/include/xen/pci.h
@@ -121,7 +121,9 @@ struct pci_dev {
};
#define for_each_pdev(domain, pdev) \
- list_for_each_entry(pdev, &(domain->arch.pdev_list), domain_list)
+ list_for_each_entry(pdev, &(domain)->pdev_list, domain_list)
+
+#define has_arch_pdevs(d) (!list_empty(&(d)->pdev_list))
/*
* The pcidevs_lock protect alldevs_list, and the assignment for the
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -370,6 +370,10 @@ struct domain
int64_t time_offset_seconds;
+#ifdef CONFIG_HAS_PCI
+ struct list_head pdev_list;
+#endif
+
#ifdef CONFIG_HAS_PASSTHROUGH
struct domain_iommu iommu;
#endif
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |