PTE_RDONLY
#define PAGE_NONE __pgprot(((_PAGE_DEFAULT) & ~PTE_VALID) | PTE_PRESENT_INVALID | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN)
#define _PAGE_KERNEL_RO ((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY | PTE_DIRTY)
#define _PAGE_KERNEL_ROX ((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY | PTE_DIRTY)
#define _PAGE_SHARED (_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
#define _PAGE_SHARED_EXEC (_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_WRITE)
#define _PAGE_READONLY (_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN)
#define _PAGE_READONLY_EXEC (_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN)
#define _PAGE_EXECONLY (_PAGE_DEFAULT | PTE_RDONLY | PTE_NG | PTE_PXN)
const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |
#define pte_rdonly(pte) (!!(pte_val(pte) & PTE_RDONLY))
pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY));
pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY));
pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
switch (FIELD_GET(PTE_USER | PTE_RDONLY, wr->desc)) {
if (!(wr->desc & PTE_RDONLY)) {
const pteval_t cmp_mask = PTE_RDONLY | PTE_AF | PTE_WRITE | PTE_DIRTY;
pte_val(entry) &= PTE_RDONLY | PTE_AF | PTE_WRITE | PTE_DIRTY;
pte_val(entry) ^= PTE_RDONLY;
pteval ^= PTE_RDONLY;
pteval ^= PTE_RDONLY;
pteval_t mask = PTE_PXN | PTE_RDONLY | PTE_WRITE | PTE_NG |
if (rodata_full && (pgprot_val(set_mask) == PTE_RDONLY ||
pgprot_val(clear_mask) == PTE_RDONLY)) {
__pgprot(PTE_RDONLY),
__pgprot(PTE_RDONLY));
pgprot_t clear_mask = __pgprot(PTE_PRESENT_INVALID | PTE_RDONLY);
if ((st->current_prot & PTE_RDONLY) == PTE_RDONLY)
.mask = PTE_RDONLY,
.val = PTE_RDONLY,