Skip to content

Commit

Permalink
iommu: Move def_domain type check for untrusted device into core
Browse files Browse the repository at this point in the history
So that the vendor iommu drivers are no more required to provide the
def_domain_type callback to always isolate the untrusted devices.

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Cc: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
Link: https://lore.kernel.org/linux-iommu/243ce89c33fe4b9da4c56ba35acebf81@huawei.com/
Link: https://lore.kernel.org/r/20201124130604.2912899-2-baolu.lu@linux.intel.com
Signed-off-by: Will Deacon <will@kernel.org>
  • Loading branch information
Lu Baolu authored and Will Deacon committed Nov 25, 2020
1 parent f8394f2 commit 28b41e2
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 16 deletions.
7 changes: 0 additions & 7 deletions drivers/iommu/intel/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -2916,13 +2916,6 @@ static int device_def_domain_type(struct device *dev)
if (dev_is_pci(dev)) {
struct pci_dev *pdev = to_pci_dev(dev);

/*
* Prevent any device marked as untrusted from getting
* placed into the statically identity mapping domain.
*/
if (pdev->untrusted)
return IOMMU_DOMAIN_DMA;

if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
return IOMMU_DOMAIN_IDENTITY;

Expand Down
16 changes: 7 additions & 9 deletions drivers/iommu/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1460,12 +1460,14 @@ EXPORT_SYMBOL_GPL(fsl_mc_device_group);
static int iommu_get_def_domain_type(struct device *dev)
{
const struct iommu_ops *ops = dev->bus->iommu_ops;
unsigned int type = 0;

if (dev_is_pci(dev) && to_pci_dev(dev)->untrusted)
return IOMMU_DOMAIN_DMA;

if (ops->def_domain_type)
type = ops->def_domain_type(dev);
return ops->def_domain_type(dev);

return (type == 0) ? iommu_def_domain_type : type;
return 0;
}

static int iommu_group_alloc_default_domain(struct bus_type *bus,
Expand Down Expand Up @@ -1507,7 +1509,7 @@ static int iommu_alloc_default_domain(struct iommu_group *group,
if (group->default_domain)
return 0;

type = iommu_get_def_domain_type(dev);
type = iommu_get_def_domain_type(dev) ? : iommu_def_domain_type;

return iommu_group_alloc_default_domain(dev->bus, group, type);
}
Expand Down Expand Up @@ -1645,12 +1647,8 @@ struct __group_domain_type {

static int probe_get_default_domain_type(struct device *dev, void *data)
{
const struct iommu_ops *ops = dev->bus->iommu_ops;
struct __group_domain_type *gtype = data;
unsigned int type = 0;

if (ops->def_domain_type)
type = ops->def_domain_type(dev);
unsigned int type = iommu_get_def_domain_type(dev);

if (type) {
if (gtype->type && gtype->type != type) {
Expand Down

0 comments on commit 28b41e2

Please sign in to comment.