Hello to all,

here is my BUG-Fix tested against kernel 6.12.19 and 6.12.28.

Signed-off-by: Andreas greveandreas.gr...@a-greve.de

diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
index abcf3fa63a56..742e6cbbe852 100644
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -1654,7 +1654,16 @@ phys_addr_t default_swiotlb_base(void)
 phys_addr_t default_swiotlb_limit(void)
 {
 #ifdef CONFIG_SWIOTLB_DYNAMIC
-       return io_tlb_default_mem.phys_limit;
+       struct io_tlb_mem *mem = &io_tlb_default_mem;
+       phys_addr_t retval = mem->defpool.end;
+       struct io_tlb_pool *pool;
+       rcu_read_lock();
+       list_for_each_entry_rcu(pool, &mem->pools, node) {
+               if (pool->end > retval)
+                       retval = pool->end;
+       }
+       rcu_read_unlock();
+       return retval - 1;
 #else
        return io_tlb_default_mem.defpool.end - 1;
 #endif

Reply via email to