]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
powerpc/ps3: Fix map failure path in dma_ioc0_map_pages()
authorThorsten Blum <thorsten.blum@linux.dev>
Sat, 11 Jul 2026 13:09:32 +0000 (15:09 +0200)
committerMadhavan Srinivasan <maddy@linux.ibm.com>
Tue, 28 Jul 2026 04:53:31 +0000 (10:23 +0530)
If lv1_put_iopte() fails in dma_ioc0_map_pages(), the error path
decrements iopage but keeps using the failed mapping's offset. As a
result, it repeatedly tries to invalidate the failed IOPTE slot and
leaves the already installed IOPTEs valid.

Recompute offset and invalidate the installed IOPTEs instead.

Fixes: 6bb5cf102541 ("[POWERPC] PS3: System-bus rework")
Cc: stable@vger.kernel.org
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20260711130931.740719-3-thorsten.blum@linux.dev
arch/powerpc/platforms/ps3/mm.c

index 20fc5b68faee9734da414246d0ef1f29b896bd1a..315a32fd75b18a4740a380d1eecf545e1ffae8a0 100644 (file)
@@ -615,6 +615,7 @@ static int dma_ioc0_map_pages(struct ps3_dma_region *r, unsigned long phys_addr,
 
 fail_map:
        for (iopage--; 0 <= iopage; iopage--) {
+               offset = (1 << r->page_size) * iopage;
                lv1_put_iopte(0,
                              c->bus_addr + offset,
                              c->lpar_addr + offset,