Re: [RFC 2/7] iommu/vt-d: Remove iova handling code from non-dma ops path

From: Lu Baolu
Date: Sat May 04 2019 - 21:29:49 EST


Hi,

On 5/5/19 9:19 AM, Lu Baolu wrote:
Hi,

On 5/4/19 9:23 PM, Tom Murphy via iommu wrote:
@@ -4181,58 +4168,37 @@ static int intel_iommu_memory_notifier(struct notifier_block *nb,
ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ unsigned long val, void *v)
 {
ÂÂÂÂÂ struct memory_notify *mhp = v;
-ÂÂÂ unsigned long long start, end;
-ÂÂÂ unsigned long start_vpfn, last_vpfn;
+ÂÂÂ unsigned long start_vpfn = mm_to_dma_pfn(mhp->start_pfn);
+ÂÂÂ unsigned long last_vpfn = mm_to_dma_pfn(mhp->start_pfn +
+ÂÂÂÂÂÂÂÂÂÂÂ mhp->nr_pages - 1);
ÂÂÂÂÂ switch (val) {
ÂÂÂÂÂ case MEM_GOING_ONLINE:
-ÂÂÂÂÂÂÂ start = mhp->start_pfn << PAGE_SHIFT;
-ÂÂÂÂÂÂÂ end = ((mhp->start_pfn + mhp->nr_pages) << PAGE_SHIFT) - 1;
-ÂÂÂÂÂÂÂ if (iommu_domain_identity_map(si_domain, start, end)) {
-ÂÂÂÂÂÂÂÂÂÂÂ pr_warn("Failed to build identity map for [%llx-%llx]\n",
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ start, end);
+ÂÂÂÂÂÂÂ if (iommu_domain_identity_map(si_domain, start_vpfn,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ last_vpfn)) {
+ÂÂÂÂÂÂÂÂÂÂÂ pr_warn("Failed to build identity map for [%lx-%lx]\n",
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ start_vpfn, last_vpfn);
ÂÂÂÂÂÂÂÂÂÂÂÂÂ return NOTIFY_BAD;
ÂÂÂÂÂÂÂÂÂ }
ÂÂÂÂÂÂÂÂÂ break;

Actually we don't need to update the si_domain if iommu hardware
supports pass-through mode. This should be made in a separated patch
anyway.

Oh! please ignore it.

This callback is only registered when hardware doesn't support pass
through mode.

if (si_domain && !hw_pass_through)
register_memory_notifier(&intel_iommu_memory_nb);

Best regards,
Lu Baolu