in dmar_domain, more than one iommus may be included in iommu_bmp. Due to "Coherency" capability may be different across iommus, set this variable to indicate iommu access is coherent or not. Only when all related iommus in a dmar_domain are all coherent, iommu access of this domain is coherent.
Signed-off-by: Weidong Han <[EMAIL PROTECTED]>
---
drivers/pci/intel-iommu.c | 6 ++++++
include/linux/dma_remapping.h | 2 ++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index a18e0b4..fa1507b 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -982,6 +982,12 @@ static struct dmar_domain * iommu_alloc_domain(struct
intel_iommu *iommu)
domain->id = num;
memset(&domain->iommu_bmp, 0, sizeof(unsigned long));
set_bit(iommu->seq_id, &domain->iommu_bmp);
+
+ if (ecap_coherent(iommu->ecap))
+ domain->iommu_coherency = 1;
+ else
+ domain->iommu_coherency = 0;
+
iommu->domains[num] = domain;
spin_unlock_irqrestore(&iommu->lock, flags);
diff --git a/include/linux/dma_remapping.h b/include/linux/dma_remapping.h
index c9d99c9..add2111 100644
--- a/include/linux/dma_remapping.h
+++ b/include/linux/dma_remapping.h
@@ -175,6 +175,8 @@ struct dmar_domain {
#define DOMAIN_FLAG_MULTIPLE_DEVICES 1
int flags;
+
+ int iommu_coherency;/* iommu access is coherent or not */
};
/* PCI domain-device relationship */
--
1.5.1
0004-iommu-coherency.patch
Description: 0004-iommu-coherency.patch
