Skip to content

Commit dc8af3a

Browse files
Jon DerrickLorenzo Pieralisi
authored andcommitted
PCI: vmd: Detach resources after stopping root bus
The VMD removal path calls pci_stop_root_busi(), which tears down the pcie tree, including detaching all of the attached drivers. During driver detachment, devices may use pci_release_region() to release resources. This path relies on the resource being accessible in resource tree. By detaching the child domain from the parent resource domain prior to stopping the bus, we are preventing the list traversal from finding the resource to be freed. If we instead detach the resource after stopping the bus, we will have properly freed the resource and detaching is simply accounting at that point. Without this order, the resource is never freed and is orphaned on VMD removal, leading to a warning: [ 181.940162] Trying to free nonexistent resource <e5a10000-e5a13fff> Fixes: 2c2c5c5 ("x86/PCI: VMD: Attach VMD resources to parent domain's resource tree") Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> [lorenzo.pieralisi@arm.com: updated commit log] Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Keith Busch <keith.busch@intel.com>
1 parent 7876320 commit dc8af3a

File tree

1 file changed

+1
-1
lines changed
  • drivers/pci/controller

1 file changed

+1
-1
lines changed

drivers/pci/controller/vmd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -813,12 +813,12 @@ static void vmd_remove(struct pci_dev *dev)
813813
{
814814
struct vmd_dev *vmd = pci_get_drvdata(dev);
815815

816-
vmd_detach_resources(vmd);
817816
sysfs_remove_link(&vmd->dev->dev.kobj, "domain");
818817
pci_stop_root_bus(vmd->bus);
819818
pci_remove_root_bus(vmd->bus);
820819
vmd_cleanup_srcu(vmd);
821820
vmd_teardown_dma_ops(vmd);
821+
vmd_detach_resources(vmd);
822822
irq_domain_remove(vmd->irq_domain);
823823
}
824824

0 commit comments

Comments
 (0)