s390/mm: make pXd_deref() macros return a pointer
authorAlexander Gordeev <agordeev@linux.ibm.com>
Fri, 12 Feb 2021 06:43:16 +0000 (07:43 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 23 Feb 2021 23:31:22 +0000 (00:31 +0100)
This update fixes semantics of pXd_deref macros which
are expected to return a CPU-addressable pointer.

Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/pgtable.h

index 794746a..40abab9 100644 (file)
@@ -1219,8 +1219,8 @@ static inline pte_t mk_pte(struct page *page, pgprot_t pgprot)
 #define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1))
 #define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
 
-#define p4d_deref(pud) (p4d_val(pud) & _REGION_ENTRY_ORIGIN)
-#define pgd_deref(pgd) (pgd_val(pgd) & _REGION_ENTRY_ORIGIN)
+#define p4d_deref(pud) ((unsigned long)__va(p4d_val(pud) & _REGION_ENTRY_ORIGIN))
+#define pgd_deref(pgd) ((unsigned long)__va(pgd_val(pgd) & _REGION_ENTRY_ORIGIN))
 
 static inline unsigned long pmd_deref(pmd_t pmd)
 {
@@ -1229,12 +1229,12 @@ static inline unsigned long pmd_deref(pmd_t pmd)
        origin_mask = _SEGMENT_ENTRY_ORIGIN;
        if (pmd_large(pmd))
                origin_mask = _SEGMENT_ENTRY_ORIGIN_LARGE;
-       return pmd_val(pmd) & origin_mask;
+       return (unsigned long)__va(pmd_val(pmd) & origin_mask);
 }
 
 static inline unsigned long pmd_pfn(pmd_t pmd)
 {
-       return pmd_deref(pmd) >> PAGE_SHIFT;
+       return __pa(pmd_deref(pmd)) >> PAGE_SHIFT;
 }
 
 static inline unsigned long pud_deref(pud_t pud)
@@ -1244,12 +1244,12 @@ static inline unsigned long pud_deref(pud_t pud)
        origin_mask = _REGION_ENTRY_ORIGIN;
        if (pud_large(pud))
                origin_mask = _REGION3_ENTRY_ORIGIN_LARGE;
-       return pud_val(pud) & origin_mask;
+       return (unsigned long)__va(pud_val(pud) & origin_mask);
 }
 
 static inline unsigned long pud_pfn(pud_t pud)
 {
-       return pud_deref(pud) >> PAGE_SHIFT;
+       return __pa(pud_deref(pud)) >> PAGE_SHIFT;
 }
 
 /*