iommu/amd: Implement apply_dm_region call-back

It is used to reserve the dm-regions in the iova-tree.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
Joerg Roedel 2016-07-05 13:32:20 +02:00
parent 81cd07b9c9
commit 8d54d6c8b8
1 changed files with 15 additions and 0 deletions

View File

@ -3385,6 +3385,20 @@ static void amd_iommu_put_dm_regions(struct device *dev,
kfree(entry);
}
static void amd_iommu_apply_dm_region(struct device *dev,
struct iommu_domain *domain,
struct iommu_dm_region *region)
{
struct protection_domain *pdomain = to_pdomain(domain);
struct dma_ops_domain *dma_dom = pdomain->priv;
unsigned long start, end;
start = IOVA_PFN(region->start);
end = IOVA_PFN(region->start + region->length);
WARN_ON_ONCE(reserve_iova(&dma_dom->iovad, start, end) == NULL);
}
static const struct iommu_ops amd_iommu_ops = {
.capable = amd_iommu_capable,
.domain_alloc = amd_iommu_domain_alloc,
@ -3400,6 +3414,7 @@ static const struct iommu_ops amd_iommu_ops = {
.device_group = amd_iommu_device_group,
.get_dm_regions = amd_iommu_get_dm_regions,
.put_dm_regions = amd_iommu_put_dm_regions,
.apply_dm_region = amd_iommu_apply_dm_region,
.pgsize_bitmap = AMD_IOMMU_PGSIZES,
};