On 05/28/2020 04:55 AM, Hugh Dickins wrote: > On Tue, 19 May 2020, maobibo wrote: >> On 05/19/2020 04:57 AM, Andrew Morton wrote: >>> On Mon, 18 May 2020 13:08:49 +0800 Bibo Mao <maobibo@xxxxxxxxxxx> wrote: >>> >>>> On mips platform, hw PTE entry valid bit is set in pte_mkyoung >>>> function, it is used to set physical page with readable privilege. >>> >>> pte_mkyoung() seems to be a strange place to set the pte's valid bit. >>> Why is it done there? Can it be done within mips's mk_pte()? >> On MIPS system hardware cannot set PAGE_ACCESS bit when accessing the page, >> software sets PAGE_ACCESS software bit and PAGE_VALID hw bit together during page >> fault stage. >> >> If mk_pte is called in page fault flow, it is ok to set both bits. If it is not >> called in page fault, PAGE_ACCESS is set however there is no actual memory accessing. > > Sorry for joining in so late, but would you please explain that some more: > preferably in the final commit message, if not here. > > I still don't understand why this is not done in the same way as on other > architectures - those that care (I just checked x86, powerpc, arm, arm64, > but not all of them) make sure that all the bits they want are there in > mm/mmap.c's protection_map[16], which then feeds into vma->vm_page_prot, > and so into mk_pte() as Andrew indicated. > > And I can see that arch/mips/mm/cache.c has a setup_protection_map() > to do that: why does it not set the additional bits that you want? > including the valid bit and the accessed (young) bit, as others do. > Are you saying that there are circumstances in which it is wrong > for mk_pte() to set the additional bits? MIPS is actually strange here, _PAGE_ACCESSED is not set in protection_map. I do not understand history of mips neither. On x86/aarch/powerpc system, _PAGE_ACCESSED bit is set in the beginning. How does software track memory page accessing frequency? Does software not care current status about _PAGE_ACCESSED bit, just calles madvise_cold to clear this bit, and then watches whether this bit is changed or not? regards bibo,mao > > I'm afraid that generic mm developers will have no clue as to whether > or not to add a pte_sw_mkyoung() after a mk_pte(); and generic source > will be the cleaner if it turns out not to be needed (but thank you > for making sure that it does nothing on the other architectures). > > Hugh >