iommu/amd: Allow non-IOMMUv2 devices in IOMMUv2 domains
Since devices with IOMMUv2 functionality might be in the same group as devices without it, allow those devices in IOMMUv2 domains too. Otherwise attaching the group with the IOMMUv2 device to the domain will fail. Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
Родитель
1e6a7b04c0
Коммит
02ca20212f
|
@ -2164,15 +2164,17 @@ static int attach_device(struct device *dev,
|
|||
dev_data = get_dev_data(dev);
|
||||
|
||||
if (domain->flags & PD_IOMMUV2_MASK) {
|
||||
if (!dev_data->iommu_v2 || !dev_data->passthrough)
|
||||
if (!dev_data->passthrough)
|
||||
return -EINVAL;
|
||||
|
||||
if (pdev_iommuv2_enable(pdev) != 0)
|
||||
return -EINVAL;
|
||||
if (dev_data->iommu_v2) {
|
||||
if (pdev_iommuv2_enable(pdev) != 0)
|
||||
return -EINVAL;
|
||||
|
||||
dev_data->ats.enabled = true;
|
||||
dev_data->ats.qdep = pci_ats_queue_depth(pdev);
|
||||
dev_data->pri_tlp = pci_pri_tlp_required(pdev);
|
||||
dev_data->ats.enabled = true;
|
||||
dev_data->ats.qdep = pci_ats_queue_depth(pdev);
|
||||
dev_data->pri_tlp = pci_pri_tlp_required(pdev);
|
||||
}
|
||||
} else if (amd_iommu_iotlb_sup &&
|
||||
pci_enable_ats(pdev, PAGE_SHIFT) == 0) {
|
||||
dev_data->ats.enabled = true;
|
||||
|
@ -2237,7 +2239,7 @@ static void detach_device(struct device *dev)
|
|||
__detach_device(dev_data);
|
||||
write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
|
||||
|
||||
if (domain->flags & PD_IOMMUV2_MASK)
|
||||
if (domain->flags & PD_IOMMUV2_MASK && dev_data->iommu_v2)
|
||||
pdev_iommuv2_disable(to_pci_dev(dev));
|
||||
else if (dev_data->ats.enabled)
|
||||
pci_disable_ats(to_pci_dev(dev));
|
||||
|
|
Загрузка…
Ссылка в новой задаче