[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 |