On Sat, Jun 06, 2020 at 12:02:48PM +0800, Bibo Mao wrote: > @@ -158,23 +158,23 @@ void __update_cache(unsigned long address, pte_t pte) > static inline void setup_protection_map(void) > { > if (cpu_has_rixi) { > - protection_map[0] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); > - protection_map[1] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC); > - protection_map[2] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); > - protection_map[3] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC); > - protection_map[4] = __pgprot(_page_cachable_default | _PAGE_PRESENT); > - protection_map[5] = __pgprot(_page_cachable_default | _PAGE_PRESENT); > - protection_map[6] = __pgprot(_page_cachable_default | _PAGE_PRESENT); > - protection_map[7] = __pgprot(_page_cachable_default | _PAGE_PRESENT); > - > - protection_map[8] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_NO_READ); > - protection_map[9] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC); > - protection_map[10] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_WRITE | _PAGE_NO_READ); > - protection_map[11] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_NO_EXEC | _PAGE_WRITE); > - protection_map[12] = __pgprot(_page_cachable_default | _PAGE_PRESENT); > - protection_map[13] = __pgprot(_page_cachable_default | _PAGE_PRESENT); > - protection_map[14] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_WRITE); > - protection_map[15] = __pgprot(_page_cachable_default | _PAGE_PRESENT | _PAGE_WRITE); > + protection_map[0] = __pgprot(__PC | __PP | __NX | __NR); > + protection_map[1] = __pgprot(__PC | __PP | __NX | ___R); > + protection_map[2] = __pgprot(__PC | __PP | __NX | __NR); > + protection_map[3] = __pgprot(__PC | __PP | __NX | ___R); > + protection_map[4] = __pgprot(__PC | __PP | ___R); > + protection_map[5] = __pgprot(__PC | __PP | ___R); > + protection_map[6] = __pgprot(__PC | __PP | ___R); > + protection_map[7] = __pgprot(__PC | __PP | ___R); > + > + protection_map[8] = __pgprot(__PC | __PP | __NX | __NR); > + protection_map[9] = __pgprot(__PC | __PP | __NX | ___R); > + protection_map[10] = __pgprot(__PC | __PP | __NX | ___W | __NR); > + protection_map[11] = __pgprot(__PC | __PP | __NX | ___W | ___R); > + protection_map[12] = __pgprot(__PC | __PP | ___R); > + protection_map[13] = __pgprot(__PC | __PP | ___R); > + protection_map[14] = __pgprot(__PC | __PP | ___W | ___R); > + protection_map[15] = __pgprot(__PC | __PP | ___W | ___R); you are doing two steps in one go, so it's not obvious you are not only using some macros, but also changing semantics. And while there are already really long lines, please leave it that way and only do the access bit change. Thomas. -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ]