lkml.org 
[lkml]   [2019]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 04/16] x86/mm: Use helper fault_signal_pending()
    Date
    Let's move the fatal signal check even earlier so that we can directly
    use the new fault_signal_pending() in x86 mm code.

    Signed-off-by: Peter Xu <peterx@redhat.com>
    ---
    arch/x86/mm/fault.c | 28 +++++++++++++---------------
    1 file changed, 13 insertions(+), 15 deletions(-)

    diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
    index 9ceacd1156db..059331797827 100644
    --- a/arch/x86/mm/fault.c
    +++ b/arch/x86/mm/fault.c
    @@ -1441,27 +1441,25 @@ void do_user_addr_fault(struct pt_regs *regs,
    fault = handle_mm_fault(vma, address, flags);
    major |= fault & VM_FAULT_MAJOR;

    + /* Quick path to respond to signals */
    + if (fault_signal_pending(fault, regs)) {
    + if (!user_mode(regs))
    + no_context(regs, hw_error_code, address, SIGBUS,
    + BUS_ADRERR);
    + return;
    + }
    +
    /*
    * If we need to retry the mmap_sem has already been released,
    * and if there is a fatal signal pending there is no guarantee
    * that we made any progress. Handle this case first.
    */
    - if (unlikely(fault & VM_FAULT_RETRY)) {
    + if (unlikely((fault & VM_FAULT_RETRY) &&
    + (flags & FAULT_FLAG_ALLOW_RETRY))) {
    /* Retry at most once */
    - if (flags & FAULT_FLAG_ALLOW_RETRY) {
    - flags &= ~FAULT_FLAG_ALLOW_RETRY;
    - flags |= FAULT_FLAG_TRIED;
    - if (!fatal_signal_pending(tsk))
    - goto retry;
    - }
    -
    - /* User mode? Just return to handle the fatal exception */
    - if (flags & FAULT_FLAG_USER)
    - return;
    -
    - /* Not returning to user mode? Handle exceptions or die: */
    - no_context(regs, hw_error_code, address, SIGBUS, BUS_ADRERR);
    - return;
    + flags &= ~FAULT_FLAG_ALLOW_RETRY;
    + flags |= FAULT_FLAG_TRIED;
    + goto retry;
    }

    up_read(&mm->mmap_sem);
    --
    2.21.0
    \
     
     \ /
      Last update: 2019-09-26 11:40    [W:6.730 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site