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

Attachment: 0004-iommu-coherency.patch
Description: 0004-iommu-coherency.patch

Reply via email to