sparc/mm/fault_32.c: Port OOM changes to do_sparc_fault
PATCH v4 19/20 sparc/mm/fault_32.c: Port OOM changes to do_sparc_fault
Commit d065bd810b6deb67d4897a14bfe21f8eb526ba99 (mm: retry page fault when blocking on disk transfer) and commit 37b23e0525d393d48a7d59f870b3bc061a30ccdb (x86,mm: make pagefault killable)
The above commits introduced changes into the x86 pagefault handler for making the page fault handler retryable as well as killable.
These changes reduce the mmap_sem hold time, which is crucial during OOM killer invocation.
Port these changes to 32-bit sparc.
--- arch/sparc/mm/fault_32.c | 37 ++++++++++++++++++++++++++++++------- 1 files changed, 30 insertions(+), 7 deletions(-)
arch/sparc/mm/fault_32.c +30 -7
@@ -226,6 +226,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,unsigned long g2;int from_user = !(regs->psr &PSR_PS );int fault, code; +unsigned int flags = (FAULT_FLAG_ALLOW_RETRY |FAULT_FLAG_KILLABLE | + (write ?FAULT_FLAG_WRITE :0 ));if (text_fault) address = regs->pc;
@@ -252,6 +254,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS ,1 , regs, address); +retry:down_read (&mm->mmap_sem);/*
@@ -290,7 +293,11 @@ good_area:* make sure we exit gracefully rather than endlessly redo * the fault. */ - fault =handle_mm_fault (mm, vma, address, write ?FAULT_FLAG_WRITE :0 ); + fault =handle_mm_fault (mm, vma, address, flags); + +if ((fault &VM_FAULT_RETRY ) &&fatal_signal_pending (current)) +return ; +if (unlikely (fault &VM_FAULT_ERROR )) {if (fault &VM_FAULT_OOM ) goto out_of_memory;
@@ -298,13 +305,29 @@ good_area: goto do_sigbus;BUG (); } -if (fault &VM_FAULT_MAJOR ) { - current->maj_flt++; -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MAJ ,1 , regs, address); - }else { - current->min_flt++; -perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MIN ,1 , regs, address); + +if (flags &FAULT_FLAG_ALLOW_RETRY ) { +if (fault &VM_FAULT_MAJOR ) { + current->maj_flt++; +perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MAJ , +1 , regs, address); + }else { + current->min_flt++; +perf_sw_event (PERF_COUNT_SW_PAGE_FAULTS_MIN , +1 , regs, address); + } +if (fault &VM_FAULT_RETRY ) { + flags &= ~FAULT_FLAG_ALLOW_RETRY ; + +/* No need to up_read(&mm->mmap_sem) as we would +* have already released it in __lock_page_or_retry +* in mm/filemap.c. +*/ + + goto retry; + } } +up_read (&mm->mmap_sem);return ;
Signature · 1 line
1.7.5.4
From: Kautuk Consul <[email protected]>
Date: Mon, 26 Mar 2012 12:47:54 -0400
Quoted 8 lines
Commit
d065bd810b6deb67d4897a14bfe21f8eb526ba99(mm: retry page fault when blocking on disk transfer) and commit37b23e0525d393d48a7d59f870b3bc061a30ccdb(x86,mm: make pagefault killable)The above commits introduced changes into the x86 pagefault handler for making the page fault handler retryable as well as killable.
Quoted 6 lines
These changes reduce the
mmap_semhold time, which is crucial during OOM killer invocation.Port these changes to 32-bit sparc.
Signed-off-by Kautuk Consul <[email protected]>
Quoted 11 lines · David Miller
From: Kautuk Consul <[email protected]>
Date: Mon, 26 Mar 2012 12:47:54 -0400Quoted 8 lines
Commit
d065bd810b6deb67d4897a14bfe21f8eb526ba99(mm: retry page fault when blocking on disk transfer) and commit37b23e0525d393d48a7d59f870b3bc061a30ccdb(x86,mm: make pagefault killable)The above commits introduced changes into the x86 pagefault handler for making the page fault handler retryable as well as killable.
Quoted 8 lines
Quoted 6 lines
These changes reduce the
mmap_semhold time, which is crucial during OOM killer invocation.Port these changes to 32-bit sparc.
Signed-off-by Kautuk Consul <[email protected]>Acked-by David S. Miller <[email protected]>
Thanks David.
Since one or two of my other patches are being taken by the other arch owners in their branches,
can you take this patch and apply it to your branch also ?
Much obliged if you do !
David Miller
maintainerFrom: Kautuk Consul <[email protected]>
Date: Wed, 4 Apr 2012 20:00:01 +0530
Quoted 3 lines
Since one or two of my other patches are being taken by the other arch owners in their branches,
can you take this patch and apply it to your branch also ?
Both sparc patches applied, thanks.