iommu/vt-d: Make sure copied over IR entries are not reused
authorJoerg Roedel <jroedel@suse.de>
Fri, 12 Jun 2015 13:06:26 +0000 (15:06 +0200)
committerJoerg Roedel <jroedel@suse.de>
Tue, 16 Jun 2015 08:59:36 +0000 (10:59 +0200)
Walk over the copied entries and mark the present ones as
allocated.

Tested-by: ZhenHua Li <zhen-hual@hp.com>
Tested-by: Baoquan He <bhe@redhat.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel_irq_remapping.c

index 2a901219f953065746b92dab03abb1e5b56ed5e6..14e10de4a5481623ccb9e90a18699197c08b0bff 100644 (file)
@@ -451,6 +451,7 @@ static int iommu_load_old_irte(struct intel_iommu *iommu)
 {
        struct irte *old_ir_table;
        phys_addr_t irt_phys;
+       unsigned int i;
        size_t size;
        u64 irta;
 
@@ -481,6 +482,15 @@ static int iommu_load_old_irte(struct intel_iommu *iommu)
 
        __iommu_flush_cache(iommu, iommu->ir_table->base, size);
 
+       /*
+        * Now check the table for used entries and mark those as
+        * allocated in the bitmap
+        */
+       for (i = 0; i < INTR_REMAP_TABLE_ENTRIES; i++) {
+               if (iommu->ir_table->base[i].present)
+                       bitmap_set(iommu->ir_table->bitmap, i, 1);
+       }
+
        return 0;
 }