kfree(dmar_domain);
 }
 
-static void nested_flush_dev_iotlb(struct dmar_domain *domain, u64 addr,
-                                  unsigned int mask)
-{
-       struct device_domain_info *info;
-       unsigned long flags;
-       u16 sid, qdep;
-
-       spin_lock_irqsave(&domain->lock, flags);
-       list_for_each_entry(info, &domain->devices, link) {
-               if (!info->ats_enabled)
-                       continue;
-               sid = info->bus << 8 | info->devfn;
-               qdep = info->ats_qdep;
-               qi_flush_dev_iotlb(info->iommu, sid, info->pfsid,
-                                  qdep, addr, mask);
-               quirk_extra_dev_tlb_flush(info, addr, mask,
-                                         IOMMU_NO_PASID, qdep);
-       }
-       spin_unlock_irqrestore(&domain->lock, flags);
-}
-
-static void intel_nested_flush_cache(struct dmar_domain *domain, u64 addr,
-                                    u64 npages, bool ih)
-{
-       struct iommu_domain_info *info;
-       unsigned int mask;
-       unsigned long i;
-
-       xa_for_each(&domain->iommu_array, i, info)
-               qi_flush_piotlb(info->iommu,
-                               domain_id_iommu(domain, info->iommu),
-                               IOMMU_NO_PASID, addr, npages, ih);
-
-       if (!domain->has_iotlb_device)
-               return;
-
-       if (npages == U64_MAX)
-               mask = 64 - VTD_PAGE_SHIFT;
-       else
-               mask = ilog2(__roundup_pow_of_two(npages));
-
-       nested_flush_dev_iotlb(domain, addr, mask);
-}
-
 static int intel_nested_cache_invalidate_user(struct iommu_domain *domain,
                                              struct iommu_user_data_array *array)
 {
                        break;
                }
 
-               intel_nested_flush_cache(dmar_domain, inv_entry.addr,
-                                        inv_entry.npages,
-                                        inv_entry.flags & IOMMU_VTD_INV_FLAGS_LEAF);
+               cache_tag_flush_range(dmar_domain, inv_entry.addr,
+                                     inv_entry.addr + nrpages_to_size(inv_entry.npages) - 1,
+                                     inv_entry.flags & IOMMU_VTD_INV_FLAGS_LEAF);
                processed++;
        }