From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B58DC27C40 for ; Thu, 24 Aug 2023 08:17:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E15F2800A0; Thu, 24 Aug 2023 04:17:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 891C8280073; Thu, 24 Aug 2023 04:17:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7324F2800A0; Thu, 24 Aug 2023 04:17:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 63256280073 for ; Thu, 24 Aug 2023 04:17:29 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3668A120214 for ; Thu, 24 Aug 2023 08:17:29 +0000 (UTC) X-FDA: 81158293818.17.ECB89DD Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf02.hostedemail.com (Postfix) with ESMTP id C7B5E80026 for ; Thu, 24 Aug 2023 08:17:26 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=TN7oM66x; spf=pass (imf02.hostedemail.com: domain of agordeev@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=agordeev@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692865047; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=KEWHsQIN0ibIJmqlOe+5geBhFJYS7lkWUXsTA+1dW1s=; b=k+0wcYD5/HixBQ8SAX0gHD/R0zEBsrkVhy04AFRKoFUUNU1MPcMlL405rmjuqhXBRsOpRZ /sVj+UG/i3u+tPIoZjQYKW7Qu3b8agTCXbM/76vkVkCg/QViRryEoD2Sw4zTp+1GtGyY2r 5JHWwzCiB3cAdZ98n1PuYwu5OgYDVgg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692865047; a=rsa-sha256; cv=none; b=wAXaHb25JECFkmbj1C6wySersvudlKn/nefTXhSRcwK3A/BRg+fZW0ye3X5ubCw+Gt7o8T MtA1F/Yaao+rWNVD7y8snjkro2OlTaqN+8DnDMkJJpAXFRU8oREKdrUKldH2cAoM2ltEvt A8FKnl/9s/GiQsE1yPvFJbhp/xDVuYk= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=TN7oM66x; spf=pass (imf02.hostedemail.com: domain of agordeev@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=agordeev@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 37O8CUu1006690; Thu, 24 Aug 2023 08:16:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=date : from : to : cc : subject : message-id : references : mime-version : content-type : in-reply-to; s=pp1; bh=KEWHsQIN0ibIJmqlOe+5geBhFJYS7lkWUXsTA+1dW1s=; b=TN7oM66xZFKd9trAoNj/to+wrKk83acTpd3VRV5F9dH+fZ5Z8sBbl2AbNEsG9u4BT/rp hNvSoyMhKrFT5qqUPfCRnAkhAJ301+5YIHUV0Rg6lQKi4uSkTLe0mgBTcgmRidluxFBW O8kB7k0OE2SGBmAXrK2d8yL2biJwNwvIaOEBHrI2guhj4rH8g/rkXHq5HvHg1mT2IGy/ eRqnGhLXCq5hKQ4Av/Le3UlaaPX5igLCT04KlszV1NRB6L58s/vOfo9nzDNSbi9O+55t ixanQzhrIZHC+lvbSJ4zTxl/+3WI32IQUVt8Ub1hE7MGlx5pkVibwEct+hn4ag0wCheH AA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3sp3g705gu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Aug 2023 08:16:44 +0000 Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 37O8CiYj008191; Thu, 24 Aug 2023 08:16:43 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3sp3g705ev-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Aug 2023 08:16:43 +0000 Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 37O7E8Q7004093; Thu, 24 Aug 2023 08:16:40 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 3sn21rneej-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Aug 2023 08:16:40 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 37O8GalW33030748 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Aug 2023 08:16:37 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CB4E320040; Thu, 24 Aug 2023 08:16:36 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B6B5020043; Thu, 24 Aug 2023 08:16:34 +0000 (GMT) Received: from li-008a6a4c-3549-11b2-a85c-c5cc2836eea2.ibm.com (unknown [9.171.83.96]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTPS; Thu, 24 Aug 2023 08:16:34 +0000 (GMT) Date: Thu, 24 Aug 2023 10:16:33 +0200 From: Alexander Gordeev To: Kefeng Wang Cc: Andrew Morton , linux-mm@kvack.org, surenb@google.com, willy@infradead.org, Russell King , Catalin Marinas , Will Deacon , Huacai Chen , WANG Xuerui , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Paul Walmsley , Palmer Dabbelt , Albert Ou , Gerald Schaefer , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Sven Schnelle , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H . Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org Subject: Re: [PATCH rfc v2 04/10] s390: mm: use try_vma_locked_page_fault() Message-ID: References: <20230821123056.2109942-1-wangkefeng.wang@huawei.com> <20230821123056.2109942-5-wangkefeng.wang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230821123056.2109942-5-wangkefeng.wang@huawei.com> X-TM-AS-GCONF: 00 X-Proofpoint-GUID: Xe2qvpopgdAywnsIWTGsa_U7sum5c185 X-Proofpoint-ORIG-GUID: lweXzh7T5jsy5Cw_7-G4eq5m-9pnOzRv X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.957,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-08-24_05,2023-08-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 mlxlogscore=549 clxscore=1015 lowpriorityscore=0 phishscore=0 malwarescore=0 adultscore=0 priorityscore=1501 spamscore=0 suspectscore=0 impostorscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2308100000 definitions=main-2308240065 X-Rspamd-Queue-Id: C7B5E80026 X-Rspam-User: X-Stat-Signature: tr6ysodxwkry9h6r5nsj1eyhfs6wc4w1 X-Rspamd-Server: rspam03 X-HE-Tag: 1692865046-204810 X-HE-Meta: U2FsdGVkX1/MaktkFGYun2pxGNXmGnoWV+dfB7XP+41EJmuniRAp3yrT0EQIGBK0FNrU3qlMBfNDfoA05VCJta38du+6wDvh6/U4TO5NPYeZ4BsQVrlAkR4RICLCGoqOvfKSE8GtedMEmei5mfjvXvvtLpgUabRI+nQchYJdArR+R6uyZUFAy9ujXYSCRQM0py8ny3e+4UuZSeTgSOtjncb6eqT9JLHam7HDbA3I0T+NafdQJLgbnZXfDx0dfu5osGW9ZdLI8rKgW8GTofsS2ygkvwTvKAedZHAGShJgZWzlSAs1YKQ1/NRxwtpzX79LSla0Fo4IUsuasoE4rWO3TBHwcXxoBv37GGbf181Ox1n2jc7WF/mgZ/LN3/QnC7jfPJeCf5W6NSvs03Nugfm/+hAl9thblfEn9/b1Jmid2jsr7Lgxj1pYKwYcWrvFiRiubfFs0Wwma8i5JNybm2WIG4Gh28Fbddz5f9DNaijZqeR8sLK7pu6h0qigdtrIJPc8EloXDeLvw9jz/yBgvWn80WI65IQqV7X/fcO5SV//n3Z6DMotiPTtt0gkVx4iLgq1YmQZ+QlLMGXMU2NZl/Jbwvmh3EgGEwy6uXaai59IFqXQb73uf83hEPbugMF1t5AXaX+rguswnEEQIKcwOqJEpT0REAxFRw4pyq7OEQnb3FqRCx5Jn2Z1jzHoTLtFaHzznMeyJyWlfGqS+FcVn8GuPG11YGgEiCqSv0/oeGiRpU9G7b/4W6oUl5Xo6UA8yeJIbxIb5OW3p7Ur2Iin8cYBA/TmIFXJgBwqgfqJCriVbuN/coXphGcxkBR9kGlKfJR7fcaym7k+V16W74X+CmIUQ++0SghAomGfdtlN/7E/qkmGaFzc6M58Bb7Z7YNi8S/CAFqovIv8pz1xaGUj4QvRQ8tEq5ncziGMUpQnEXQaScrMeREshGkf8A3e4Ds8YnRrkd7vF8X00f4kNHqC4Hn MTi1iyp1 FNmwFLwtVodSdkX8PtNpWf0I0L1ldmDLh8a87q9ZJwZBSALNu0TlHdFDr8VPJ5K/3la/4FjJ716xb4NQ+dnqlV5K7m3zbopujMXHy/Sz/OpBjtDW43Q1dglOmpH0YqYltyksstT0qW2rkbZKxt+uxXYpJgzRvRKdChOpTrdNyPx0KIFrQWKTUKSzqbzeYWXN+WArziriIo9NCTng= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Mon, Aug 21, 2023 at 08:30:50PM +0800, Kefeng Wang wrote: > Use new try_vma_locked_page_fault() helper to simplify code. > No functional change intended. > > Signed-off-by: Kefeng Wang > --- > arch/s390/mm/fault.c | 66 ++++++++++++++++++-------------------------- > 1 file changed, 27 insertions(+), 39 deletions(-) > > diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c > index 099c4824dd8a..fbbdebde6ea7 100644 > --- a/arch/s390/mm/fault.c > +++ b/arch/s390/mm/fault.c > @@ -357,16 +357,18 @@ static noinline void do_fault_error(struct pt_regs *regs, vm_fault_t fault) > static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > { > struct gmap *gmap; > - struct task_struct *tsk; > - struct mm_struct *mm; > struct vm_area_struct *vma; > enum fault_type type; > - unsigned long address; > - unsigned int flags; > + struct mm_struct *mm = current->mm; > + unsigned long address = get_fault_address(regs); > vm_fault_t fault; > bool is_write; > + struct vm_fault vmf = { > + .real_address = address, > + .flags = FAULT_FLAG_DEFAULT, > + .vm_flags = access, > + }; > > - tsk = current; > /* > * The instruction that caused the program check has > * been nullified. Don't signal single step via SIGTRAP. > @@ -376,8 +378,6 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > if (kprobe_page_fault(regs, 14)) > return 0; > > - mm = tsk->mm; > - address = get_fault_address(regs); > is_write = fault_is_write(regs); > > /* > @@ -398,45 +398,33 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > } > > perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); > - flags = FAULT_FLAG_DEFAULT; > if (user_mode(regs)) > - flags |= FAULT_FLAG_USER; > + vmf.flags |= FAULT_FLAG_USER; > if (is_write) > - access = VM_WRITE; > - if (access == VM_WRITE) > - flags |= FAULT_FLAG_WRITE; > - if (!(flags & FAULT_FLAG_USER)) > - goto lock_mmap; > - vma = lock_vma_under_rcu(mm, address); > - if (!vma) > - goto lock_mmap; > - if (!(vma->vm_flags & access)) { > - vma_end_read(vma); > - goto lock_mmap; > - } > - fault = handle_mm_fault(vma, address, flags | FAULT_FLAG_VMA_LOCK, regs); > - if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) > - vma_end_read(vma); > - if (!(fault & VM_FAULT_RETRY)) { > - count_vm_vma_lock_event(VMA_LOCK_SUCCESS); > - if (likely(!(fault & VM_FAULT_ERROR))) > - fault = 0; This fault fixup is removed in the new version. > + vmf.vm_flags = VM_WRITE; > + if (vmf.vm_flags == VM_WRITE) > + vmf.flags |= FAULT_FLAG_WRITE; > + > + fault = try_vma_locked_page_fault(&vmf); > + if (fault == VM_FAULT_NONE) > + goto lock_mm; Because VM_FAULT_NONE is set to 0 it gets confused with the success code of 0 returned by a fault handler. In the former case we want to continue, while in the latter - successfully return. I think it applies to all archs. > + if (!(fault & VM_FAULT_RETRY)) > goto out; > - } > - count_vm_vma_lock_event(VMA_LOCK_RETRY); > + > /* Quick path to respond to signals */ > if (fault_signal_pending(fault, regs)) { > fault = VM_FAULT_SIGNAL; > goto out; > } > -lock_mmap: > + > +lock_mm: > mmap_read_lock(mm); > > gmap = NULL; > if (IS_ENABLED(CONFIG_PGSTE) && type == GMAP_FAULT) { > gmap = (struct gmap *) S390_lowcore.gmap; > current->thread.gmap_addr = address; > - current->thread.gmap_write_flag = !!(flags & FAULT_FLAG_WRITE); > + current->thread.gmap_write_flag = !!(vmf.flags & FAULT_FLAG_WRITE); > current->thread.gmap_int_code = regs->int_code & 0xffff; > address = __gmap_translate(gmap, address); > if (address == -EFAULT) { > @@ -444,7 +432,7 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > goto out_up; > } > if (gmap->pfault_enabled) > - flags |= FAULT_FLAG_RETRY_NOWAIT; > + vmf.flags |= FAULT_FLAG_RETRY_NOWAIT; > } > > retry: > @@ -466,7 +454,7 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > * we can handle it.. > */ > fault = VM_FAULT_BADACCESS; > - if (unlikely(!(vma->vm_flags & access))) > + if (unlikely(!(vma->vm_flags & vmf.vm_flags))) > goto out_up; > > /* > @@ -474,10 +462,10 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > * make sure we exit gracefully rather than endlessly redo > * the fault. > */ > - fault = handle_mm_fault(vma, address, flags, regs); > + fault = handle_mm_fault(vma, address, vmf.flags, regs); > if (fault_signal_pending(fault, regs)) { > fault = VM_FAULT_SIGNAL; > - if (flags & FAULT_FLAG_RETRY_NOWAIT) > + if (vmf.flags & FAULT_FLAG_RETRY_NOWAIT) > goto out_up; > goto out; > } > @@ -497,7 +485,7 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > > if (fault & VM_FAULT_RETRY) { > if (IS_ENABLED(CONFIG_PGSTE) && gmap && > - (flags & FAULT_FLAG_RETRY_NOWAIT)) { > + (vmf.flags & FAULT_FLAG_RETRY_NOWAIT)) { > /* > * FAULT_FLAG_RETRY_NOWAIT has been set, mmap_lock has > * not been released > @@ -506,8 +494,8 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) > fault = VM_FAULT_PFAULT; > goto out_up; > } > - flags &= ~FAULT_FLAG_RETRY_NOWAIT; > - flags |= FAULT_FLAG_TRIED; > + vmf.flags &= ~FAULT_FLAG_RETRY_NOWAIT; > + vmf.flags |= FAULT_FLAG_TRIED; > mmap_read_lock(mm); > goto retry; > } FWIW, this series ends up with kernel BUG at arch/s390/mm/fault.c:341! Thanks!