summaryrefslogtreecommitdiffstats
path: root/arch/riscv/include/asm/pgalloc.h
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2024-03-13 18:22:15 +0000
committerMark Brown <broonie@kernel.org>2024-03-13 18:22:15 +0000
commite25293d9d92cce24aa4ca21b90064661fe4d3fcf (patch)
tree50f45e19a3e397db28b6681d9bf3975f3c6dee8e /arch/riscv/include/asm/pgalloc.h
parent23fb6bc2696119391ec3a92ccaffe50e567c515e (diff)
parente8f897f4afef0031fe618a8e94127a0934896aba (diff)
downloadlinux-stable-e25293d9d92cce24aa4ca21b90064661fe4d3fcf.tar.gz
linux-stable-e25293d9d92cce24aa4ca21b90064661fe4d3fcf.tar.bz2
linux-stable-e25293d9d92cce24aa4ca21b90064661fe4d3fcf.zip
ASoC: Merge up release
In order to apply additional fixes that depend on the fixes merged for v6.8 merge up the final release.
Diffstat (limited to 'arch/riscv/include/asm/pgalloc.h')
-rw-r--r--arch/riscv/include/asm/pgalloc.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/arch/riscv/include/asm/pgalloc.h b/arch/riscv/include/asm/pgalloc.h
index d169a4f41a2e..c80bb9990d32 100644
--- a/arch/riscv/include/asm/pgalloc.h
+++ b/arch/riscv/include/asm/pgalloc.h
@@ -95,7 +95,13 @@ static inline void pud_free(struct mm_struct *mm, pud_t *pud)
__pud_free(mm, pud);
}
-#define __pud_free_tlb(tlb, pud, addr) pud_free((tlb)->mm, pud)
+#define __pud_free_tlb(tlb, pud, addr) \
+do { \
+ if (pgtable_l4_enabled) { \
+ pagetable_pud_dtor(virt_to_ptdesc(pud)); \
+ tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(pud)); \
+ } \
+} while (0)
#define p4d_alloc_one p4d_alloc_one
static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned long addr)
@@ -124,7 +130,11 @@ static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d)
__p4d_free(mm, p4d);
}
-#define __p4d_free_tlb(tlb, p4d, addr) p4d_free((tlb)->mm, p4d)
+#define __p4d_free_tlb(tlb, p4d, addr) \
+do { \
+ if (pgtable_l5_enabled) \
+ tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(p4d)); \
+} while (0)
#endif /* __PAGETABLE_PMD_FOLDED */
static inline void sync_kernel_mappings(pgd_t *pgd)
@@ -149,7 +159,11 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
#ifndef __PAGETABLE_PMD_FOLDED
-#define __pmd_free_tlb(tlb, pmd, addr) pmd_free((tlb)->mm, pmd)
+#define __pmd_free_tlb(tlb, pmd, addr) \
+do { \
+ pagetable_pmd_dtor(virt_to_ptdesc(pmd)); \
+ tlb_remove_page_ptdesc((tlb), virt_to_ptdesc(pmd)); \
+} while (0)
#endif /* __PAGETABLE_PMD_FOLDED */