s390/mm: convert pte_val()/pXd_val() into functions

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>
This commit is contained in:
Heiko Carstens 2022-02-21 21:25:19 +01:00 committed by Vasily Gorbik
parent e1fc74ff23
commit 966ffbd861
1 changed files with 25 additions and 5 deletions

View File

@ -90,11 +90,31 @@ typedef pte_t *pgtable_t;
#define pgprot_val(x) ((x).pgprot) #define pgprot_val(x) ((x).pgprot)
#define pgste_val(x) ((x).pgste) #define pgste_val(x) ((x).pgste)
#define pte_val(x) ((x).pte)
#define pmd_val(x) ((x).pmd) static inline unsigned long pte_val(pte_t pte)
#define pud_val(x) ((x).pud) {
#define p4d_val(x) ((x).p4d) return pte.pte;
#define pgd_val(x) ((x).pgd) }
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 __pgste(x) ((pgste_t) { (x) } )
#define __pte(x) ((pte_t) { (x) } ) #define __pte(x) ((pte_t) { (x) } )