Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.2/patches/2225614/?format=api
{ "id": 2225614, "url": "http://patchwork.ozlabs.org/api/1.2/patches/2225614/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260421092457.37649-7-cuiyunhui@bytedance.com/", "project": { "id": 70, "url": "http://patchwork.ozlabs.org/api/1.2/projects/70/?format=api", "name": "Linux KVM RISC-V", "link_name": "kvm-riscv", "list_id": "kvm-riscv.lists.infradead.org", "list_email": "kvm-riscv@lists.infradead.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "http://lists.infradead.org/pipermail/kvm-riscv/", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260421092457.37649-7-cuiyunhui@bytedance.com>", "list_archive_url": null, "date": "2026-04-21T09:24:56", "name": "[6/7] riscv: batch write-protect contiguous PTE ranges", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "f753a2aaca67506826c2fb65a30db1a572f01ec0", "submitter": { "id": 88211, "url": "http://patchwork.ozlabs.org/api/1.2/people/88211/?format=api", "name": "Yunhui Cui", "email": "cuiyunhui@bytedance.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/kvm-riscv/patch/20260421092457.37649-7-cuiyunhui@bytedance.com/mbox/", "series": [ { "id": 500766, "url": "http://patchwork.ozlabs.org/api/1.2/series/500766/?format=api", "web_url": "http://patchwork.ozlabs.org/project/kvm-riscv/list/?series=500766", "date": "2026-04-21T09:24:50", "name": "riscv: add Svnapot-based contiguous PTE support", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/500766/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2225614/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2225614/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=OAwZkYEw;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256\n header.s=desiato.20200630 header.b=kH9kbgkR;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=bytedance.com header.i=@bytedance.com\n header.a=rsa-sha256 header.s=google header.b=c8ShjUpt;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0H6V1S6nz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 19:26:26 +1000 (AEST)", "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wF7NA-00000008KnD-2dR0;\n\tTue, 21 Apr 2026 09:26:24 +0000", "from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wF7N9-00000008Km7-00Az\n\tfor kvm-riscv@bombadil.infradead.org;\n\tTue, 21 Apr 2026 09:26:23 +0000", "from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035])\n\tby desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1wF7N0-00000009TtB-3H01\n\tfor kvm-riscv@lists.infradead.org;\n\tTue, 21 Apr 2026 09:26:21 +0000", "by mail-pj1-x1035.google.com with SMTP id\n 98e67ed59e1d1-354bc7c2c46so2402526a91.0\n for <kvm-riscv@lists.infradead.org>;\n Tue, 21 Apr 2026 02:26:08 -0700 (PDT)", "from L6YN4KR4K9.bytedance.net ([61.213.176.6])\n by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2b5fa9ff39csm131965105ad.4.2026.04.21.02.25.57\n (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256);\n Tue, 21 Apr 2026 02:26:05 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:\n\tMessage-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=vbTvkFbNoxYZJJZMxjz1RFLphr1j1V5IjmIZXENYFMc=; b=OAwZkYEw8ymNtJ\n\trd5suNKLgelqLNCBgWTd7cLZNRR95r1i2AQaAXWdEseQYCecs7vprE5k8yWK1ujH8UTGjGFXSF8Lt\n\tSVtKgiq+jRvHJroWvh++0YYK2ZYULrJK+zzxOU02YG/g/SfWEFrymIXeYgC5s3uQeLeAh/iPivLVx\n\tdul36gNSHVpmBRc2RJH6xdgV2M6eKD7EKNGocrhXs2Yo4NxnHMLEelmNUnsR14UGC5QRuI/QwsO/n\n\tUEt9Qpm+p4L0S36F4wP4+4rC1hupWv+R26t3S7hQ5yEebUU36Cg53zDuF5UIbMPkLN0iVdvwCWM4V\n\tYcNareB8h+AvnA7BqfPA==;", "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version\n\t:References:In-Reply-To:Message-Id:Date:Subject:To:From:Sender:Reply-To:Cc:\n\tContent-Type:Content-ID:Content-Description;\n\tbh=FJWvxx2SvBNX2CVsFvwsTk0IK3zSjjAIlJH4BJFUonM=; b=kH9kbgkRACXzHkegmI4cO+0ZNJ\n\t2Y2X0IeSGGmQOFmwrDmy+Slg7e1jHsViw8giPGgeQMmyMnfQUvq/PpQwmj8VtehtJRmNfRS1mXA5D\n\t7TdZZHC2aUg2Oi6HrHXmhjaG0kf6Dx8Mf8iPbmlLYJar8mduEaSIseBFRg87h8zE21+Q3b5X+6iL/\n\t4eurZBj/8vACjwyXw5z13R5JxIQFc/l0amIuHCaRkB4kgjAHIda9HtDLIfsY17/kCdKrAZUAxSKNM\n\tmctAixfWfreR32ftwbMDSBFeDO8bawypuhP9V/ZIUy8CAca6BPt13AzTMG1qcJszYbFc5Z/rEMh3P\n\th9fJ/PyQ==;", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=bytedance.com; s=google; t=1776763566; x=1777368366;\n darn=lists.infradead.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:from:to:cc:subject:date:message-id\n :reply-to;\n bh=FJWvxx2SvBNX2CVsFvwsTk0IK3zSjjAIlJH4BJFUonM=;\n b=c8ShjUptkJnjjVth3QZXjXfcLGnKsrhO57WghHlU9sWTeP2QUzd9wG2bHaWndqKVPt\n XV8Y2gXhQCeTR3reaANckmiBQUibiycLY4xRtHS+1Elf9pxgtlS3fQhBb2Qd7UxGf7Es\n 3YrYlcc+h0s/dxw+hW0t7k5sloUcrqTxKpEvFxfBHzoRd/pWaq+pujN41M/7b8yAl4by\n cAFdEsrTGzrDO4KdrEckZIsonDU4cIJ/IFZTZZjvGi6e7O9+pP96w8DDh7vmucF3smgA\n JGQubBNaaqSk8O3AKrc4oSCdcJwK23k5XlO+RMPW8G+wqGn0Op2ZZrBQ9R3x4YnpoH0t\n kr0g==" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776763566; x=1777368366;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=FJWvxx2SvBNX2CVsFvwsTk0IK3zSjjAIlJH4BJFUonM=;\n b=AcuJxMR9m64Y46beTNk8/WS1NU5HL/vfuCfuhEnHJ6ca9r+nXu4WY6rfLFzpGAYdQy\n D6HTL35ziCEd4H352To/OmvRzLeA5JmCfIjeEpY/gbHbHGaIQED5roaKUs4ckF3i1vj5\n M7W07qQ2XsuVo65qc9pV9zJ20rIxrzI3Cwt3bjgdOMLFXsVdUALm3ehu/mHqbeDZnqag\n 2vt7fJVWhuYwbo4r7vYPlET8wi4weLx/2Y+vqLh5fCS9qERT5fAYED7leqERCVtGcbzk\n jGP41eepOA/jzqyzY3tCGSk9InJMmE+u7RG+TO5MSzNSdpdSTYdeic07YkJxEj9rk5Sl\n CF7g==", "X-Forwarded-Encrypted": "i=1;\n AFNElJ/b//EDYCma9ZxTUEv6hdoEjGW2R0qKJ480/iAlF6FJQmqAcBmz4F5q6tziMbB1QOlJT1zBHAs2Xeo=@lists.infradead.org", "X-Gm-Message-State": "AOJu0YxmNXXM61mF3VpkKazGRuhjGs3tPoqAnnpwu7KTwOsjGN6k6L37\n\t4udY/cYs+yhMbokfHb6JqzmjBLD0Ut5k7Ss85nlvp7Aj+piSLU/LDlYTfHWnZ5fRESA=", "X-Gm-Gg": "AeBDievkd12GDN3SamthB8rNaJNDSAzR/jdfi6fgbTO8ZpPTFlz7hqUipCAE85/v3Hv\n\tVtEf7KWcZzTbQ8WZFRjV89VOPtZySSN1hKqcD8+VL9fu7L9LVqNd7960/b2NYsxlnf4iMTABA8q\n\tb4/gpGOpA3GIYbwI1spjIIKKdMDWHxY2jg9mdy47SHozPnUzpA5rDkVPNgDHZiN6F5eMahvl8lJ\n\tW+lCqM0MZKG8TWu+lxELydvMoJjc7sWwDPaDtyNfXslZsraTnRc3XhfX+rCAodPINH13FR674Ac\n\tS2BAEIMWNxw+A4wMgs+5a4leM3RF/rCd4xBKYXyblJpGKUgqOH45WUNg1gmHE2B6C8zDKySOUIN\n\t90XQEPteSxcYuOVAf3u9LS2a1JYC5r5hS/CVT59pIllIov7V2/ifhQDAtBaIRMNH/XYfhKxbrAh\n\tzt8rvU9HRlykW/hzR6if3hc6S55CoFJT+N1Uw91GvJTWNyBOgIjs5F6zWTbIQP8b734nb2DvRn2\n\tU97N7k=", "X-Received": "by 2002:a17:90b:5865:b0:35d:a557:e41 with SMTP id\n 98e67ed59e1d1-3614046f978mr18558407a91.14.1776763566317;\n Tue, 21 Apr 2026 02:26:06 -0700 (PDT)", "From": "Yunhui Cui <cuiyunhui@bytedance.com>", "To": "akpm@linux-foundation.org,\n\talex@ghiti.fr,\n\tandrew+kernel@donnellan.id.au,\n\tandreyknvl@gmail.com,\n\tanup@brainfault.org,\n\taou@eecs.berkeley.edu,\n\tapopple@nvidia.com,\n\tardb@kernel.org,\n\tatish.patra@linux.dev,\n\tbaolin.wang@linux.alibaba.com,\n\tcuiyunhui@bytedance.com,\n\tdavid@kernel.org,\n\tdebug@rivosinc.com,\n\tdjordje.todorovic@htecgroup.com,\n\tdvyukov@google.com,\n\telver@google.com,\n\tglider@google.com,\n\tilias.apalodimas@linaro.org,\n\tjunhui.liu@pigmoral.tech,\n\tkasan-dev@googlegroups.com,\n\tkees@kernel.org,\n\tkevin.brodsky@arm.com,\n\tkvm-riscv@lists.infradead.org,\n\tkvm@vger.kernel.org,\n\tlinux-efi@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tliu.xuemei1@zte.com.cn,\n\tljs@kernel.org,\n\tnamcao@linutronix.de,\n\tosalvador@suse.de,\n\tpalmer@dabbelt.com,\n\tpjw@kernel.org,\n\trmclure@linux.ibm.com,\n\trostedt@goodmis.org,\n\trppt@kernel.org,\n\tryabinin.a.a@gmail.com,\n\tsurenb@google.com,\n\tvincenzo.frascino@arm.com,\n\tvishal.moola@gmail.com,\n\twangruikang@iscas.ac.cn,\n\tzhangchunyan@iscas.ac.cn", "Subject": "[PATCH 6/7] riscv: batch write-protect contiguous PTE ranges", "Date": "Tue, 21 Apr 2026 17:24:56 +0800", "Message-Id": "<20260421092457.37649-7-cuiyunhui@bytedance.com>", "X-Mailer": "git-send-email 2.39.2 (Apple Git-143)", "In-Reply-To": "<20260421092457.37649-1-cuiyunhui@bytedance.com>", "References": "<20260421092457.37649-1-cuiyunhui@bytedance.com>", "MIME-Version": "1.0", "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ", "X-CRM114-CacheID": "sfid-20260421_102618_875974_BB4F6BF2 ", "X-CRM114-Status": "GOOD ( 14.33 )", "X-Spam-Score": "2.3 (++)", "X-Spam-Report": "Spam detection software,\n running on the system \"desiato.infradead.org\",\n has NOT identified this incoming email as spam. The original\n message has been attached to this so you can view it or label\n similar future email. If you have any questions, see\n the administrator of that system for details.\n Content preview: Hook wrprotect_ptes() into the Svnapot contpte helpers so\n write protection can preserve fully covered NAPOT blocks and only unfold\n partial\n ranges at the edges. Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com>\n --- arch/riscv/include/asm/pgtable.h | 38 +++++++++++++++++++++++++++--\n arch/riscv/mm/contpte.c\n | 42 ++++++++++++++++++++++++++++++++ 2 files change [...]\n Content analysis details: (2.3 points, 5.0 required)\n pts rule name description\n ---- ----------------------\n --------------------------------------------------\n -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no\n trust\n [2607:f8b0:4864:20:0:0:0:1035 listed in]\n [list.dnswl.org]\n -0.0 SPF_PASS SPF: sender matches SPF record\n 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record\n -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from\n author's\n domain\n -0.1 DKIM_VALID Message has at least one valid DKIM or DK\n signature\n 0.1 DKIM_SIGNED Message has a DKIM or DK signature,\n not necessarily valid\n -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from\n envelope-from domain\n 2.5 SORTED_RECIPS Recipient list is sorted by address", "X-BeenThere": "kvm-riscv@lists.infradead.org", "X-Mailman-Version": "2.1.34", "Precedence": "list", "List-Id": "<kvm-riscv.lists.infradead.org>", "List-Unsubscribe": "<http://lists.infradead.org/mailman/options/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=unsubscribe>", "List-Archive": "<http://lists.infradead.org/pipermail/kvm-riscv/>", "List-Post": "<mailto:kvm-riscv@lists.infradead.org>", "List-Help": "<mailto:kvm-riscv-request@lists.infradead.org?subject=help>", "List-Subscribe": "<http://lists.infradead.org/mailman/listinfo/kvm-riscv>,\n <mailto:kvm-riscv-request@lists.infradead.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Sender": "\"kvm-riscv\" <kvm-riscv-bounces@lists.infradead.org>", "Errors-To": "kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org" }, "content": "Hook wrprotect_ptes() into the Svnapot contpte helpers so write\nprotection can preserve fully covered NAPOT blocks and only unfold\npartial ranges at the edges.\n\nSigned-off-by: Yunhui Cui <cuiyunhui@bytedance.com>\n---\n arch/riscv/include/asm/pgtable.h | 38 +++++++++++++++++++++++++++--\n arch/riscv/mm/contpte.c | 42 ++++++++++++++++++++++++++++++++\n 2 files changed, 78 insertions(+), 2 deletions(-)", "diff": "diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h\nindex 3e6516b5a4587..db82253efb218 100644\n--- a/arch/riscv/include/asm/pgtable.h\n+++ b/arch/riscv/include/asm/pgtable.h\n@@ -813,13 +813,30 @@ __ptep_set_wrprotect(struct mm_struct *mm, unsigned long address, pte_t *ptep)\n \t * shadow stack memory is XWR = 010 and thus clearing _PAGE_WRITE will lead to\n \t * encoding 000b which is wrong encoding with V = 1. This should lead to page fault\n \t * but we dont want this wrong configuration to be set in page tables.\n+\t * Keep the entry readable when clearing write permissions so we don't create\n+\t * an invalid present encoding.\n \t */\n \tatomic_long_set((atomic_long_t *)ptep,\n-\t\t\t((pte_val(read_pte) & ~(unsigned long)_PAGE_WRITE) | _PAGE_READ));\n+\t\t\t(pte_val(read_pte) & ~(unsigned long)_PAGE_WRITE) |\n+\t\t\t_PAGE_READ);\n }\n \n #define __ptep_set_wrprotect __ptep_set_wrprotect\n \n+static inline void __wrprotect_ptes(struct mm_struct *mm,\n+\t\t\t\t unsigned long address,\n+\t\t\t\t pte_t *ptep, unsigned int nr)\n+{\n+\tfor (;;) {\n+\t\t__ptep_set_wrprotect(mm, address, ptep);\n+\t\tif (--nr == 0)\n+\t\t\tbreak;\n+\t\tptep++;\n+\t\taddress += PAGE_SIZE;\n+\t}\n+}\n+\n+#define __wrprotect_ptes __wrprotect_ptes\n static inline pte_t __ptep_clear_flush(struct vm_area_struct *vma,\n \t\t\t\t unsigned long address,\n \t\t\t\t pte_t *ptep)\n@@ -879,6 +896,8 @@ pte_t napotpte_get_and_clear_full_ptes(struct mm_struct *mm,\n void napotpte_clear_young_dirty_ptes(struct vm_area_struct *vma,\n \t\t\t\t unsigned long addr, pte_t *ptep,\n \t\t\t unsigned int nr, cydp_t flags);\n+void napotpte_wrprotect_ptes(struct mm_struct *mm, unsigned long addr,\n+\t\t\t pte_t *ptep, unsigned int nr);\n bool napotpte_ptep_set_access_flags(struct vm_area_struct *vma,\n \t\t\t\t unsigned long address, pte_t *ptep,\n \t\t\t pte_t entry, int dirty);\n@@ -1004,11 +1023,25 @@ static inline pte_t get_and_clear_full_ptes(struct mm_struct *mm,\n \treturn napotpte_get_and_clear_full_ptes(mm, addr, ptep, nr, full);\n }\n \n+#define wrprotect_ptes wrprotect_ptes\n+static inline void wrprotect_ptes(struct mm_struct *mm,\n+\t\t\t\t unsigned long address, pte_t *ptep,\n+\t\t\t\t unsigned int nr)\n+{\n+\tif (likely(nr == 1)) {\n+\t\tnapotpte_try_unfold(mm, address, ptep, __ptep_get(ptep));\n+\t\t__ptep_set_wrprotect(mm, address, ptep);\n+\t\treturn;\n+\t}\n+\n+\tnapotpte_wrprotect_ptes(mm, address, ptep, nr);\n+}\n+\n #define __HAVE_ARCH_PTEP_SET_WRPROTECT\n static inline void ptep_set_wrprotect(struct mm_struct *mm,\n \t\t\t\t unsigned long address, pte_t *ptep)\n {\n-\t__ptep_set_wrprotect(mm, address, ptep);\n+\twrprotect_ptes(mm, address, ptep, 1);\n }\n \n #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH\n@@ -1062,6 +1095,7 @@ napotpte_ptep_clear_flush_young(struct vm_area_struct *vma,\n #define clear_young_dirty_ptes\t\t\t__clear_young_dirty_ptes\n #define clear_full_ptes\t\t\t\t__clear_full_ptes\n #define get_and_clear_full_ptes\t\t\t__get_and_clear_full_ptes\n+#define wrprotect_ptes\t\t\t\t__wrprotect_ptes\n #define __HAVE_ARCH_PTEP_SET_WRPROTECT\n #define ptep_set_wrprotect\t\t\t__ptep_set_wrprotect\n #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH\ndiff --git a/arch/riscv/mm/contpte.c b/arch/riscv/mm/contpte.c\nindex 77c2a4dbd3dda..077ffa49e89d9 100644\n--- a/arch/riscv/mm/contpte.c\n+++ b/arch/riscv/mm/contpte.c\n@@ -261,6 +261,30 @@ static void napotpte_try_unfold_range(struct mm_struct *mm,\n \t}\n }\n \n+static void napotpte_try_unfold_partial(struct mm_struct *mm,\n+\t\t\t\t\tunsigned long addr, pte_t *ptep,\n+\t\t\t\t\tunsigned int nr)\n+{\n+\tpte_t pte;\n+\n+\tif (ptep != napot_align_ptep(ptep) || nr < napotpte_pte_num()) {\n+\t\tpte = READ_ONCE(*ptep);\n+\t\tif (pte_present_napot(pte))\n+\t\t\t__napotpte_try_unfold(mm, addr, ptep, pte);\n+\t}\n+\n+\tif (ptep + nr != napot_align_ptep(ptep + nr)) {\n+\t\tunsigned long last_addr;\n+\t\tpte_t *last_ptep;\n+\n+\t\tlast_addr = addr + PAGE_SIZE * (nr - 1);\n+\t\tlast_ptep = ptep + nr - 1;\n+\t\tpte = READ_ONCE(*last_ptep);\n+\t\tif (pte_present_napot(pte))\n+\t\t\t__napotpte_try_unfold(mm, last_addr, last_ptep, pte);\n+\t}\n+}\n+\n void __napotpte_try_unfold(struct mm_struct *mm, unsigned long addr,\n \t\t\t pte_t *ptep, pte_t pte)\n {\n@@ -485,6 +509,24 @@ void napotpte_clear_young_dirty_ptes(struct vm_area_struct *vma,\n }\n EXPORT_SYMBOL(napotpte_clear_young_dirty_ptes);\n \n+void napotpte_wrprotect_ptes(struct mm_struct *mm, unsigned long addr,\n+\t\t\t pte_t *ptep, unsigned int nr)\n+{\n+\tunsigned int i;\n+\n+\tif (!napot_hw_supported() || !mm_is_user(mm)) {\n+\t\tfor (i = 0; i < nr; i++, ptep++, addr += PAGE_SIZE)\n+\t\t\t__ptep_set_wrprotect(mm, addr, ptep);\n+\t\treturn;\n+\t}\n+\n+\tnapotpte_try_unfold_partial(mm, addr, ptep, nr);\n+\n+\tfor (i = 0; i < nr; i++, ptep++, addr += PAGE_SIZE)\n+\t\t__ptep_set_wrprotect(mm, addr, ptep);\n+}\n+EXPORT_SYMBOL(napotpte_wrprotect_ptes);\n+\n bool napotpte_ptep_set_access_flags(struct vm_area_struct *vma,\n \t\t\t\t unsigned long address, pte_t *ptep,\n \t\t\t\t pte_t entry, int dirty)\n", "prefixes": [ "6/7" ] }