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 0A534C54EAA for ; Mon, 30 Jan 2023 18:21:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 97EC46B0081; Mon, 30 Jan 2023 13:21:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 92D6C6B0082; Mon, 30 Jan 2023 13:21:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7A7306B0083; Mon, 30 Jan 2023 13:21:25 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 6CF566B0081 for ; Mon, 30 Jan 2023 13:21:25 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2ED5240B73 for ; Mon, 30 Jan 2023 18:21:25 +0000 (UTC) X-FDA: 80412282930.06.E0A24A4 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf05.hostedemail.com (Postfix) with ESMTP id AB5DF100005 for ; Mon, 30 Jan 2023 18:21:22 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=qa6d7rO5; spf=pass (imf05.hostedemail.com: domain of imbrenda@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=imbrenda@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=1675102882; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oPDHW8iHJTUZEbiugcphTtQPcdsdex5pGh+zYwniu7w=; b=kAiIsP5bY4ngEhpxZmnd05uPpFuOHdmyjyuOaneu/i6GPV+xkS1S7A3TFI1XhheDK2APDH F/LaMq4lrelIfG9Q3GQ3SSpcIiMRon2ko+RRW503lnLIEwjKzdKMywq+wQ4aW79IKqYVX7 alAWfy7mE3roG4aeED+FP/urVhKbzQc= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=qa6d7rO5; spf=pass (imf05.hostedemail.com: domain of imbrenda@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=imbrenda@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675102882; a=rsa-sha256; cv=none; b=iMBpF1QP7TYpnTp+HIE6c7dEN+NX6QiUtgniH5hEMea073Bya0BjkUE4c4ujwPuo26RmQj fMUs/ZHxZPUZCOm663w/4RkXJmGF1oMOV1nWJ9fwmjuf5C498VbVQx1Yh7TsJ0cDH+NoSj XaiERWVKQFV6yU/TYhxiKzMTVr1hWjU= Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 30UICOgS011385; Mon, 30 Jan 2023 18:21:13 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=date : from : to : cc : subject : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=pp1; bh=oPDHW8iHJTUZEbiugcphTtQPcdsdex5pGh+zYwniu7w=; b=qa6d7rO5bqrjWISUGPV/Qo16ZDn53zcfaMVl0gk6NRJEZ1BHxtqbUJoyJ79ZNyBzbK1G tjhj8T8O/ELXeEgGSA6/hHLXGxgGkMCzVGsW+SfnSCWudkcV+IvokI6IT9ImfIQgpHWk PKpuwBJcsDtGfjaVz6jdB9DI3EMzIWLZX/WZo274pJodqth0WA7qXAqoBOOyWpk+Yr/h 5xd1q9kgciEevXK39cXbdA3tI2YXqNaW80TZ0VpHigXxrjuQ4af/XZSouW2swGfHH9yu oPFo4ohAgcYJ/M7irGBBlTwHMapKDubx2g7lMRxfQ+YvU2oN1qf1thgLXexDeSJh+u1c Ew== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nejy60741-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 30 Jan 2023 18:21:13 +0000 Received: from m0098409.ppops.net (m0098409.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 30UILC29014848; Mon, 30 Jan 2023 18:21:12 GMT Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3nejy6072x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 30 Jan 2023 18:21:12 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 30UCtavx012460; Mon, 30 Jan 2023 18:21:10 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma04ams.nl.ibm.com (PPS) with ESMTPS id 3ncvs7jjmh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 30 Jan 2023 18:21:09 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 30UIL6Kp21627196 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 30 Jan 2023 18:21:06 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4C15F2004B; Mon, 30 Jan 2023 18:21:06 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 01F8020043; Mon, 30 Jan 2023 18:21:06 +0000 (GMT) Received: from p-imbrenda (unknown [9.152.224.56]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 30 Jan 2023 18:21:05 +0000 (GMT) Date: Mon, 30 Jan 2023 19:21:04 +0100 From: Claudio Imbrenda To: Jason Gunthorpe Cc: David Hildenbrand , Alistair Popple , David Howells , Christoph Hellwig , John Hubbard , linux-mm@kvack.org, "Mike Rapoport (IBM)" , Christian Borntraeger , Janosch Frank Subject: Re: [PATCH v2 13/13] mm/gup: move private gup FOLL_ flags to internal.h Message-ID: <20230130192104.41c5b426@p-imbrenda> In-Reply-To: References: <13-v2-987e91b59705+36b-gup_tidy_jgg@nvidia.com> <20230126154148.2442e4cd@p-imbrenda> <7388b6a6-85f5-2e61-e3dc-54de531308d0@redhat.com> <20230126163902.16898798@p-imbrenda> Organization: IBM X-Mailer: Claws Mail 4.1.1 (GTK 3.24.35; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: BVpuHkzmwRNPtrGhLbCvKYWiPQhfNIgM X-Proofpoint-GUID: CMy39FveFF3L76xbmybjXUf1b3mUOmEJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.122.1 definitions=2023-01-30_16,2023-01-30_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 mlxscore=0 phishscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 malwarescore=0 mlxlogscore=738 impostorscore=0 adultscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2301300174 X-Rspamd-Queue-Id: AB5DF100005 X-Stat-Signature: j3ch8w3cntcggi7tdof7aqehgqptsci3 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1675102882-411270 X-HE-Meta: U2FsdGVkX1+8kUQcQwfXApBPn/+8wdAYRXUgQfDeqFTOORXVp6sF9moJfUna1F+goGxYs6LkKcv+bgpAeT7+A/zrD2r4gTPpbhe9eEVuQTO416P5W49lAnIXjeYIhZjltO5jxrEqIHke5SRDZ8s5wa2VgDcuakSlLbR3Tzv/fdn5wW4ZKH1wXPr2oGNvvhbvUXi94WSDwyh7OB+KJeDidk8uHtQ5pxmgvwLHh1vwmnRFWvndzjmwTKPiLIWsfiNAUEU6MoO1ENir4zt3t/tK7737YGOjuj2NA/rh7RIsyi7l0leQ11If6uPttV6shp1EhtTFg0ETvXOT2fJU561SFo9g8VRkM+jxH1+8uhPS9tkmqiavZnlCeGSV5pFTvtsb46l/BbY+SGV7u+fluCNQB2LGibxYuht4Wb32aHsTrblmXv9soV5hgp/yRAU9aPuoW1GhZTtpukg48EiN4QmJbmMjTeN9FszV3p7Byca/mnQ+pUTqqgLr/gQ5qJEjlXTU9kvdktOfb8YHnrFVBdaVI//+rLgB2OVeCcf/cieqVYgqZSEa8gORmryt+b3lAipF4w7928dyMMVBOLXd5kpYRmtyDrN+ix8iQgx2NPBtXv4Q7YyXbwZ1wAwZfC+EQdZpcgz4o7mUgO9NFrVq2eUA/takyDjiGg40adISxurA2i8yCQWVuwtG9vIHauTiyyRRstDypKp5GHNjVCoTjYXK0yj5osdeiq6GUy4528wvl55qA2RzDSaV+JK3RAg/c2P8CM7y6vjoSjpK0vflNzSGWOZokGoSZGsLnw0/c0OK6IFf/QEJmc/wQ/EWr1zoVZuUP5IHLEQiQtb5voURMdkHkFOXgvDXfwSuw06Gc//PkmnrVwFULuxIvUFMmc2FaiSkgG1yeyiKECNLFS0htMigpovTkUhOy1G+FapHHabSIap6O7E/7b76Uql+eb/zX1uz/B9CUOgjtJoQCis5Gx2 5pj2UkFh nJR/3FMxxZddSA7BOmRo3aT5Km6I5XoyMxjW0LuznABgzY5ydBSEcaooMjydA09DxD8HCbtd5mAwcvbXk2vv8YoQE54MXa1tZkb1SrFWjSgmgdT3H5mJWBD4BrQB1+C2O/v1/s2woiiAaGTwlOIXqo/9dELm+jU5L5VQSmBF22YUy9L6HqJkolJRBCAq9a+f9Lq9hd0OCIKVL4vzcSUNowIJ21NmadF+86UAWcNsQm9Ff7CAl6V0kP1miOpVGOAE2xBvt 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 Thu, 26 Jan 2023 12:35:37 -0400 Jason Gunthorpe wrote: > On Thu, Jan 26, 2023 at 04:39:02PM +0100, Claudio Imbrenda wrote: > > > I can tell you that the original goal of that function is to make sure > > that there are no extra references. in particular, we want to prevent > > I/O of any kind to be ongoing while the page becomes secure. (the I/O > > will fail and, depending on which device it was, the whole system might > > end up in a rather unhappy state) > > Sure, but if there is concurrent IO you just try again right? It > doesn't wait for refs to drop for instance. > > So make the lock_page work the same way: the more I look at this, the less I understand why I wrote the code like that. I do have a comment, though > > diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c > index 9f18a4af9c1319..847ee50b8672c6 100644 > --- a/arch/s390/kernel/uv.c > +++ b/arch/s390/kernel/uv.c > @@ -193,20 +193,11 @@ static int expected_page_refs(struct page *page) > } > > static int make_secure_pte(pte_t *ptep, unsigned long addr, > - struct page *exp_page, struct uv_cb_header *uvcb) > + struct page *page, struct uv_cb_header *uvcb) > { > pte_t entry = READ_ONCE(*ptep); > - struct page *page; > int expected, cc = 0; > > - if (!pte_present(entry)) > - return -ENXIO; > - if (pte_val(entry) & _PAGE_INVALID) > - return -ENXIO; > - > - page = pte_page(entry); > - if (page != exp_page) > - return -ENXIO; > if (PageWriteback(page)) > return -EAGAIN; > expected = expected_page_refs(page); > @@ -304,17 +295,25 @@ int gmap_make_secure(struct gmap *gmap, unsigned long gaddr, void *uvcb) > goto out; > > rc = -ENXIO; > - page = follow_page(vma, uaddr, FOLL_WRITE); > - if (IS_ERR_OR_NULL(page)) > - goto out; > - > - lock_page(page); > ptep = get_locked_pte(gmap->mm, uaddr, &ptelock); > + > + if (!pte_present(entry)) > + goto out_unlock_pte; > + if (pte_val(entry) & _PAGE_INVALID) > + goto out_unlock_pte; I guess we also need to make sure the page was writable? FOLL_WRITE made sure of that so I guess something like: if (!pte_write(entry)) goto out_unlock_pte; > + page = pte_page(entry); > + > + if (!trylock_page(page)) { > + rc = -EAGAIN; > + goto out_unlock_pte; > + } > + > if (should_export_before_import(uvcb, gmap->mm)) > uv_convert_from_secure(page_to_phys(page)); > rc = make_secure_pte(ptep, uaddr, page, uvcb); > - pte_unmap_unlock(ptep, ptelock); > unlock_page(page); > +out_unlock_pte: > + pte_unmap_unlock(ptep, ptelock); > out: > mmap_read_unlock(gmap->mm); >