Message ID | 20230207035139.272707-9-shiyn.lin@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show
Return-Path: <owner-linux-mm@kvack.org> 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 06710C636CD for <linux-mm@archiver.kernel.org>; Tue, 7 Feb 2023 03:54:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 993D66B0074; Mon, 6 Feb 2023 22:54:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 91C636B0075; Mon, 6 Feb 2023 22:54:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 76FB36B0078; Mon, 6 Feb 2023 22:54:14 -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 64CD66B0074 for <linux-mm@kvack.org>; Mon, 6 Feb 2023 22:54:14 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 41BA180369 for <linux-mm@kvack.org>; Tue, 7 Feb 2023 03:54:14 +0000 (UTC) X-FDA: 80439128028.16.4263E43 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by imf27.hostedemail.com (Postfix) with ESMTP id 6AC024000C for <linux-mm@kvack.org>; Tue, 7 Feb 2023 03:54:12 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=K3GuS1yr; spf=pass (imf27.hostedemail.com: domain of shiyn.lin@gmail.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=shiyn.lin@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675742052; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9hQ1wmYZNKbh6ubCaoCPj3vqYdMi+xiWWNvAtSowi2o=; b=mV0A1w8MFn10IZu4QOqs/t02BOIkXhdTRwYwk4B3ylWwFCVsgdcraeDxct4DqMYbc+5H3w JsTVYR+SaXGLlI/O1hzeRDf6hVkQME6Jy135iPXEdiKfG7Mu5D2G2ONeQyynxdDJHV05ly 7IVTCVUKoZw8Q3RywGLlXEeY5wHv5BQ= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=K3GuS1yr; spf=pass (imf27.hostedemail.com: domain of shiyn.lin@gmail.com designates 209.85.216.50 as permitted sender) smtp.mailfrom=shiyn.lin@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675742052; a=rsa-sha256; cv=none; b=NQkhB3i6brwQJOrdTA4q9kqlTZLzuk9d2FVF3iEFSZJ3sIqXpD3FhJskMXHJm8F2G7lm6X GsbWNHHX2Y4FpLrIFlVu4Nd+S0tmolpgvK/qHhS5DppadXEIZkq7bwUVsgNreuf4NsT4B+ THBsVJ1z6Gm9TdAXfNSpPeqlIjwdiB8= Received: by mail-pj1-f50.google.com with SMTP id j1so7834096pjd.0 for <linux-mm@kvack.org>; Mon, 06 Feb 2023 19:54:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9hQ1wmYZNKbh6ubCaoCPj3vqYdMi+xiWWNvAtSowi2o=; b=K3GuS1yr0W6ph4124TteyvhSGbqph5dx0QX3w7vlsuPsCGZd4P2k77PsEPK5l23VHX cnagCyQEot5lD/H6hr+2gBVCvcYfQ0ICQ9bE7IBhyljYwAPPH9yPWzykEWWXSQi/tKOn nCkcQkwOnXlnCWQEGRnFKRjqvmk71mRAtOOapfPlKfPfn1q6YlVNo03Qnb+xloHM6ksC EfuX664vNfN+VFLbGjTsKWXaPEAjC3aBdSuZ9yKkw6OByEoHab18DU31F0Fl+qY0BhYo yL7TRMdYVWaab9Zrd0OXD5QlFZ01/W9XPxuILrCxR2+aBD0NCdQo/ULQ1o4Lc1HGZnnr nrnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9hQ1wmYZNKbh6ubCaoCPj3vqYdMi+xiWWNvAtSowi2o=; b=VaYO9Vy7xdt7+C5ZCIS+GP2d8L6TwdgBUOVhCWAw7yZ4cHqBhiyJ2lmLLUhkNr/lX9 BfRlWj7WxjeHpamPgvj56ueCfTcchMow+zKY1amEJ9dCbtym2/wUNxBDvpFSBIDCjn8T bPTIKZRgwq68bxxuiEFZe+k046b+WCGvHvHLtWwLhevr4TS2zgiBXaBcPZ+IhmZ3AdO9 iZ3l2rbez/A1F+v8ojIjVUSfJqeTS5/b0YeAV1Qtg2A7WQt3wjj+hajfrtzwEiSebxY3 eNmCbmhQkQbLxCcLsE4qRjqJJavcwY4aFx6Hia51DCf/RR/tHBEGKDiDxNcYNZhNoK21 h0uA== X-Gm-Message-State: AO0yUKWVDqNBbG5gngZZw6lT+/FDN3HNoPPL7bjDPqp0Y4aoCc7nb91r I0rVrlVNpKKl22Ofjn1Vt74= X-Google-Smtp-Source: AK7set8BweMlzypQiVTtVVURVr8ilTYE/9HKHHuKVpdwfa5VakEqT0QFlksWW1Ae0vdg/3Bbk6hC7g== X-Received: by 2002:a17:902:f0ca:b0:199:9fa:7553 with SMTP id v10-20020a170902f0ca00b0019909fa7553mr1395163pla.17.1675742051331; Mon, 06 Feb 2023 19:54:11 -0800 (PST) Received: from strix-laptop.hitronhub.home ([123.110.9.95]) by smtp.googlemail.com with ESMTPSA id q4-20020a170902b10400b0019682e27995sm7647655plr.223.2023.02.06.19.54.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Feb 2023 19:54:10 -0800 (PST) From: Chih-En Lin <shiyn.lin@gmail.com> To: Andrew Morton <akpm@linux-foundation.org>, Qi Zheng <zhengqi.arch@bytedance.com>, David Hildenbrand <david@redhat.com>, "Matthew Wilcox (Oracle)" <willy@infradead.org>, Christophe Leroy <christophe.leroy@csgroup.eu>, John Hubbard <jhubbard@nvidia.com>, Nadav Amit <namit@vmware.com>, Barry Song <baohua@kernel.org> Cc: Steven Rostedt <rostedt@goodmis.org>, Masami Hiramatsu <mhiramat@kernel.org>, Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>, Arnaldo Carvalho de Melo <acme@kernel.org>, Mark Rutland <mark.rutland@arm.com>, Alexander Shishkin <alexander.shishkin@linux.intel.com>, Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>, Yang Shi <shy828301@gmail.com>, Peter Xu <peterx@redhat.com>, Vlastimil Babka <vbabka@suse.cz>, "Zach O'Keefe" <zokeefe@google.com>, Yun Zhou <yun.zhou@windriver.com>, Hugh Dickins <hughd@google.com>, Suren Baghdasaryan <surenb@google.com>, Pasha Tatashin <pasha.tatashin@soleen.com>, Yu Zhao <yuzhao@google.com>, Juergen Gross <jgross@suse.com>, Tong Tiangen <tongtiangen@huawei.com>, Liu Shixin <liushixin2@huawei.com>, Anshuman Khandual <anshuman.khandual@arm.com>, Li kunyu <kunyu@nfschina.com>, Minchan Kim <minchan@kernel.org>, Miaohe Lin <linmiaohe@huawei.com>, Gautam Menghani <gautammenghani201@gmail.com>, Catalin Marinas <catalin.marinas@arm.com>, Mark Brown <broonie@kernel.org>, Will Deacon <will@kernel.org>, Vincenzo Frascino <Vincenzo.Frascino@arm.com>, Thomas Gleixner <tglx@linutronix.de>, "Eric W. Biederman" <ebiederm@xmission.com>, Andy Lutomirski <luto@kernel.org>, Sebastian Andrzej Siewior <bigeasy@linutronix.de>, "Liam R. Howlett" <Liam.Howlett@Oracle.com>, Fenghua Yu <fenghua.yu@intel.com>, Andrei Vagin <avagin@gmail.com>, Barret Rhoden <brho@google.com>, Michal Hocko <mhocko@suse.com>, "Jason A. Donenfeld" <Jason@zx2c4.com>, Alexey Gladkov <legion@kernel.org>, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Dinglan Peng <peng301@purdue.edu>, Pedro Fonseca <pfonseca@purdue.edu>, Jim Huang <jserv@ccns.ncku.edu.tw>, Huichun Feng <foxhoundsk.tw@gmail.com>, Chih-En Lin <shiyn.lin@gmail.com> Subject: [PATCH v4 08/14] mm/gup: Trigger break COW PTE before calling follow_pfn_pte() Date: Tue, 7 Feb 2023 11:51:33 +0800 Message-Id: <20230207035139.272707-9-shiyn.lin@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230207035139.272707-1-shiyn.lin@gmail.com> References: <20230207035139.272707-1-shiyn.lin@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 6AC024000C X-Stat-Signature: ydqaxtzidg1r8ns6ywf19koej778jm4g X-Rspam-User: X-HE-Tag: 1675742052-66061 X-HE-Meta: U2FsdGVkX1/xmgg4PrEimHSqFDYKYU3NhpRlQrI05vLelHodl0u3TP3xh4AOF1MoLjrIzYYPPpov/3N7rr59YQIwDN1WMHJp1ju0bgQJQ00CtnhvuinbwYxUX+WHdnrTmqQtZZQhS+Zycwwj59ScaCZF733IZL1MU23IIX0xvLGNg8pCWVDmcvvhzQZThykHsilRIMISldNN6K++gxjacZc2nz4dxnqZ79xMJPNcY5SyJfKtF+yeFqDsW6Ry9Bc3dVJjQP1++kpJBFkNxzx1YxMgQ1FtzIGdrqFXJuEU1rstSrlsbdSUKhoXRE6U6NGZxhktRetJE7hAMJHkB9UoiupsjrVypNe9SyThOi6S+m7UyWEWJjPo/rLDS21nXqy3Gy/zXCvNaS4J6WSqBIEsRzUom0FLn8qSjJjj0GsmDj0Z2deHGYt4XHDDmFAPc6NRb417JsD69eZ1YYLh4weWGTCex78XWp/eCOgWrmuwFbTZcH9Cytz4Gcx8w/0WEhAJWM/48wx230jZYvk2QC7gnXvTHei667CCcl8HQgxpEoLu3JcZsTPvKs6I6UaE/3FYn5V5Y3NRMpzB8J/RXxRFLl8PzRwhaeIyKmehK/G9T2O/aaIqgM8ZulhikVxrDJTJ6Acqd5tkEUi/vL5VTfN7RwobJ4OcbSqMb0QVoSg3asMOniWCCuX1Ps2wDzbzdBkjNwR7xEBZkjo9te4AMbBf8IXdem1HaTrU9s0aOV3K6o5Kg/cYT3aPZZcAyqtRo6Mgki11iHyA+smiFOtw1mDaDkIjwGWSIxCc2S9Z3Ybasu/5udUX7HM3ZUmIPlVH0hmaQDEta0YaTCgVf8rT9woBrcH2vC06s1H/MLpnkj4GkwQucLZaVfREBj1zLE4LaWZwccHBxdZTF1niankAs4w5IsbGtSRD8zyD6tqrkb4ZcjikTETq9afcmSyf53+CbTr+Nj4gSgPLSebYbeBuxbX P10iAzxC cxLST6ATXegrZLFNwP0r4cSgI3Ab2eHGISP75DjeEldqjkieTiGG0ZaozRMIGJbkMM0wqxr2gLhnI9cPiN7dOSoJ8lHojGNcDg3FhzPBArQIZT2U3SUZCqG/oURwdmM65yGFE4RsilKqipPnOxzxAOIdjc7hnzDdTCGWm/7TN0h8mnnG0AcNAe15A8vxsi7pi+oPs2nTW0xB1bD9Sy09KRaIBkbWUCkMhf8reLTHTkGoayuHB1IxXxSM+c3Briauous/AKDwkpxw9O8eo/VPU0Wepzaqkx5VxZ2iEHL856+rhXURSsT741wX7wQPY9rouaGpahrUsp0rjb5tX60iJEYqlzbaB3dMakhrBmxr1dSc3dteXr6aVrkSqtz0oex5hBIA7g1DYPE5JQlqgRE1+BLNFctvEwnhA0zwB9nPDD/R2KtrFHxNYDT/HbMRJz1qIJ9wm8Pf6E9SX8rfZ1NDQ3M6QAzayPFSs9sKbhVZ6ZwDT5etiKOIerlqy5am+E7eHE44dnqIh3iz9TQ0y4HLhBgAfnY1b3REmh4pgyPwGOOmxfg21yyddRbWIRf3hX801yAgJMGa377SXQJ6lQxdDS8EcQiZwaEVwr9LBEJeMFaUOqi8= 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: <linux-mm.kvack.org> |
Series |
Introduce Copy-On-Write to Page Table
|
expand
|
diff --git a/mm/gup.c b/mm/gup.c index f45a3a5be53a..e702c0800105 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -545,7 +545,8 @@ static struct page *follow_page_pte(struct vm_area_struct *vma, if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) == (FOLL_PIN | FOLL_GET))) return ERR_PTR(-EINVAL); - if (unlikely(pmd_bad(*pmd))) + /* COW-ed PTE has write protection which can trigger pmd_bad(). */ + if (unlikely(pmd_write(*pmd) && pmd_bad(*pmd))) return no_page_table(vma, flags); ptep = pte_offset_map_lock(mm, pmd, address, &ptl); @@ -588,6 +589,11 @@ static struct page *follow_page_pte(struct vm_area_struct *vma, if (is_zero_pfn(pte_pfn(pte))) { page = pte_page(pte); } else { + if (test_bit(MMF_COW_PTE, &mm->flags) && + !pmd_write(*pmd)) { + page = ERR_PTR(-EMLINK); + goto out; + } ret = follow_pfn_pte(vma, address, ptep, flags); page = ERR_PTR(ret); goto out;
In most of cases, GUP will not modify the page table, excluding follow_pfn_pte(). To deal with COW PTE, Trigger the break COW PTE fault before calling follow_pfn_pte(). Signed-off-by: Chih-En Lin <shiyn.lin@gmail.com> --- mm/gup.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)