s390/mm: convert pte_val()/pXd_val() into functions
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 21 Feb 2022 20:25:19 +0000 (21:25 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 1 Mar 2022 20:05:10 +0000 (21:05 +0100)
Disallow constructs like this:

        pte_val(*pte) = __pa(addr) | prot;

which would directly write into a page table. Users are supposed to
use the set_pte()/set_pXd() primitives, which guarantee block
concurrent (aka atomic) writes.

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

index d98d17a..5a831a6 100644 (file)
@@ -90,11 +90,31 @@ typedef pte_t *pgtable_t;
 
 #define pgprot_val(x)  ((x).pgprot)
 #define pgste_val(x)   ((x).pgste)
-#define pte_val(x)     ((x).pte)
-#define pmd_val(x)     ((x).pmd)
-#define pud_val(x)     ((x).pud)
-#define p4d_val(x)     ((x).p4d)
-#define pgd_val(x)      ((x).pgd)
+
+static inline unsigned long pte_val(pte_t pte)
+{
+       return pte.pte;
+}
+
+static inline unsigned long pmd_val(pmd_t pmd)
+{
+       return pmd.pmd;
+}
+
+static inline unsigned long pud_val(pud_t pud)
+{
+       return pud.pud;
+}
+
+static inline unsigned long p4d_val(p4d_t p4d)
+{
+       return p4d.p4d;
+}
+
+static inline unsigned long pgd_val(pgd_t pgd)
+{
+       return pgd.pgd;
+}
 
 #define __pgste(x)     ((pgste_t) { (x) } )
 #define __pte(x)        ((pte_t) { (x) } )