From patchwork Thu Jun 8 19:27:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hugh Dickins X-Patchwork-Id: 13272786 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 2FC95C7EE23 for ; Thu, 8 Jun 2023 19:27:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BED8B8E0002; Thu, 8 Jun 2023 15:27:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B76FA8E0001; Thu, 8 Jun 2023 15:27:30 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9F1538E0002; Thu, 8 Jun 2023 15:27:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 8D4728E0001 for ; Thu, 8 Jun 2023 15:27:30 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 56AADC046B for ; Thu, 8 Jun 2023 19:27:30 +0000 (UTC) X-FDA: 80880564660.18.A54D9F9 Received: from mail-yw1-f179.google.com (mail-yw1-f179.google.com [209.85.128.179]) by imf17.hostedemail.com (Postfix) with ESMTP id 7AEDF4001E for ; Thu, 8 Jun 2023 19:27:28 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=qeZyDOuR; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of hughd@google.com designates 209.85.128.179 as permitted sender) smtp.mailfrom=hughd@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686252448; 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=jq3xrA6xvDVzvCSVs0I+t9KBGN0vgt1rJHLesOzHUeM=; b=cRheE3cQUnRVKRVk9NpnVuC+0UYdNQFXto7ZyudMcid510gJLyL58t1s9NGy7qqOQIuHhE 62L2qPkDPbuUQB11i4Ius+muYjIRAv1ui1+OtSPSzUp9Dep+VmTKyRBKfzuhORXgXzdjDL jYMcODHYreJCblvyLfb3unE+iAC0+18= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=qeZyDOuR; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf17.hostedemail.com: domain of hughd@google.com designates 209.85.128.179 as permitted sender) smtp.mailfrom=hughd@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686252448; a=rsa-sha256; cv=none; b=xwsrQMpJ7UaFhb6A3w+Ug2jtq0X27CyGBvqEs9JJdD8yyAflU2lNb2VlRLmCmKe4bsSWEJ dtTY6clEre96H33GuT4v+1PKsQ91py/mkJoy+Rj7GNPkJhp42JkR4genLgcXXt8UxtcjYY eLwGqQacIqo5l4uaOVAkM6MulElh2sM= Received: by mail-yw1-f179.google.com with SMTP id 00721157ae682-568f9caff33so8716667b3.2 for ; Thu, 08 Jun 2023 12:27:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686252447; x=1688844447; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:from:to:cc:subject:date:message-id:reply-to; bh=jq3xrA6xvDVzvCSVs0I+t9KBGN0vgt1rJHLesOzHUeM=; b=qeZyDOuR1Ocm6uD+TD8H/qooj7RzNFAiwCA/UqStNTHWJ9eTjvcv/8Jq76xJdFB16m 9vZjnF1AyEaJnSc8jl/F1i1cVEQ7u2Ksx/OtGK4kAnOQneochRX+8Uo2nfHZ+IrggDdD 8+N7/1JLxtH1E0e/CwR5x6nt/ET/TtrIOFNieXovV1RuuXkZkQgSV5Jae+9SGKAEV2ls YNv4h9+C2a+hHml6224b2D5gDdWuYPDND/n0XtPM1ecc2OJLce4FWSFBO4HGDd7/83bC 7o6bLjq43ZCC/kx1k33o8ly3OOe+X/CVjUPlD/YBOO/8+E1ljdocxCQmjAw/takWi4D5 1nfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686252447; x=1688844447; h=mime-version:references:message-id:in-reply-to:subject:cc:to:from :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jq3xrA6xvDVzvCSVs0I+t9KBGN0vgt1rJHLesOzHUeM=; b=HpSrPBHO10PGYI7I7gyO945IdroHvUMAR8B8dcrn6HM2loY9agRBhkbRtN0Mmc2131 pfdGu/4sk2SylwTxhvZTJ+aTu9EAZdGWkV23cTxYzyWaIBlBcRcoEg+YbxI1RPVXqeJj IaPa1tRPtEvJR9EueKvg49cy0qYdgoQzrZaZku+w6Hj1uv7ZIKy5aI0Tge2uxfO9uBjx TgV5SdcCD2tpJvRr+iXBVMS+wz03wYrRrGYrrdVxdVGrfHLo1yXk+Ae+y2VMIxbdu+2L Ue3vDICQihsAmIEmhwusA+6e7mZXdg9MDZxKSYcMRoHZLDgNpxrRdweLp2AJNRQrp1ch rQlA== X-Gm-Message-State: AC+VfDwHULlgu5U9S8Xh2Pbv0HTSOVYJvqduKyMjhdeKzaYbT2lVnThf mWdLZSuVKfeUnYxgfKQEoB2JaA== X-Google-Smtp-Source: ACHHUZ4CKoILR2pPYJTWor9o0GBjI/ipQ0oNmgXRrLGWYF5f0T4KrdmmHl6o2FyAVA33XKtCaimxFg== X-Received: by 2002:a0d:ca88:0:b0:569:fdd1:24a7 with SMTP id m130-20020a0dca88000000b00569fdd124a7mr493494ywd.51.1686252447226; Thu, 08 Jun 2023 12:27:27 -0700 (PDT) Received: from ripple.attlocal.net (172-10-233-147.lightspeed.sntcca.sbcglobal.net. [172.10.233.147]) by smtp.gmail.com with ESMTPSA id f123-20020a0dc381000000b0054bfc94a10dsm119559ywd.47.2023.06.08.12.27.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 12:27:26 -0700 (PDT) Date: Thu, 8 Jun 2023 12:27:22 -0700 (PDT) From: Hugh Dickins X-X-Sender: hugh@ripple.attlocal.net To: Andrew Morton cc: Mike Kravetz , Mike Rapoport , "Kirill A. Shutemov" , Matthew Wilcox , David Hildenbrand , Suren Baghdasaryan , Qi Zheng , Peter Zijlstra , Russell King , Catalin Marinas , Will Deacon , Geert Uytterhoeven , Greg Ungerer , Michal Simek , Thomas Bogendoerfer , Helge Deller , John David Anglin , "Aneesh Kumar K.V" , Michael Ellerman , Alexandre Ghiti , Palmer Dabbelt , Heiko Carstens , Christian Borntraeger , Claudio Imbrenda , Alexander Gordeev , John Paul Adrian Glaubitz , "David S. Miller" , Chris Zankel , Max Filippov , x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v2 15/23] s390: allow pte_offset_map_lock() to fail In-Reply-To: Message-ID: <3ff29363-336a-9733-12a1-5c31a45c8aeb@google.com> References: MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 7AEDF4001E X-Stat-Signature: 3mnod3wu3ffub4bqdwbx5i4wshbu6r74 X-Rspam-User: X-HE-Tag: 1686252448-853575 X-HE-Meta: U2FsdGVkX1916M2FasEIRZjHfqzgo5Hw2UwsgYyPYFWCBl54Voj9h1Ko4IBdzZ6x6X63P17s82/aNiHYvc4iWZochS6jXnKMbL4xCf1CSbEG11F7m2r0E/E99ibbPRujbTZVyZbA9UDFLY12noQj41GEbuLKyQv5kIQ8uneBeV716WXP9P9TXL5lr9bLHGFHsV3lE/heH1caST+m5nQV/Y/JHM2yLhvQJv0+EZzPYp06tdhmCZXwCnGTPoM6Lez6alDKFXZgj4H4ArEW7Zrbi9oOkus2jIQ3JaZRBng/mEMO0xJsPAwaEdWOssw5r6KqCAjUIxQaxNqdgtTQ0wFLyjOzvdxX2H4HWJcgiBx/5yqu6apSkx4vul0cHu56eMIXUXi7jv1k/a49Lo9q/oIsf99Cxep3Ya+9Ga45/lMWx1lbwuc/dVv/ZdXJDi1WQOaCfhR9C8GRyYZJoLi0OlNekwyGAjcylST3aTSuLxpa4VgRMWhVov5kCNT3deVjdAHZ2sYe3/alQPY846tZgrseyS4euNJUJPbrLuAA6wCvsa+BxwX8mYAhqmBkWunZTSlc1cK6mPM7lkX+qAkuKeQDqWcgVY2r6sp1QuJUFNlrbxYLEQbKbuM+IVomtKzOXqD/kbdpW5sHfvC2ripwRoC5aNfyVYIi0F2e3PS+iYtsa+3uQlurV1t8DNF9XKwIqYk8MKs+YyPsNfzyZN9p2US692Ae5X1Hd3lyUdli31w802uXUC95REFXBhoX1Fxgi6pX8omQSm6+vUsLVjQWhRN4s/U/6BMtLaw4iRkUOcB3+ud9FEBJ/FPMeW7LMbRLdmjLRQpnE76Gzn9nNp9Ux1lnJ9N5YHlHxRM9eRvD1CQC5qrq6p5YwJIbhQOG0jpwSZyyItFJYx5H0MM2f/PHyNQkT6Fx9Ue7BZayKgfNJGgBEpMyX/aXHo6byjBe1x+avPKUqXm0o4pNPiRJnNro2MV TuvifAzT OfyzSWTaHQrtTDFHNfxpbC07hxwPWC5gqGMmuyHjCFBCocggLrc2WFufLCq3qfup4d7rt7HcqQvQeWZmM6J3gcvGwSzezGm4kJNEKTZzUKTBk255iaeBumn+3Au3LxvxW0meq6MizFl2u4Tpyx0bLXgpVqMzA7ME014gZQujJhHJbVZrA3d/azV5Jpk5cX1tRgTv9kDMqvs3aPQ9v8+EAjZgFKiT/DmVZG32HxTe4W/edWMiVc3v5TFs5PH6hILFnFHfEwuxJ1uuiSoD6X9Igm/5FxNqD4Ad3wqcwMVWJ1XnMTG7USKdtboinjgDRHKSObMMpUTXCXwisn+C2Q8VM1cgsgt2CLVBL7K3zks0OK2IeC1AoRdua0uiF62/yYiHhEZ5WmN076jSgvVFM0aD6sgIpIG4gNy99kySuUbe8aMHuTpGFDadu6zkYLg== 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: In rare transient cases, not yet made possible, pte_offset_map() and pte_offset_map_lock() may not find a page table: handle appropriately. Add comment on mm's contract with s390 above __zap_zero_pages(), and fix old comment there: must be called after THP was disabled. Signed-off-by: Hugh Dickins Acked-by: Claudio Imbrenda --- arch/s390/kernel/uv.c | 2 ++ arch/s390/mm/gmap.c | 9 ++++++++- arch/s390/mm/pgtable.c | 12 +++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c index cb2ee06df286..3c62d1b218b1 100644 --- a/arch/s390/kernel/uv.c +++ b/arch/s390/kernel/uv.c @@ -294,6 +294,8 @@ int gmap_make_secure(struct gmap *gmap, unsigned long gaddr, void *uvcb) rc = -ENXIO; ptep = get_locked_pte(gmap->mm, uaddr, &ptelock); + if (!ptep) + goto out; if (pte_present(*ptep) && !(pte_val(*ptep) & _PAGE_INVALID) && pte_write(*ptep)) { page = pte_page(*ptep); rc = -EAGAIN; diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c index dc90d1eb0d55..3a2a31a15ea8 100644 --- a/arch/s390/mm/gmap.c +++ b/arch/s390/mm/gmap.c @@ -2537,7 +2537,12 @@ static inline void thp_split_mm(struct mm_struct *mm) * Remove all empty zero pages from the mapping for lazy refaulting * - This must be called after mm->context.has_pgste is set, to avoid * future creation of zero pages - * - This must be called after THP was enabled + * - This must be called after THP was disabled. + * + * mm contracts with s390, that even if mm were to remove a page table, + * racing with the loop below and so causing pte_offset_map_lock() to fail, + * it will never insert a page table containing empty zero pages once + * mm_forbids_zeropage(mm) i.e. mm->context.has_pgste is set. */ static int __zap_zero_pages(pmd_t *pmd, unsigned long start, unsigned long end, struct mm_walk *walk) @@ -2549,6 +2554,8 @@ static int __zap_zero_pages(pmd_t *pmd, unsigned long start, spinlock_t *ptl; ptep = pte_offset_map_lock(walk->mm, pmd, addr, &ptl); + if (!ptep) + break; if (is_zero_pfn(pte_pfn(*ptep))) ptep_xchg_direct(walk->mm, addr, ptep, __pte(_PAGE_INVALID)); pte_unmap_unlock(ptep, ptl); diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 6effb24de6d9..3bd2ab2a9a34 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c @@ -829,7 +829,7 @@ int set_guest_storage_key(struct mm_struct *mm, unsigned long addr, default: return -EFAULT; } - +again: ptl = pmd_lock(mm, pmdp); if (!pmd_present(*pmdp)) { spin_unlock(ptl); @@ -850,6 +850,8 @@ int set_guest_storage_key(struct mm_struct *mm, unsigned long addr, spin_unlock(ptl); ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl); + if (!ptep) + goto again; new = old = pgste_get_lock(ptep); pgste_val(new) &= ~(PGSTE_GR_BIT | PGSTE_GC_BIT | PGSTE_ACC_BITS | PGSTE_FP_BIT); @@ -938,7 +940,7 @@ int reset_guest_reference_bit(struct mm_struct *mm, unsigned long addr) default: return -EFAULT; } - +again: ptl = pmd_lock(mm, pmdp); if (!pmd_present(*pmdp)) { spin_unlock(ptl); @@ -955,6 +957,8 @@ int reset_guest_reference_bit(struct mm_struct *mm, unsigned long addr) spin_unlock(ptl); ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl); + if (!ptep) + goto again; new = old = pgste_get_lock(ptep); /* Reset guest reference bit only */ pgste_val(new) &= ~PGSTE_GR_BIT; @@ -1000,7 +1004,7 @@ int get_guest_storage_key(struct mm_struct *mm, unsigned long addr, default: return -EFAULT; } - +again: ptl = pmd_lock(mm, pmdp); if (!pmd_present(*pmdp)) { spin_unlock(ptl); @@ -1017,6 +1021,8 @@ int get_guest_storage_key(struct mm_struct *mm, unsigned long addr, spin_unlock(ptl); ptep = pte_offset_map_lock(mm, pmdp, addr, &ptl); + if (!ptep) + goto again; pgste = pgste_get_lock(ptep); *key = (pgste_val(pgste) & (PGSTE_ACC_BITS | PGSTE_FP_BIT)) >> 56; paddr = pte_val(*ptep) & PAGE_MASK;