From: Mahendran Ganesh <opensource.gan...@gmail.com>

This patch enables the speculative page fault on the arm64
architecture.

I completed spf porting in 4.9. From the test result,
we can see app launching time improved by about 10% in average.
For the apps which have more than 50 threads, 15% or even more
improvement can be got.

Signed-off-by: Ganesh Mahendran <opensource.gan...@gmail.com>

[handle_speculative_fault() is no more returning the vma pointer]
Signed-off-by: Laurent Dufour <lduf...@linux.ibm.com>
---
 arch/arm64/mm/fault.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 4f343e603925..b5e2a93f9c21 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -485,6 +485,16 @@ static int __kprobes do_page_fault(unsigned long addr, 
unsigned int esr,
 
        perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
 
+       /*
+        * let's try a speculative page fault without grabbing the
+        * mmap_sem.
+        */
+       fault = handle_speculative_fault(mm, addr, mm_flags);
+       if (fault != VM_FAULT_RETRY) {
+               perf_sw_event(PERF_COUNT_SW_SPF, 1, regs, addr);
+               goto done;
+       }
+
        /*
         * As per x86, we may deadlock here. However, since the kernel only
         * validly references user space from well defined areas of the code,
@@ -535,6 +545,8 @@ static int __kprobes do_page_fault(unsigned long addr, 
unsigned int esr,
        }
        up_read(&mm->mmap_sem);
 
+done:
+
        /*
         * Handle the "normal" (no error) case first.
         */
-- 
2.21.0

Reply via email to