]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/dma: use iommu_put_pages_list() to releae freelist
authorPasha Tatashin <pasha.tatashin@soleen.com>
Sat, 13 Apr 2024 00:25:13 +0000 (00:25 +0000)
committerJoerg Roedel <jroedel@suse.de>
Mon, 15 Apr 2024 12:31:42 +0000 (14:31 +0200)
Free the IOMMU page tables via iommu_put_pages_list(). The page tables
were allocated via iommu_alloc_* functions in architecture specific
places, but are released in dma-iommu if the freelist is gathered during
map/unmap operations into iommu_iotlb_gather data structure.

Currently, only iommu/intel that does that.

Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Acked-by: David Rientjes <rientjes@google.com>
Link: https://lore.kernel.org/r/20240413002522.1101315-3-pasha.tatashin@soleen.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/dma-iommu.c

index e4cb26f6a9434e37b8a9e2da872bc80071229520..16a7c4a4f3dba75a09ac5fee6dbac8e1b5f819cc 100644 (file)
@@ -32,6 +32,7 @@
 #include <trace/events/swiotlb.h>
 
 #include "dma-iommu.h"
+#include "iommu-pages.h"
 
 struct iommu_dma_msi_page {
        struct list_head        list;
@@ -156,7 +157,7 @@ static void fq_ring_free_locked(struct iommu_dma_cookie *cookie, struct iova_fq
                if (fq->entries[idx].counter >= counter)
                        break;
 
-               put_pages_list(&fq->entries[idx].freelist);
+               iommu_put_pages_list(&fq->entries[idx].freelist);
                free_iova_fast(&cookie->iovad,
                               fq->entries[idx].iova_pfn,
                               fq->entries[idx].pages);
@@ -254,7 +255,7 @@ static void iommu_dma_free_fq_single(struct iova_fq *fq)
        int idx;
 
        fq_ring_for_each(idx, fq)
-               put_pages_list(&fq->entries[idx].freelist);
+               iommu_put_pages_list(&fq->entries[idx].freelist);
        vfree(fq);
 }
 
@@ -267,7 +268,7 @@ static void iommu_dma_free_fq_percpu(struct iova_fq __percpu *percpu_fq)
                struct iova_fq *fq = per_cpu_ptr(percpu_fq, cpu);
 
                fq_ring_for_each(idx, fq)
-                       put_pages_list(&fq->entries[idx].freelist);
+                       iommu_put_pages_list(&fq->entries[idx].freelist);
        }
 
        free_percpu(percpu_fq);