[<prev] [next>] [day] [month] [year] [list]
Message-ID: <9606AC2974BEDC1A+20240906082254.435410-1-wangyuli@uniontech.com>
Date: Fri, 6 Sep 2024 16:22:36 +0800
From: WangYuli <wangyuli@...ontech.com>
To: stable@...r.kernel.org,
gregkh@...uxfoundation.org,
sashal@...nel.org,
alexghiti@...osinc.com,
palmer@...osinc.com,
wangyuli@...ontech.com
Cc: paul.walmsley@...ive.com,
palmer@...belt.com,
aou@...s.berkeley.edu,
anup@...infault.org,
linux-riscv@...ts.infradead.org,
linux-kernel@...r.kernel.org,
rdunlap@...radead.org,
dvlachos@....forth.gr,
bhe@...hat.com,
samuel.holland@...ive.com,
guoren@...nel.org,
linux@...linux.org.uk,
linux-arm-kernel@...ts.infradead.org,
willy@...radead.org,
akpm@...ux-foundation.org,
fengwei.yin@...el.com,
prabhakar.mahadev-lad.rj@...renesas.com,
conor.dooley@...rochip.com,
glider@...gle.com,
elver@...gle.com,
dvyukov@...gle.com,
kasan-dev@...glegroups.com,
ardb@...nel.org,
linux-efi@...r.kernel.org,
atishp@...shpatra.org,
kvm@...r.kernel.org,
kvm-riscv@...ts.infradead.org,
qiaozhe@...as.ac.cn,
ryan.roberts@....com,
ryabinin.a.a@...il.com,
andreyknvl@...il.com,
vincenzo.frascino@....com,
namcao@...utronix.de
Subject: [PATCH 6.6 1/4] riscv: Use WRITE_ONCE() when setting page table entries
From: Alexandre Ghiti <alexghiti@...osinc.com>
[ Upstream commit c30fa83b49897e708a52e122dd10616a52a4c82b ]
To avoid any compiler "weirdness" when accessing page table entries which
are concurrently modified by the HW, let's use WRITE_ONCE() macro
(commit 20a004e7b017 ("arm64: mm: Use READ_ONCE/WRITE_ONCE when accessing
page tables") gives a great explanation with more details).
Signed-off-by: Alexandre Ghiti <alexghiti@...osinc.com>
Link: https://lore.kernel.org/r/20231213203001.179237-2-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@...osinc.com>
Signed-off-by: WangYuli <wangyuli@...ontech.com>
---
arch/riscv/include/asm/pgtable-64.h | 6 +++---
arch/riscv/include/asm/pgtable.h | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h
index 7a5097202e15..a65a352dcfbf 100644
--- a/arch/riscv/include/asm/pgtable-64.h
+++ b/arch/riscv/include/asm/pgtable-64.h
@@ -198,7 +198,7 @@ static inline int pud_user(pud_t pud)
static inline void set_pud(pud_t *pudp, pud_t pud)
{
- *pudp = pud;
+ WRITE_ONCE(*pudp, pud);
}
static inline void pud_clear(pud_t *pudp)
@@ -274,7 +274,7 @@ static inline unsigned long _pmd_pfn(pmd_t pmd)
static inline void set_p4d(p4d_t *p4dp, p4d_t p4d)
{
if (pgtable_l4_enabled)
- *p4dp = p4d;
+ WRITE_ONCE(*p4dp, p4d);
else
set_pud((pud_t *)p4dp, (pud_t){ p4d_val(p4d) });
}
@@ -347,7 +347,7 @@ static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
static inline void set_pgd(pgd_t *pgdp, pgd_t pgd)
{
if (pgtable_l5_enabled)
- *pgdp = pgd;
+ WRITE_ONCE(*pgdp, pgd);
else
set_p4d((p4d_t *)pgdp, (p4d_t){ pgd_val(pgd) });
}
diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h
index 719c3041ae1c..f8e72df4113a 100644
--- a/arch/riscv/include/asm/pgtable.h
+++ b/arch/riscv/include/asm/pgtable.h
@@ -248,7 +248,7 @@ static inline int pmd_leaf(pmd_t pmd)
static inline void set_pmd(pmd_t *pmdp, pmd_t pmd)
{
- *pmdp = pmd;
+ WRITE_ONCE(*pmdp, pmd);
}
static inline void pmd_clear(pmd_t *pmdp)
@@ -515,7 +515,7 @@ static inline int pte_same(pte_t pte_a, pte_t pte_b)
*/
static inline void set_pte(pte_t *ptep, pte_t pteval)
{
- *ptep = pteval;
+ WRITE_ONCE(*ptep, pteval);
}
void flush_icache_pte(pte_t pte);
--
2.43.4
Powered by blists - more mailing lists