[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/2] xen/arm: smmuv3: fix xl pci-assignable-remove
When attempting to xl pci-assignable-remove a PCI device, we encounter: $ xl pci-assignable-remove 00:01.0 (XEN) SMMUv3: <no-node>: not attached to domain 32753 (XEN) d[IO]: deassign (0000:00:01.0) failed (-3) libxl: error: libxl_pci.c:910:libxl__device_pci_assignable_remove: failed to de-quarantine 0000:00:01.0 When a PCI device is being deassigned from domIO, arm_smmu_deassign_dev() should return before checking the smmu domain. Fixes: 63919fc4d1ca ("xen/arm: smmuv3: Add PCI devices support for SMMUv3") Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx> --- xen/drivers/passthrough/arm/smmu-v3.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xen/drivers/passthrough/arm/smmu-v3.c b/xen/drivers/passthrough/arm/smmu-v3.c index db08d3c04269..9312bb3c72d8 100644 --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -2747,11 +2747,6 @@ static int arm_smmu_deassign_dev(struct domain *d, uint8_t devfn, struct device struct arm_smmu_domain *smmu_domain = to_smmu_domain(io_domain); struct arm_smmu_master *master = dev_iommu_priv_get(dev); - if (!smmu_domain || smmu_domain->d != d) { - dev_err(dev, " not attached to domain %d\n", d->domain_id); - return -ESRCH; - } - #ifdef CONFIG_HAS_PCI if ( dev_is_pci(dev) ) { @@ -2767,6 +2762,11 @@ static int arm_smmu_deassign_dev(struct domain *d, uint8_t devfn, struct device } #endif + if (!smmu_domain || smmu_domain->d != d) { + dev_err(dev, " not attached to domain %d\n", d->domain_id); + return -ESRCH; + } + spin_lock(&xen_domain->lock); arm_smmu_detach_dev(master); -- 2.50.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |