mm/mips: Use general page fault accounting
Subsystems (2)
PATCH v4 11/26 mm/mips: 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 Thomas Bogendoerfer <[email protected]>
Signed-off-by Peter Xu <[email protected]>
--- arch/mips/mm/fault.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-)
arch/mips/mm/fault.c +3 -11
@@ -96,6 +96,8 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write,if (user_mode (regs)) flags |=FAULT_FLAG_USER ; + +perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS ,1 , regs, address); retry:mmap_read_lock (mm); vma =find_vma (mm, address);
@@ -152,12 +154,11 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write,* make sure we exit gracefully rather than endlessly redo * the fault. */ - fault =handle_mm_fault (vma, address, flags,NULL ); + fault =handle_mm_fault (vma, address, flags, regs);if (fault_signal_pending (fault, regs))return ; -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS ,1 , regs, address);if (unlikely (fault &VM_FAULT_ERROR )) {if (fault &VM_FAULT_OOM ) goto out_of_memory;
@@ -168,15 +169,6 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write,BUG (); }if (flags &FAULT_FLAG_ALLOW_RETRY ) { -if (fault &VM_FAULT_MAJOR ) { -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MAJ ,1 , - regs, address); - tsk->maj_flt++; - }else { -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MIN ,1 , - regs, address); - tsk->min_flt++; - }if (fault &VM_FAULT_RETRY ) { flags |=FAULT_FLAG_TRIED ;
Signature · 1 line
2.26.2