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.vnet.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 91c53a7d2575..fb9f840367f9 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -411,6 +411,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,
         * we can bug out early if this is from code which shouldn't.
@@ -460,6 +470,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.7.4

Reply via email to