From: Huacai Chen <chenhuacai@kernel.org>
To: Bibo Mao <maobibo@loongson.cn>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@redhat.com>,
Barry Song <baohua@kernel.org>,
loongarch@lists.linux.dev, linux-kernel@vger.kernel.org,
kasan-dev@googlegroups.com, linux-mm@kvack.org
Subject: Re: [PATCH v2 3/3] LoongArch: Remove pte buddy set with set_pte and pte_clear function
Date: Mon, 14 Oct 2024 14:33:24 +0800 [thread overview]
Message-ID: <CAAhV-H4-OQ4rmyztsRVsOuPra7xbzy9vcckerP8NG-7ti8jKwg@mail.gmail.com> (raw)
In-Reply-To: <20241014035855.1119220-4-maobibo@loongson.cn>
Hi, Bibo,
The old code tries to fix the same problem in the first patch, so this
patch can also be squashed to the first one (and it is small enough
now).
Others look good to me.
Huacai
On Mon, Oct 14, 2024 at 11:59 AM Bibo Mao <maobibo@loongson.cn> wrote:
>
> For kernel address space area on LoongArch system, both two consecutive
> page table entries should be enabled with PAGE_GLOBAL bit. So with
> function set_pte() and pte_clear(), pte buddy entry is checked and set
> besides its own pte entry. However it is not atomic operation to set both
> two pte entries, there is problem with test_vmalloc test case.
>
> With previous patch, all page table entries are set with PAGE_GLOBAL
> bit at beginning. Only its own pte entry need update with function
> set_pte() and pte_clear(), nothing to do with pte buddy entry.
>
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
> ---
> arch/loongarch/include/asm/pgtable.h | 35 ++++------------------------
> 1 file changed, 5 insertions(+), 30 deletions(-)
>
> diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h
> index 22e3a8f96213..bc29c95b1710 100644
> --- a/arch/loongarch/include/asm/pgtable.h
> +++ b/arch/loongarch/include/asm/pgtable.h
> @@ -325,40 +325,15 @@ extern void paging_init(void);
> static inline void set_pte(pte_t *ptep, pte_t pteval)
> {
> WRITE_ONCE(*ptep, pteval);
> -
> - if (pte_val(pteval) & _PAGE_GLOBAL) {
> - pte_t *buddy = ptep_buddy(ptep);
> - /*
> - * Make sure the buddy is global too (if it's !none,
> - * it better already be global)
> - */
> - if (pte_none(ptep_get(buddy))) {
> -#ifdef CONFIG_SMP
> - /*
> - * For SMP, multiple CPUs can race, so we need
> - * to do this atomically.
> - */
> - __asm__ __volatile__(
> - __AMOR "$zero, %[global], %[buddy] \n"
> - : [buddy] "+ZB" (buddy->pte)
> - : [global] "r" (_PAGE_GLOBAL)
> - : "memory");
> -
> - DBAR(0b11000); /* o_wrw = 0b11000 */
> -#else /* !CONFIG_SMP */
> - WRITE_ONCE(*buddy, __pte(pte_val(ptep_get(buddy)) | _PAGE_GLOBAL));
> -#endif /* CONFIG_SMP */
> - }
> - }
> }
>
> static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
> {
> - /* Preserve global status for the pair */
> - if (pte_val(ptep_get(ptep_buddy(ptep))) & _PAGE_GLOBAL)
> - set_pte(ptep, __pte(_PAGE_GLOBAL));
> - else
> - set_pte(ptep, __pte(0));
> + pte_t pte;
> +
> + pte = ptep_get(ptep);
> + pte_val(pte) &= _PAGE_GLOBAL;
> + set_pte(ptep, pte);
> }
>
> #define PGD_T_LOG2 (__builtin_ffs(sizeof(pgd_t)) - 1)
> --
> 2.39.3
>
>
prev parent reply other threads:[~2024-10-14 6:33 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-14 3:58 [PATCH v2 0/3] LoongArch: Fix vmalloc test issue Bibo Mao
2024-10-14 3:58 ` [PATCH v2 1/3] LoongArch: Set initial pte entry with PAGE_GLOBAL for kernel space Bibo Mao
2024-10-18 3:14 ` Huacai Chen
2024-10-18 3:44 ` maobibo
2024-10-18 4:11 ` Huacai Chen
2024-10-18 4:16 ` maobibo
2024-10-18 4:23 ` Huacai Chen
2024-10-18 6:23 ` maobibo
2024-10-18 6:32 ` Huacai Chen
2024-10-21 1:22 ` maobibo
2024-10-21 10:13 ` Huacai Chen
2024-10-22 1:39 ` maobibo
2024-10-22 1:56 ` Huacai Chen
2024-10-14 3:58 ` [PATCH v2 2/3] LoongArch: Add barrier between set_pte and memory access Bibo Mao
2024-10-14 6:31 ` Huacai Chen
2024-10-15 2:53 ` maobibo
2024-10-15 12:27 ` Huacai Chen
2024-10-16 6:09 ` maobibo
2024-10-16 7:30 ` Huacai Chen
2024-10-14 3:58 ` [PATCH v2 3/3] LoongArch: Remove pte buddy set with set_pte and pte_clear function Bibo Mao
2024-10-14 6:33 ` Huacai Chen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAAhV-H4-OQ4rmyztsRVsOuPra7xbzy9vcckerP8NG-7ti8jKwg@mail.gmail.com \
--to=chenhuacai@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=david@redhat.com \
--cc=kasan-dev@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=loongarch@lists.linux.dev \
--cc=maobibo@loongson.cn \
--cc=ryabinin.a.a@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox