mm/xtensa: Use general page fault accounting
Subsystems (2)
PATCH v4 24/26 mm/xtensa: 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.
Remove the PERF_COUNT_SW_PAGE_FAULTS_[MAJ|MIN] perf events because it's now also done in handle_mm_fault().
Move the PERF_COUNT_SW_PAGE_FAULTS event higher before taking mmap_sem for the fault, then it'll match with the rest of the archs.
CC Chris Zankel <[email protected]>
CC Max Filippov <[email protected]>
Acked-by Max Filippov <[email protected]>
Signed-off-by Peter Xu <[email protected]>
--- arch/xtensa/mm/fault.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
arch/xtensa/mm/fault.c +4 -11
@@ -73,6 +73,9 @@ void do_page_fault(struct pt_regs *regs)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);
@@ -108,7 +111,7 @@ void do_page_fault(struct pt_regs *regs)* 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 ;
@@ -123,10 +126,6 @@ void do_page_fault(struct pt_regs *regs)BUG (); }if (flags &FAULT_FLAG_ALLOW_RETRY ) { -if (fault &VM_FAULT_MAJOR ) - current->maj_flt++; -else - current->min_flt++;if (fault &VM_FAULT_RETRY ) { flags |=FAULT_FLAG_TRIED ;
@@ -140,12 +139,6 @@ void do_page_fault(struct pt_regs *regs) }mmap_read_unlock (mm); -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS ,1 , regs, address); -if (flags &VM_FAULT_MAJOR ) -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MAJ ,1 , regs, address); -else -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MIN ,1 , regs, address); -return ;/* Something tried to access memory that isn't in our memory map..
Signature · 1 line
2.26.2