Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp6963535yba; Tue, 14 May 2019 17:31:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqxxJ34M6CCIQmPAVHSdPcGwsgF6LX7dIu3pBXefthdBGUMJrkcUEVhbwOpGREeSQiUENkXM X-Received: by 2002:a63:4710:: with SMTP id u16mr29743161pga.447.1557880308694; Tue, 14 May 2019 17:31:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557880308; cv=none; d=google.com; s=arc-20160816; b=Og0ypRZpM6vADliyS1fTGiaWkLVgb/bHKnpw7RcDXhwkORHDbuST86ed7QBTz1nqog 8fFe0UL0qAiS9s9NqqOzeUjdtQZzH2KEpdtkKL5Aw0pJgWr1EqZVX7nqBPg/WUTPN2t+ 4X8PWZPtnV+Tz2icuKn0skpH5ZlC15rXodVLs9e8B55swTTjZCKydCrSV4kwfkcLYn48 YLaDlxBffORc1lBRNPX+IALMa0w4XJ12NvAMm5F++cwmQ1FQkzAbyVGe9+iSbImNPB1j F3KSwQpwaqEhaJ2qkaZPooGT9NmQkjcgyyoNh9v4TUGJfnlGOTWMftS/43nBU4IFk8VN SykA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=KpX+cBCRl0Ecc+TegG2A9B0dI1qI/NWBHAW9DEZ2i0M=; b=Gg9fTDA5kexvuyQc0iwNjEIK7uhkCe1swsgnaK6x+kLciA8ql5GQwtJyxlwmc8zz9h +PNbpgq4CeuPW7yxb00/Gy8WiHn2y4dY9aSRO9J2+qSs4egFHotHP8MXE3UZUv6MI6nz ijWxJWdj89G8RL1asadEHx25OjbjNxSarb3Tjz2DXDUQMITya0m9SxPtbVsY0R5Ofp5M QI7arzoPahq5MzgooqrY2X3LBK8FqmkKXIBJHGiO1uKlK+i6qSABL+WgpESF2YJUD1BE 6fwVVXYjKVHEEqiCxz3Fk2CIPfQ0I2FBhZHzRIW8aH8KxtuNu45iPCBkUChjJw+2oe3a o6jg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=WKDI7fIf; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l36si302678plg.411.2019.05.14.17.31.34; Tue, 14 May 2019 17:31:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=WKDI7fIf; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726533AbfEOAaO (ORCPT + 99 others); Tue, 14 May 2019 20:30:14 -0400 Received: from smtprelay-out1.synopsys.com ([198.182.61.142]:38828 "EHLO smtprelay-out1.synopsys.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726449AbfEOAaM (ORCPT ); Tue, 14 May 2019 20:30:12 -0400 Received: from mailhost.synopsys.com (dc8-mailhost1.synopsys.com [10.13.135.209]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 4A762C0A63; Wed, 15 May 2019 00:30:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1557880202; bh=RoccKNAJvfR7aO06ihmHoprPEDJVe9pUK1rEpE7cTA4=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=WKDI7fIfSmaOO0nu5LtbmO7YIFy0DRhPpjNaYmstTeATTprbl/orhFgQZBf4l6gU8 3o0dJYDKaZhse+x7iumnQxyu08Dz4FTGc+fgax27Ea054X9lEtdUww/w1Kj9Ue4p1f jkRd30SP9qtFH+4LPcuPzlc0j1WT2Legu+9vZMkPkKU9jWIf4YFxDEG4HjpbXlLFHa HbzQx+4VL8efP/AEwqZEC3Z+KqEysDL0B+U7kbEXziA9JtVoIKPjh/cX9tmsTA4yzt 3UVFJDsaS9nhYHE5xHxjQWrYyTpvu2p4/7EOzjTwCEKNwgQrYQ0SkOozNpe1JHWEt7 zEqemSynABAeg== Received: from US01WEHTC2.internal.synopsys.com (us01wehtc2.internal.synopsys.com [10.12.239.237]) (using TLSv1.2 with cipher AES128-SHA256 (128/128 bits)) (No client certificate requested) by mailhost.synopsys.com (Postfix) with ESMTPS id B68F5A023C; Wed, 15 May 2019 00:30:11 +0000 (UTC) Received: from IN01WEHTCB.internal.synopsys.com (10.144.199.106) by US01WEHTC2.internal.synopsys.com (10.12.239.237) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 14 May 2019 17:30:10 -0700 Received: from IN01WEHTCA.internal.synopsys.com (10.144.199.103) by IN01WEHTCB.internal.synopsys.com (10.144.199.105) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 15 May 2019 06:00:08 +0530 Received: from vineetg-Latitude-E7450.internal.synopsys.com (10.13.182.230) by IN01WEHTCA.internal.synopsys.com (10.144.199.243) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 15 May 2019 06:00:19 +0530 From: Vineet Gupta To: CC: , , Vineet Gupta Subject: [PATCH 5/9] ARC: mm: do_page_fault refactor #4: consolidate retry related logic Date: Tue, 14 May 2019 17:29:32 -0700 Message-ID: <1557880176-24964-6-git-send-email-vgupta@synopsys.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1557880176-24964-1-git-send-email-vgupta@synopsys.com> References: <1557880176-24964-1-git-send-email-vgupta@synopsys.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.13.182.230] Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org stats update code can now elide "retry" check and additional level of indentation since all retry handling is done ahead of it already Signed-off-by: Vineet Gupta --- arch/arc/mm/fault.c | 60 +++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c index ae890a8d5ebf..7f211b493170 100644 --- a/arch/arc/mm/fault.c +++ b/arch/arc/mm/fault.c @@ -68,8 +68,8 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) struct mm_struct *mm = tsk->mm; int si_code = SEGV_MAPERR; unsigned int write = 0, exec = 0, mask; - vm_fault_t fault; - unsigned int flags; + vm_fault_t fault; /* handle_mm_fault() output */ + unsigned int flags; /* handle_mm_fault() input */ /* * NOTE! We MUST NOT take any locks for this case. We may @@ -128,49 +128,51 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) goto bad_area; } - /* - * If for any reason at all we couldn't handle the fault, - * make sure we exit gracefully rather than endlessly redo - * the fault. - */ fault = handle_mm_fault(vma, address, flags); - if (fatal_signal_pending(current)) { + /* + * Fault retry nuances + */ + if (unlikely(fault & VM_FAULT_RETRY)) { /* - * if fault retry, mmap_sem already relinquished by core mm - * so OK to return to user mode (with signal handled first) + * If fault needs to be retried, handle any pending signals + * first (by returning to user mode). + * mmap_sem already relinquished by core mm for RETRY case */ - if (fault & VM_FAULT_RETRY) { + if (fatal_signal_pending(current)) { if (!user_mode(regs)) goto no_context; return; } + /* + * retry state machine + */ + if (flags & FAULT_FLAG_ALLOW_RETRY) { + flags &= ~FAULT_FLAG_ALLOW_RETRY; + flags |= FAULT_FLAG_TRIED; + goto retry; + } } + /* + * Major/minor page fault accounting + * (in case of retry we only land here once) + */ perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); if (likely(!(fault & VM_FAULT_ERROR))) { - if (flags & FAULT_FLAG_ALLOW_RETRY) { - /* To avoid updating stats twice for retry case */ - if (fault & VM_FAULT_MAJOR) { - tsk->maj_flt++; - perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, - regs, address); - } else { - tsk->min_flt++; - perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, - regs, address); - } - - if (fault & VM_FAULT_RETRY) { - flags &= ~FAULT_FLAG_ALLOW_RETRY; - flags |= FAULT_FLAG_TRIED; - goto retry; - } + if (fault & VM_FAULT_MAJOR) { + tsk->maj_flt++; + perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, + regs, address); + } else { + tsk->min_flt++; + perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, + regs, address); } - /* Fault Handled Gracefully */ + /* Normal return path: fault Handled Gracefully */ up_read(&mm->mmap_sem); return; } -- 2.7.4