s390/cmm: add missing virt_to_phys() conversion
authorHeiko Carstens <hca@linux.ibm.com>
Tue, 7 Dec 2021 18:24:00 +0000 (19:24 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Fri, 10 Dec 2021 15:14:25 +0000 (16:14 +0100)
diag10_range() expects a pfn, however the current cmm code is shifting
a virtual address, instead of a physical address by PAGE_SHIFT bits,
which would give a wrong result in case if V!=R.

Use virt_to_pfn() to fix this.

Note: this currently doesn't fix a real bug, since virtual addresses
are indentical to physical ones.

Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/mm/cmm.c

index 2203164..9141ed4 100644 (file)
@@ -90,7 +90,7 @@ static long cmm_alloc_pages(long nr, long *counter,
                        } else
                                free_page((unsigned long) npa);
                }
-               diag10_range(addr >> PAGE_SHIFT, 1);
+               diag10_range(virt_to_pfn(addr), 1);
                pa->pages[pa->index++] = addr;
                (*counter)++;
                spin_unlock(&cmm_lock);