Messages in this thread Patch in this message | | | From | Peter Xu <> | Subject | [PATCH 01/25] mm/um: Fix extra accounting for page fault retries | Date | Mon, 15 Jun 2020 18:15:43 -0400 |
| |
When page fault retried, we should only do the accounting once rather than once for each page fault retry.
CC: Jeff Dike <jdike@addtoit.com> CC: Richard Weinberger <richard@nod.at> CC: Anton Ivanov <anton.ivanov@cambridgegreys.com> CC: linux-um@lists.infradead.org Signed-off-by: Peter Xu <peterx@redhat.com> --- arch/um/kernel/trap.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index 8f18cf56b3dd..d162168490d1 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c @@ -34,6 +34,7 @@ int handle_page_fault(unsigned long address, unsigned long ip, pte_t *pte; int err = -EFAULT; unsigned int flags = FAULT_FLAG_DEFAULT; + vm_fault_t fault, major = 0; *code_out = SEGV_MAPERR; @@ -73,9 +74,8 @@ int handle_page_fault(unsigned long address, unsigned long ip, } do { - vm_fault_t fault; - fault = handle_mm_fault(vma, address, flags); + major |= fault & VM_FAULT_MAJOR; if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) goto out_nosemaphore; @@ -92,10 +92,6 @@ int handle_page_fault(unsigned long address, unsigned long ip, 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; @@ -103,6 +99,11 @@ int handle_page_fault(unsigned long address, unsigned long ip, } } + if (major) + current->maj_flt++; + else + current->min_flt++; + pgd = pgd_offset(mm, address); p4d = p4d_offset(pgd, address); pud = pud_offset(p4d, address); -- 2.26.2
| |