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 7409DCED24D for ; Tue, 8 Oct 2024 02:11:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BDEC16B0083; Mon, 7 Oct 2024 22:11:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B681E6B0085; Mon, 7 Oct 2024 22:11:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9BA506B0088; Mon, 7 Oct 2024 22:11:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 747766B0083 for ; Mon, 7 Oct 2024 22:11:42 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A3018A18E7 for ; Tue, 8 Oct 2024 02:11:40 +0000 (UTC) X-FDA: 82648808802.30.4B0DBC2 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf09.hostedemail.com (Postfix) with ESMTP id 09F8914000F for ; Tue, 8 Oct 2024 02:11:39 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sJVgAncT; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of chenhuacai@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728353390; a=rsa-sha256; cv=none; b=ETWt1x/NQF+cHrDlbUlNUgdEjG4XCO9uLFPiPCULKetX9uTzigh3mnNnUPHVNvbVdzydmg lO0Cj90baXdeuQDs90In0ZIrG5ZApS4LS0N71QHfEvAlD+VURwaviaE+yofPA0Kd1DoM76 9a4ImvT9jKMelG1+vbdWtdATwPCAIYA= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sJVgAncT; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of chenhuacai@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=chenhuacai@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728353390; 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=DT0ywLFKrUO3ulJ9Jiduz32szXhm1G71Y1Xb7Yo1Js8=; b=sldlluNxgOXDg4rht3lgLfJzyj3tePSDTTvBMbvZIrk0ilwrQ8+IL7xRsfnRk0x+U/Iarv CL4vZip5LWomkivwOMmJ0S9FrPosL47J6S/luIoBNoweTDV9jI3XJmS77iWEzWj+KrHo6U qSYW9sQeu/NXw2s9bjaKkk0/+mPp9Tg= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id B908B5C5A3F for ; Tue, 8 Oct 2024 02:11:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A5E39C4CECF for ; Tue, 8 Oct 2024 02:11:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1728353498; bh=ecuISJm/aWL+tNMQ+twAVlW+4RZvWpoN2srrbXkDB94=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=sJVgAncTPsJH0dYu/FY7tpoM13FlZrkcGW302R2qV3rAtntuHnx6b6IBtsoGqJfUK OJlF20yd3fT8v8p+RPUvLVZ1RAMX5W6IbxX8tZagSwZOA/94MMpuD4+qFDEILoEjsf P9uAjzPBaX291VACffb+ISH0H3TDsmmxM/gNcXrwWMJ0mwOhLF9F36oQ6KMq+Kl+J3 cl4KezTj+ksZUrr54Ao44lrKdmPEUpk3T3kJ7LEHkgZvFjg/8ZeTWGIRfWaPxyNycf uEqf34myc+g6AkPGGZi/bTzkGCJuh9wf939s4XdMc4f/DEpE3N6CmVgYLon7hKR9NJ ZKCT4YfZMpMYg== Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-37ce8458ae3so4654021f8f.1 for ; Mon, 07 Oct 2024 19:11:38 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCWznbKJlfg2Hg+1XwjQ3Ong0gpiwmiluF1FHK3W22J3+2WEMUG1G24BAgzBQsqEwnTVagQ95VKpxA==@kvack.org X-Gm-Message-State: AOJu0YxRuEwSt2OjcShiuYi8BKjqUdD2q0lpV6d6pmqDUFBGU2e9UD1N JYu41aRdi8vXW5Sl9XBYQvVm02uH4SxOQwA6RnEiFusiQLQDnvTOVOv55wEF3ubn/94jP/0U2Yp GH3dv2/e5Tt0GZfc/ohGhgCBPsRE= X-Google-Smtp-Source: AGHT+IG9/HXDQPVy3roiGpnpx5nYoWEmk19PPS8Q+OmkGvZ1j1NxJVVRW61nrohcbFPxLB5t6MVKLRvfuhF1lJEIdu8= X-Received: by 2002:a5d:6e0a:0:b0:374:ce15:9995 with SMTP id ffacd0b85a97d-37d0e78253cmr10508015f8f.34.1728353497103; Mon, 07 Oct 2024 19:11:37 -0700 (PDT) MIME-Version: 1.0 References: <20241007062858.44248-1-rppt@kernel.org> <20241007062858.44248-6-rppt@kernel.org> In-Reply-To: <20241007062858.44248-6-rppt@kernel.org> From: Huacai Chen Date: Tue, 8 Oct 2024 10:11:25 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 5/8] arch: introduce set_direct_map_valid_noflush() To: Mike Rapoport Cc: Andrew Morton , Andreas Larsson , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Brian Cain , Catalin Marinas , Christoph Hellwig , Christophe Leroy , Dave Hansen , Dinh Nguyen , Geert Uytterhoeven , Guo Ren , Helge Deller , Ingo Molnar , Johannes Berg , John Paul Adrian Glaubitz , Kent Overstreet , "Liam R. Howlett" , Luis Chamberlain , Mark Rutland , Masami Hiramatsu , Matt Turner , Max Filippov , Michael Ellerman , Michal Simek , Oleg Nesterov , Palmer Dabbelt , Peter Zijlstra , Richard Weinberger , Russell King , Song Liu , Stafford Horne , Steven Rostedt , Thomas Bogendoerfer , Thomas Gleixner , Uladzislau Rezki , Vineet Gupta , Will Deacon , bpf@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-um@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev, sparclinux@vger.kernel.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 09F8914000F X-Stat-Signature: ab5fxg8jr695odik6yc8i69nydcf786u X-Rspam-User: X-HE-Tag: 1728353499-35312 X-HE-Meta: U2FsdGVkX181SMeRdTfZxze0qOjnpYwxj1ArLRalFwemUtcynUOBTuYmDEC0s1RYWB4FH6NnBThVK3/xU/aWWXJFNVzmc8vzbDq2Cc7eDhx58js9llThCuAXvFW2/y25s0Qdyn5tHYFp9AUmjVU+qY/mSEnCT1v97GpYuhZdQpsJbrMLbCE0yCfJCh2D+Z23eMtvasXyPJ6ZqUCc32jSm8WTUusG3QuFhCd/GKNYcyfelt4O9jOAQzepa0BfT4kt0pFmqRUrxjW0f7sJlqSfY+qn1ZV88KMmzkSGUSJYq2HycRI4k5IBLr42xXgfTEwPltslhTHorY+aNuY+iBmcdE2cZRC/MCWEEkYNo79GqdAK/j5R4cND6xdTv0WS5tOyaY8MXOqJl25/qga3azG7b6jgrB5rrpty8WiK//mgAyYOrO5YFJ38Q2NWcm5M0BQt6g3jb90nZS26Oexl8zzDT0Lu7JWxDMIqIBGpFcIgdOaQrM1jYwi4TxCX2vMZh47pzGL9xxYq2zgGBfpg85U5F/q1nrw8Am7NC+cJMZz2HjiHoFobdnTB7NWWee7IJw06D7xlVeNITDcMcLp7WmIcnXw67R7h3czWYU9zf6fVmcVyhlcx900xo+xAHfCx9NRI8nt9rKZ/yDSOcC3bQVjVeQqs7FMXIcYZkk2xP2RR0YgPvAr4sodDigu2ceFMssCyqtHTigO87maepGgKxG8bV51cQHLq5kzrWA/BcG7Z2bmnEJMF9jZBjgYrA20JrlXh/R0BX2L4b/L0aG+NC6/J0vRcsljoUtgKFcR1UPC9381vOzoNbxyzTNldBAPdr437auf6zZX+Gn/7NUW7fPVHd8pbp8ZdlAaEOyou9WAf+4G7aybsk4CWc/KQfUVYH2rlPmeR8rOQcXrYF5lpl6kD9ij6WR0Kwck6h8a8YPYNYM6slK8e4Swj/T/bfY1WFBQXBU1nx2T7xCCHavldEl9 4M5vb0JG WjEqO8hk2kISF2jlVGB96+cJU6Uq4G6cdLGd9Yh9vdVZUV8KEY7e6n+dKOcrg+AIjG90n9HpLsadicTLyqBOtA4Xe9n4aROszmncdqjClMm7+XhIOUX7xFSSrVe8jOxT7gE2phnxz2kfL5Qi4KKXclIo6NvN1dE/PZ4Rlj1W7gpfgpdBqqKRqyyKrS06o6Eqo976gEU7cpWF5Dg8IQJw6t6FQy/AhxfkTXY7bQcLTTbahTVDSHD8K8KifLJdAzMkBYqd8SG9L38VabNkKwwrS8lyOpHpcm0uKE6/XUlgxCWIMcJ6l2xgQ5en8K0C19fDC0OudpzIKbaUxGJoSBWJAYFwesQiVwgsMR4Fd 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: Hi, Mike, On Mon, Oct 7, 2024 at 2:30=E2=80=AFPM Mike Rapoport wrot= e: > > From: "Mike Rapoport (Microsoft)" > > Add an API that will allow updates of the direct/linear map for a set of > physically contiguous pages. > > It will be used in the following patches. > > Signed-off-by: Mike Rapoport (Microsoft) > --- > arch/arm64/include/asm/set_memory.h | 1 + > arch/arm64/mm/pageattr.c | 10 ++++++++++ > arch/loongarch/include/asm/set_memory.h | 1 + > arch/loongarch/mm/pageattr.c | 21 +++++++++++++++++++++ > arch/riscv/include/asm/set_memory.h | 1 + > arch/riscv/mm/pageattr.c | 15 +++++++++++++++ > arch/s390/include/asm/set_memory.h | 1 + > arch/s390/mm/pageattr.c | 11 +++++++++++ > arch/x86/include/asm/set_memory.h | 1 + > arch/x86/mm/pat/set_memory.c | 8 ++++++++ > include/linux/set_memory.h | 6 ++++++ > 11 files changed, 76 insertions(+) > > diff --git a/arch/arm64/include/asm/set_memory.h b/arch/arm64/include/asm= /set_memory.h > index 917761feeffd..98088c043606 100644 > --- a/arch/arm64/include/asm/set_memory.h > +++ b/arch/arm64/include/asm/set_memory.h > @@ -13,6 +13,7 @@ int set_memory_valid(unsigned long addr, int numpages, = int enable); > > int set_direct_map_invalid_noflush(struct page *page); > int set_direct_map_default_noflush(struct page *page); > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid); > bool kernel_page_present(struct page *page); > > #endif /* _ASM_ARM64_SET_MEMORY_H */ > diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c > index 0e270a1c51e6..01225900293a 100644 > --- a/arch/arm64/mm/pageattr.c > +++ b/arch/arm64/mm/pageattr.c > @@ -192,6 +192,16 @@ int set_direct_map_default_noflush(struct page *page= ) > PAGE_SIZE, change_page_range, &data); > } > > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid) > +{ > + unsigned long addr =3D (unsigned long)page_address(page); > + > + if (!can_set_direct_map()) > + return 0; > + > + return set_memory_valid(addr, nr, valid); > +} > + > #ifdef CONFIG_DEBUG_PAGEALLOC > void __kernel_map_pages(struct page *page, int numpages, int enable) > { > diff --git a/arch/loongarch/include/asm/set_memory.h b/arch/loongarch/inc= lude/asm/set_memory.h > index d70505b6676c..55dfaefd02c8 100644 > --- a/arch/loongarch/include/asm/set_memory.h > +++ b/arch/loongarch/include/asm/set_memory.h > @@ -17,5 +17,6 @@ int set_memory_rw(unsigned long addr, int numpages); > bool kernel_page_present(struct page *page); > int set_direct_map_default_noflush(struct page *page); > int set_direct_map_invalid_noflush(struct page *page); > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid); > > #endif /* _ASM_LOONGARCH_SET_MEMORY_H */ > diff --git a/arch/loongarch/mm/pageattr.c b/arch/loongarch/mm/pageattr.c > index ffd8d76021d4..f14b40c968b4 100644 > --- a/arch/loongarch/mm/pageattr.c > +++ b/arch/loongarch/mm/pageattr.c > @@ -216,3 +216,24 @@ int set_direct_map_invalid_noflush(struct page *page= ) > > return __set_memory(addr, 1, __pgprot(0), __pgprot(_PAGE_PRESENT = | _PAGE_VALID)); > } > + > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid) > +{ > + unsigned long addr =3D (unsigned long)page_address(page); > + pgprot_t set, clear; > + > + return __set_memory((unsigned long)page_address(page), nr, set, c= lear); This line should be removed. Huacai > + > + if (addr < vm_map_base) > + return 0; > + > + if (valid) { > + set =3D PAGE_KERNEL; > + clear =3D __pgprot(0); > + } else { > + set =3D __pgprot(0); > + clear =3D __pgprot(_PAGE_PRESENT | _PAGE_VALID); > + } > + > + return __set_memory(addr, 1, set, clear); > +} > diff --git a/arch/riscv/include/asm/set_memory.h b/arch/riscv/include/asm= /set_memory.h > index ab92fc84e1fc..ea263d3683ef 100644 > --- a/arch/riscv/include/asm/set_memory.h > +++ b/arch/riscv/include/asm/set_memory.h > @@ -42,6 +42,7 @@ static inline int set_kernel_memory(char *startp, char = *endp, > > int set_direct_map_invalid_noflush(struct page *page); > int set_direct_map_default_noflush(struct page *page); > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid); > bool kernel_page_present(struct page *page); > > #endif /* __ASSEMBLY__ */ > diff --git a/arch/riscv/mm/pageattr.c b/arch/riscv/mm/pageattr.c > index 271d01a5ba4d..d815448758a1 100644 > --- a/arch/riscv/mm/pageattr.c > +++ b/arch/riscv/mm/pageattr.c > @@ -386,6 +386,21 @@ int set_direct_map_default_noflush(struct page *page= ) > PAGE_KERNEL, __pgprot(_PAGE_EXEC)); > } > > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid) > +{ > + pgprot_t set, clear; > + > + if (valid) { > + set =3D PAGE_KERNEL; > + clear =3D __pgprot(_PAGE_EXEC); > + } else { > + set =3D __pgprot(0); > + clear =3D __pgprot(_PAGE_PRESENT); > + } > + > + return __set_memory((unsigned long)page_address(page), nr, set, c= lear); > +} > + > #ifdef CONFIG_DEBUG_PAGEALLOC > static int debug_pagealloc_set_page(pte_t *pte, unsigned long addr, void= *data) > { > diff --git a/arch/s390/include/asm/set_memory.h b/arch/s390/include/asm/s= et_memory.h > index 06fbabe2f66c..240bcfbdcdce 100644 > --- a/arch/s390/include/asm/set_memory.h > +++ b/arch/s390/include/asm/set_memory.h > @@ -62,5 +62,6 @@ __SET_MEMORY_FUNC(set_memory_4k, SET_MEMORY_4K) > > int set_direct_map_invalid_noflush(struct page *page); > int set_direct_map_default_noflush(struct page *page); > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid); > > #endif > diff --git a/arch/s390/mm/pageattr.c b/arch/s390/mm/pageattr.c > index 5f805ad42d4c..4c7ee74aa130 100644 > --- a/arch/s390/mm/pageattr.c > +++ b/arch/s390/mm/pageattr.c > @@ -406,6 +406,17 @@ int set_direct_map_default_noflush(struct page *page= ) > return __set_memory((unsigned long)page_to_virt(page), 1, SET_MEM= ORY_DEF); > } > > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid) > +{ > + unsigned long flags; > + > + if (valid) > + flags =3D SET_MEMORY_DEF; > + else > + flags =3D SET_MEMORY_INV; > + > + return __set_memory((unsigned long)page_to_virt(page), nr, flags)= ; > +} > #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KFENCE) > > static void ipte_range(pte_t *pte, unsigned long address, int nr) > diff --git a/arch/x86/include/asm/set_memory.h b/arch/x86/include/asm/set= _memory.h > index 4b2abce2e3e7..cc62ef70ccc0 100644 > --- a/arch/x86/include/asm/set_memory.h > +++ b/arch/x86/include/asm/set_memory.h > @@ -89,6 +89,7 @@ int set_pages_rw(struct page *page, int numpages); > > int set_direct_map_invalid_noflush(struct page *page); > int set_direct_map_default_noflush(struct page *page); > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid); > bool kernel_page_present(struct page *page); > > extern int kernel_set_to_readonly; > diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c > index 44f7b2ea6a07..069e421c2247 100644 > --- a/arch/x86/mm/pat/set_memory.c > +++ b/arch/x86/mm/pat/set_memory.c > @@ -2444,6 +2444,14 @@ int set_direct_map_default_noflush(struct page *pa= ge) > return __set_pages_p(page, 1); > } > > +int set_direct_map_valid_noflush(struct page *page, unsigned nr, bool va= lid) > +{ > + if (valid) > + return __set_pages_p(page, nr); > + > + return __set_pages_np(page, nr); > +} > + > #ifdef CONFIG_DEBUG_PAGEALLOC > void __kernel_map_pages(struct page *page, int numpages, int enable) > { > diff --git a/include/linux/set_memory.h b/include/linux/set_memory.h > index e7aec20fb44f..3030d9245f5a 100644 > --- a/include/linux/set_memory.h > +++ b/include/linux/set_memory.h > @@ -34,6 +34,12 @@ static inline int set_direct_map_default_noflush(struc= t page *page) > return 0; > } > > +static inline int set_direct_map_valid_noflush(struct page *page, > + unsigned nr, bool valid) > +{ > + return 0; > +} > + > static inline bool kernel_page_present(struct page *page) > { > return true; > -- > 2.43.0 >