Messages in this thread Patch in this message | | | From | Peter Xu <> | Subject | [PATCH 13/25] mm/nds32: Use mm_fault_accounting() | Date | Mon, 15 Jun 2020 18:15:55 -0400 |
| |
Use the new mm_fault_accounting() helper for page fault accounting.
Avoid doing page fault accounting multiple times if the page fault is retried. Since at it, move the accounting after releasing mmap_sem.
CC: Nick Hu <nickhu@andestech.com> CC: Greentime Hu <green.hu@gmail.com> CC: Vincent Chen <deanbo422@gmail.com> Signed-off-by: Peter Xu <peterx@redhat.com> --- arch/nds32/mm/fault.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-)
diff --git a/arch/nds32/mm/fault.c b/arch/nds32/mm/fault.c index f331e533edc2..11537c03ab1d 100644 --- a/arch/nds32/mm/fault.c +++ b/arch/nds32/mm/fault.c @@ -78,7 +78,7 @@ void do_page_fault(unsigned long entry, unsigned long addr, struct mm_struct *mm; struct vm_area_struct *vma; int si_code; - vm_fault_t fault; + vm_fault_t fault, major = 0; unsigned int mask = VM_ACCESS_FLAGS; unsigned int flags = FAULT_FLAG_DEFAULT; @@ -208,6 +208,7 @@ void do_page_fault(unsigned long entry, unsigned long addr, */ fault = handle_mm_fault(vma, addr, flags); + major |= fault & VM_FAULT_MAJOR; /* * If we need to retry but a fatal signal is pending, handle the @@ -229,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; @@ -257,6 +243,7 @@ void do_page_fault(unsigned long entry, unsigned long addr, } up_read(&mm->mmap_sem); + mm_fault_accounting(tsk, regs, addr, major); return; /* -- 2.26.2
| |