Hi Dave, iommu->root_entry_old_virt is used to store the mapped old rta. iommu->root_entry_old_phys is used to store the physical address stored in registers. So we must not free/unmap iommu->root_entry_old_phys . Zhenhua On 05/13/2015 04:56 PM, Baoquan He wrote: >> + >> + iommu->root_entry_old_phys = q & VTD_PAGE_MASK; >> + if (!iommu->root_entry_old_phys) { >> + pr_err("Could not read old root entry address."); >> + return -1; >> + } >> + > > I didn't find where you call iounmap to free mapping of > iommu->root_entry_old_phys. Am I missing anything? > >> + iommu->root_entry_old_virt = ioremap_cache(iommu->root_entry_old_phys, >> + VTD_PAGE_SIZE); >> + if (!iommu->root_entry_old_virt) { >> + pr_err("Could not map the old root entry."); >> + return -ENOMEM; >> + }