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 1B44CC46CD2 for ; Tue, 2 Jan 2024 23:35:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 877CF6B02F5; Tue, 2 Jan 2024 18:35:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8263E8D0006; Tue, 2 Jan 2024 18:35:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6C71F6B02F7; Tue, 2 Jan 2024 18:35:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 576236B02F5 for ; Tue, 2 Jan 2024 18:35:02 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 302C6A0185 for ; Tue, 2 Jan 2024 23:35:02 +0000 (UTC) X-FDA: 81635978844.20.EEEC8EE Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176]) by imf05.hostedemail.com (Postfix) with ESMTP id 768A8100015 for ; Tue, 2 Jan 2024 23:35:00 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=0U7MHehC; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf05.hostedemail.com: domain of surenb@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704238500; 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=fEeHN1tMa7cbdkZt1wLkdCjR844Pa9tAzIQcAD+DKkg=; b=ArKPoCgqIcEw3z+BF6MOIJFRBohawL/m9iue1f6B1Gmnyy09gFswRx6M0wW8keyPbnfVmZ 21r9KfP8XCApXA/BKKjMwDIaeE/UIbBNJn4NobJKWdNmf+z3sPxpHzZLZnQ3VRdo9491DQ E6p/ve6ofuCp3VSgB/Sr3bkTQcY+VVk= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=0U7MHehC; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf05.hostedemail.com: domain of surenb@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704238500; a=rsa-sha256; cv=none; b=MGMjaRU5KUMj2kOW+la7yiRShs2+lVxpZnR42RjZpyJDywzlWWW86OvCUraGV16YbIbZEt DWEWbc4wt0pQm9M6gcd1SZ8ReKcqCmFUUiLTofsQPIPq/FS+YVGADXg83xsRmZWRSzjMor HBkLyw9EbcSBSDq5SARnPAWoJgy11Xk= Received: by mail-yb1-f176.google.com with SMTP id 3f1490d57ef6-dbd029beef4so8126209276.0 for ; Tue, 02 Jan 2024 15:35:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1704238499; x=1704843299; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=fEeHN1tMa7cbdkZt1wLkdCjR844Pa9tAzIQcAD+DKkg=; b=0U7MHehCloL2k3mMWQAFpGCzZ7Q2uPLng2CESiVGvZgZuSXzV/w1ZJ4LEHjGOG7AJh fYlgcKElse14oCqxdOy01PMnDFj+nF/br6H62+r7ViARLbr++4YNI2WCRZ9VDAzx/4pB kfnu1HbnHvolRF2bRBZSimTX2Dv2b5udijd80HW6R6HHdgODi6devX9R6XfMxA7W+hN5 /lex9PqfBSpXsYkYVr/MB1xwrGcpZNaTcYke8QcmpciyBQ+5kDHmFTtktuqxtLgztth6 WZF+nBUQjpuN18eCBVx6tDBHqzDjCOiZSvIViwq4J2CObgDXFHZzDnmWaeIs+JsQmH+v Dyvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704238499; x=1704843299; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fEeHN1tMa7cbdkZt1wLkdCjR844Pa9tAzIQcAD+DKkg=; b=bSXtu009DO567rnRmK5F8O8AZIy5hdFkIqjxbBFsoeOxavpnsIA52qmPQmRZZJATQt 7gH0pUvJYY2BZwZMApvuyfTDXcSIs/g05QDivNMenR16qaGrnZzII1zQYTXW6FZT9NkM 5U6hZDMaC5eJ2a3EiEns8ZOq7iRUHEysaq1Hkx94uRnTGj6XJ1c9NyycIEcDB20O00vJ 2KHA1JjJ+wZOnQhupvZqWFOGRQ0fIZ2rq62avZhMNy2Agk8a/0jxrUwr07s84XszpTro znMFV8LeAWeh1SPHX4nEKLoZha1C1/gvqYdT//9J6I/RrqrwdMX68FWq9k1Mn06m/A8M Dy6A== X-Gm-Message-State: AOJu0YwTnYiR3SuTFKPzjqlhGE+NkyHn5ik5xeIVGK83wUneLNhpkcrt YY2+ecN+bWPLxWPMIyvE7M0vB3GUNmPr9RddwYcgZIvPWn4L X-Google-Smtp-Source: AGHT+IGU6yh4YTmF3G9jvMQhRAMuGZOpnj42Na+/PAXUmwKui2qn2ADQ4/SQ2umSN0+5z8f+hfJb4rX5XjLhNFsGcAA= X-Received: by 2002:a5b:7c3:0:b0:db5:4ec5:6f2f with SMTP id t3-20020a5b07c3000000b00db54ec56f2fmr129240ybq.20.1704238499402; Tue, 02 Jan 2024 15:34:59 -0800 (PST) MIME-Version: 1.0 References: <20231230025607.2476912-1-surenb@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Tue, 2 Jan 2024 15:34:46 -0800 Message-ID: Subject: Re: [PATCH 1/1] userfaultfd: fix move_pages_pte() splitting folio under RCU read lock To: Peter Xu Cc: akpm@linux-foundation.org, viro@zeniv.linux.org.uk, brauner@kernel.org, shuah@kernel.org, aarcange@redhat.com, lokeshgidra@google.com, david@redhat.com, ryan.roberts@arm.com, hughd@google.com, mhocko@suse.com, axelrasmussen@google.com, rppt@kernel.org, willy@infradead.org, Liam.Howlett@oracle.com, jannh@google.com, zhangpeng362@huawei.com, bgeffon@google.com, kaleshsingh@google.com, ngeoffray@google.com, jdduke@google.com, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 768A8100015 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 6m986wk9cgo6rqw8jmyxto6stgritiqe X-HE-Tag: 1704238500-849710 X-HE-Meta: U2FsdGVkX19neTjbD23t15EqkK0yk+l2lBKGWhdforiIj7n0pxIWp/faJ5wwUZYOHgA21vLtzqhFbHcQjWWsnzbvam6HFSXlTNoTS+aFhq1G9nsrw6v78mdIvd4fxeHKpQ1E55V4OK+vdf2+qrtj5qYV+ksVX3OuF71R9p/ZcRzpsZB4Bfw8SCgw1s90/ePbdUdpK6PhzshvUMZfNf4Vt282t3b1gyeKceplV4c0+uSTWfk3C1j/miIju/UWaX+CbvAxAs8+FmiwSisFfj2ytlfzJJgJ064bvFcVUWNtf1uGiJrXgYehvHtQxy7kVH1JOAJmZpy3Mx3TSmd+Qw8H9LtzaBbU/VfQre6L86jtHeYlXobh34OxR5la+p4ec2UZJehV3GBgTDq+Fy4W5sFqE8jK6jUUP4JQA2wDFn5RH8/Qx/eiHR8ygZMx14sb7kJsC4syHK7v+u/9+IfXMRurFdrwHwE8yts7vjQAa/C3MBgXtNgUgsu+aoc3H0oHRQi5vTRX4f7ztrAOGJqZ80sFRcCoLKzWrdG+CmD9gKOe1Y9zDuMhlakNLE0kYJIX1a4MH84xop/Jteaby8ok5h8mfrS8DuUTGk2ThFkXcO9jrgvYGWRZXXuQFxr6NNX+nQtzIbAaK0LDu4XG0+yKVWUONhOEZP3MWmSs5GuSkXeWodkBUG9ofZvDoOEDZMuG4tcI5fHvtdegON/oEjSizq4D4j1QYb1Mv9RbhPMyqy4ql0PG3fDXSOlkXdJM8VQN2yKNvBwLiYXhhbhpn6SQH2lvVoJUQ062nL58Lp2bN542tCA9Y59HFUkDbUYKPQ0o1yLRhmKPIP/1RjBbuiRzX8cGB7X05/vqB8YwSlvx+Ipl7jWXGq3MjQVikenD20YKdMcLlIHvHQUNwAlbxr+LJKz7rUe9mgPvchNFYa6sEGoq/5B4u4YahBDyCb+yDwPCgTA7dUs+w92r6I7W1gi9buy gFUnAe2c aw5THa3haXdnlPuQjFEHTPCs2DeoJJdMf1WO59RCsKOeJlVbWC4BuEwq25huAIrViaMQPR9mIKdrpS5bYPDjPrWgqmF8rYBbJGUJom1N362r3KA4cd6s95ujLiWqZIZkpRgRUstlx+j6nVId6zAuFfN0PucM+Hvj/Jgwl1emB1St/u3y26gYfmnL+31LFqDSlAQnfA+sYGBVZBgh+gVrTx95GwthWEH77tzUzQ460xC+5q58fKAswRSEBnyMObH3YZSUIDyvxv7yZ9nJq6m8vZ5DlWXJnJlPj0zk+YLLUT3fFO/+sAVwshxrUCZt8YkbnRjqrjXPb3YF1tCnsbpysEYpQgf6g5BkEvUccfvLsv0cWHMxEHZJ1aF+M8qkg+16bR5CC 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: List-Subscribe: List-Unsubscribe: On Tue, Jan 2, 2024 at 3:16=E2=80=AFPM Suren Baghdasaryan wrote: > > On Tue, Jan 2, 2024 at 8:58=E2=80=AFAM Suren Baghdasaryan wrote: > > > > On Tue, Jan 2, 2024 at 1:00=E2=80=AFAM Peter Xu wro= te: > > > > > > On Fri, Dec 29, 2023 at 06:56:07PM -0800, Suren Baghdasaryan wrote: > > > > @@ -1078,9 +1078,14 @@ static int move_pages_pte(struct mm_struct *= mm, pmd_t *dst_pmd, pmd_t *src_pmd, > > > > > > > > /* at this point we have src_folio locked */ > > > > if (folio_test_large(src_folio)) { > > > > + /* split_folio() can block */ > > > > + pte_unmap(&orig_src_pte); > > > > + pte_unmap(&orig_dst_pte); > > > > + src_pte =3D dst_pte =3D NULL; > > > > err =3D split_folio(src_folio); > > > > if (err) > > > > goto out; > > > > + goto retry; > > > > } > > > > > > Do we also need to clear src_folio and src_folio_pte? If the folio i= s a > > > thp, I think it means it's pte mapped here. Then after the split we m= ay > > > want to fetch the small folio after the split, not the head one? > > > > I think we need to re-fetch the src_folio only if the src_addr falls > > into a non-head page. Looking at the __split_huge_page(), the head > > page is skipped in the last loop, so I think it should stay valid. > > That said, maybe it's just an implementation detail of the > > __split_huge_page() and I should not rely on that and refetch anyway? > > I'll post a v2 with this fix and re-fetching the folio > unconditionally. We also don't need to reset src_folio_pte value > because it's used only if src_folio is not NULL. Posted at https://lore.kernel.org/all/20240102233256.1077959-1-surenb@googl= e.com/ > Thanks for catching this, Peter! > > > > > > > > > -- > > > Peter Xu > > >