mm/nds32: Use general page fault accounting
PATCH v4 12/26 mm/nds32: Use general page fault accounting
Use the general page fault accounting by passing regs into handle_mm_fault(). It naturally solve the issue of multiple page fault accounting when page fault retry happened.
Fix PERF_COUNT_SW_PAGE_FAULTS perf event manually for page fault retries, by moving it before taking mmap_sem.
CC Nick Hu <[email protected]>
CC Greentime Hu <[email protected]>
CC Vincent Chen <[email protected]>
Acked-by Greentime Hu <[email protected]>
Signed-off-by Peter Xu <[email protected]>
--- arch/nds32/mm/fault.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-)
arch/nds32/mm/fault.c +3 -16
@@ -121,6 +121,8 @@ void do_page_fault(unsigned long entry, unsigned long addr,if (unlikely (faulthandler_disabled () || !mm)) goto no_context; +perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS ,1 , regs, addr); +/* * As per x86, we may deadlock here. However, since the kernel only * validly references user space from well defined areas of the code,
@@ -206,7 +208,7 @@ void do_page_fault(unsigned long entry, unsigned long addr,* the fault. */ - fault =handle_mm_fault (vma, addr, flags,NULL ); + fault =handle_mm_fault (vma, addr, flags, regs);/* * If we need to retry but a fatal signal is pending, handle the
@@ -228,22 +230,7 @@ void do_page_fault(unsigned long entry, unsigned long addr, goto bad_area; } -/* -* Major/minor page fault accounting is only done on the initial -* attempt. If we go through a retry, it is extremely likely that the -* page will be found in page cache at that point. -*/ -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS ,1 , regs, addr);if (flags &FAULT_FLAG_ALLOW_RETRY ) { -if (fault &VM_FAULT_MAJOR ) { - tsk->maj_flt++; -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MAJ , -1 , regs, addr); - }else { - tsk->min_flt++; -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MIN , -1 , regs, addr); - }if (fault &VM_FAULT_RETRY ) { flags |=FAULT_FLAG_TRIED ;
Signature · 1 line
2.26.2