diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index b8258a474edfcb3473f45b7afa5d9af835314392..7c8ca30be297ba1172df7905cde7b79ee93b8800 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -591,6 +591,12 @@ int iova_reserve_domain_addr(struct iommu_domain *domain, dma_addr_t start, dma_ unsigned long lo, hi; + if (!iovad->granule) { + unsigned long order = __ffs(domain->pgsize_bitmap); + + iovad->granule = 1UL << order; + } + lo = iova_pfn(iovad, start); hi = iova_pfn(iovad, end); diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index bb23fc0f483276a13a5020a0aa717c3ad84269cb..f6f23375206cfa5ca9da46c3b043ad609898d304 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -3652,6 +3652,10 @@ static inline int acpi_rmrr_andd_probe(struct device *dev) pr_err("cannot get acpi devie corresponding pci_device\n"); return -EINVAL; } + + if (!dev->iommu) + dev->iommu = (&pci_device->dev)->iommu; + ret = acpi_rmrr_device_create_direct_mappings(iommu_get_domain_for_dev(&pci_device->dev), dev);