On Fri, Oct 02, 2020 at 02:35:03PM +0200, Thomas Bogendoerfer wrote: Hi, > On Sat, Sep 19, 2020 at 03:47:31PM +0800, Huang Pei wrote: > > MIPS page fault path take 3 exceptions (1 TLB Miss + 2 TLB Invalid), but > > the second TLB Invalid exception is just triggered by __update_tlb from > > do_page_fault writing tlb without _PAGE_VALID set. With this patch, it > > only take 1 TLB Miss + 1 TLB Invalid exceptions > > > > This version removes pte_sw_mkyoung without polluting MM code and makes > > page fault delay of MIPS on par with other architecture and covers both > > no-RIXI and RIXI MIPS CPUS > > > > [1]: https://lkml.kernel.org/lkml/1591416169-26666-1-git-send-email > > -maobibo@xxxxxxxxxxx/ > > --- > > V3: > > - reformat with whitespace cleaned up following Thomas's advice > > V2: > > - remove unused asm-generic definition of pte_sw_mkyoung following Mao's > > advice > > --- > > Co-developed-by: Huang Pei <huangpei@xxxxxxxxxxx> > > Signed-off-by: Huang Pei <huangpei@xxxxxxxxxxx> > > Co-developed-by: Bibo Mao <maobibo@xxxxxxxxxx> > > --- > > arch/mips/include/asm/pgtable.h | 10 ++++------ > > arch/mips/mm/cache.c | 25 +++++++++++++------------ > > include/linux/pgtable.h | 8 -------- > > mm/memory.c | 3 --- > > 4 files changed, 17 insertions(+), 29 deletions(-) > > > > diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h > > index dd7a0f552cac..931fb35730f0 100644 > > --- a/arch/mips/include/asm/pgtable.h > > +++ b/arch/mips/include/asm/pgtable.h > > @@ -27,11 +27,11 @@ struct vm_area_struct; > > > > #define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_NO_READ | \ > > _page_cachable_default) > > -#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_WRITE | \ > > - _page_cachable_default) > > +#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_WRITE | \ > > + __READABLE | _page_cachable_default) > > you are still doing a white space changes here. > > > #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_NO_EXEC | \ > > - _page_cachable_default) > > -#define PAGE_READONLY __pgprot(_PAGE_PRESENT | \ > > + __READABLE | _page_cachable_default) > > +#define PAGE_READONLY __pgprot(_PAGE_PRESENT | __READABLE | \ > sorry, my bad > I've grepped for usage of PAGE_SHARED and PAGE_READONLY and found > arch/mips/kvm/mmu.c and arch/mips/kernel/vdso.c. I wonder > for arch/mips/kvm/mmu.c, the comment says: ... /* Also set valid and dirty, so refill handler doesn't have to */ *ptep = pte_mkyoung(pte_mkdirty(pfn_pte(pfn, PAGE_SHARED))); ... the net effect is the same, dirty and valid, so I think it is ok; for arch/mips/kernel/vdso.c, both mappings are kernel mapping, which means the physical memory(or io memory) is already allocated and will not be reclaimed by kernel. > 1. Is this usage correct or should we use protection_map[X] ? > 2. Are this still correct after the change in this patch ? > > Right now I'm in favour to fist clean up asm/pgtable.h to get rid > of all unneeded PAGE_XXX defines and make mm/cache.c rixi part > more readable before applying this patch. > I think we can clean up rixi part of mm/cache.c after this patch, or within V4; > Thomas. > > -- > Crap can work. Given enough thrust pigs will fly, but it's not necessarily a > good idea. [ RFC1925, 2.3 ]