FAILED: patch "[PATCH] LoongArch: Use accessors to page table entries instead of" failed to apply to 6.10-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 6.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.10.y
git checkout FETCH_HEAD
git cherry-pick -x 4574815abf43e2bf05643e1b3f7a2e5d6df894f0
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024091025-freeway-unlocked-8c52@gregkh' --subject-prefix 'PATCH 6.10.y' HEAD^..
Possible dependencies:
4574815abf43 ("LoongArch: Use accessors to page table entries instead of direct dereference")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4574815abf43e2bf05643e1b3f7a2e5d6df894f0 Mon Sep 17 00:00:00 2001
From: Huacai Chen <[email protected]>
Date: Wed, 7 Aug 2024 17:37:11 +0800
Subject: [PATCH] LoongArch: Use accessors to page table entries instead of
direct dereference
As very well explained in commit 20a004e7b017cce282 ("arm64: mm: Use READ_ONCE/WRITE_ONCE when accessing page tables"), an architecture whose page table walker can modify the PTE in parallel must use READ_ONCE()/ WRITE_ONCE() macro to avoid any compiler transformation.
So apply that to LoongArch which is such an architecture, in order to avoid potential problems.
Similar to commit edf955647269422e ("riscv: Use accessors to page table entries instead of direct dereference").
arch/loongarch/include/asm/hugetlb.h +2 -2
@@ -34,7 +34,7 @@ static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) { pte_t clear; -pte_t pte = *ptep; +pte_t pte =ptep_get (ptep);pte_val (clear) = (unsigned long )invalid_pte_table;set_pte_at (mm, addr, ptep, clear);
@@ -65,7 +65,7 @@ static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, pte_t *ptep, pte_t pte, int dirty) { - int changed = !pte_same(*ptep, pte); + int changed = !pte_same(ptep_get(ptep), pte);if (changed) {set_pte_at (vma->vm_mm, addr, ptep, pte);
arch/loongarch/include/asm/kfence.h +3 -3
@@ -53,13 +53,13 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) {pte_t *pte =virt_to_kpte (addr); -if (WARN_ON (!pte) ||pte_none (*pte)) +if (WARN_ON (!pte) ||pte_none (ptep_get (pte)))return false;if (protect) -set_pte (pte,__pte (pte_val (*pte) & ~(_PAGE_VALID | _PAGE_PRESENT))); +set_pte (pte,__pte (pte_val (ptep_get (pte)) & ~(_PAGE_VALID | _PAGE_PRESENT)));else -set_pte (pte,__pte (pte_val (*pte) | (_PAGE_VALID | _PAGE_PRESENT))); +set_pte (pte,__pte (pte_val (ptep_get (pte)) | (_PAGE_VALID | _PAGE_PRESENT)));preempt_disable ();local_flush_tlb_one (addr);
arch/loongarch/include/asm/pgtable.h +30 -20
112 lines not on this page · raw message
arch/loongarch/kvm/mmu.c +4 -4
@@ -714,19 +714,19 @@ static int host_pfn_mapping_level(struct kvm *kvm, gfn_t gfn,* value) and then p*d_offset() walks into the target huge page instead * of the old page table (sees the new value). */ - pgd =READ_ONCE (*pgd_offset (kvm->mm, hva)); + pgd =pgdp_get (pgd_offset (kvm->mm, hva));if (pgd_none (pgd)) goto out; - p4d =READ_ONCE (*p4d_offset (&pgd, hva)); + p4d =p4dp_get (p4d_offset (&pgd, hva));if (p4d_none (p4d) || !p4d_present (p4d)) goto out; - pud =READ_ONCE (*pud_offset (&p4d, hva)); + pud =pudp_get (pud_offset (&p4d, hva));if (pud_none (pud) || !pud_present (pud)) goto out; - pmd =READ_ONCE (*pmd_offset (&pud, hva)); + pmd =pmdp_get (pmd_offset (&pud, hva));if (pmd_none (pmd) || !pmd_present (pmd)) goto out;
arch/loongarch/mm/hugetlbpage.c +3 -3
@@ -39,11 +39,11 @@ pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr,pmd_t *pmd =NULL ; pgd =pgd_offset (mm, addr); -if (pgd_present (*pgd)) { +if (pgd_present (pgdp_get (pgd))) { p4d =p4d_offset (pgd, addr); -if (p4d_present (*p4d)) { +if (p4d_present (p4dp_get (p4d))) { pud =pud_offset (p4d, addr); -if (pud_present (*pud)) +if (pud_present (pudp_get (pud))) pmd =pmd_offset (pud, addr); } }
arch/loongarch/mm/init.c +5 -5
@@ -141,7 +141,7 @@ void __meminit vmemmap_set_pmd(pmd_t *pmd, void *p, int node,int __meminit vmemmap_check_pmd (pmd_t *pmd,int node,unsigned long addr,unsigned long next) { -int huge =pmd_val (*pmd) & _PAGE_HUGE; +int huge =pmd_val (pmdp_get (pmd)) & _PAGE_HUGE;if (huge)vmemmap_verify ((pte_t *)pmd, node, addr, next);
@@ -173,7 +173,7 @@ pte_t * __init populate_kernel_pte(unsigned long addr)pud_t *pud;pmd_t *pmd; -if (p4d_none (*p4d)) { +if (p4d_none (p4dp_get (p4d))) { pud =memblock_alloc (PAGE_SIZE ,PAGE_SIZE );if (!pud)panic ("%s: Failed to allocate memory\n" , __func__);
@@ -184,7 +184,7 @@ pte_t * __init populate_kernel_pte(unsigned long addr) } pud =pud_offset (p4d, addr); -if (pud_none (*pud)) { +if (pud_none (pudp_get (pud))) { pmd =memblock_alloc (PAGE_SIZE ,PAGE_SIZE );if (!pmd)panic ("%s: Failed to allocate memory\n" , __func__);
@@ -195,7 +195,7 @@ pte_t * __init populate_kernel_pte(unsigned long addr) } pmd =pmd_offset (pud, addr); -if (!pmd_present (*pmd)) { +if (!pmd_present (pmdp_get (pmd))) {pte_t *pte; pte =memblock_alloc (PAGE_SIZE ,PAGE_SIZE );
@@ -216,7 +216,7 @@ void __init __set_fixmap(enum fixed_addresses idx,BUG_ON (idx <=FIX_HOLE || idx >= __end_of_fixed_addresses); ptep =populate_kernel_pte (addr); -if (!pte_none (*ptep)) { +if (!pte_none (ptep_get (ptep))) {pte_ERROR (*ptep);return ; }
arch/loongarch/mm/kasan_init.c +5 -5
@@ -105,7 +105,7 @@ static phys_addr_t __init kasan_alloc_zeroed_page(int node)static pte_t *__init kasan_pte_offset (pmd_t *pmdp,unsigned long addr,int node,bool early) { -if (__pmd_none (early,READ_ONCE (*pmdp))) { +if (__pmd_none (early,pmdp_get (pmdp))) {phys_addr_t pte_phys = early ?__pa_symbol (kasan_early_shadow_pte) :kasan_alloc_zeroed_page (node);if (!early)
@@ -118,7 +118,7 @@ static pte_t *__init kasan_pte_offset(pmd_t *pmdp, unsigned long addr, int node,static pmd_t *__init kasan_pmd_offset (pud_t *pudp,unsigned long addr,int node,bool early) { -if (__pud_none (early,READ_ONCE (*pudp))) { +if (__pud_none (early,pudp_get (pudp))) {phys_addr_t pmd_phys = early ?__pa_symbol (kasan_early_shadow_pmd) :kasan_alloc_zeroed_page (node);if (!early)
@@ -131,7 +131,7 @@ static pmd_t *__init kasan_pmd_offset(pud_t *pudp, unsigned long addr, int node,static pud_t *__init kasan_pud_offset (p4d_t *p4dp,unsigned long addr,int node,bool early) { -if (__p4d_none (early,READ_ONCE (*p4dp))) { +if (__p4d_none (early,p4dp_get (p4dp))) {phys_addr_t pud_phys = early ?__pa_symbol (kasan_early_shadow_pud) :kasan_alloc_zeroed_page (node);if (!early)
@@ -154,7 +154,7 @@ static void __init kasan_pte_populate(pmd_t *pmdp, unsigned long addr, : kasan_alloc_zeroed_page(node); next = addr +PAGE_SIZE ;set_pte (ptep,pfn_pte (__phys_to_pfn (page_phys),PAGE_KERNEL )); - }while (ptep++, addr = next, addr != end &&__pte_none (early,READ_ONCE (*ptep))); + }while (ptep++, addr = next, addr != end &&__pte_none (early,ptep_get (ptep))); } static void __init kasan_pmd_populate(pud_t *pudp, unsigned long addr,
@@ -166,7 +166,7 @@ static void __init kasan_pmd_populate(pud_t *pudp, unsigned long addr,do { next =pmd_addr_end (addr, end);kasan_pte_populate (pmdp, addr, next, node, early); - }while (pmdp++, addr = next, addr != end &&__pmd_none (early,READ_ONCE (*pmdp))); + }while (pmdp++, addr = next, addr != end &&__pmd_none (early,pmdp_get (pmdp))); } static void __init kasan_pud_populate(p4d_t *p4dp, unsigned long addr,
arch/loongarch/mm/pgtable.c +1 -1
@@ -128,7 +128,7 @@ pmd_t mk_pmd(struct page *page, pgprot_t prot)void set_pmd_at (struct mm_struct *mm,unsigned long addr,pmd_t *pmdp,pmd_t pmd) { - *pmdp = pmd; +WRITE_ONCE (*pmdp, pmd);flush_tlb_all (); }
Greg KH
maintainerQuoted 5 lines · On Tue, Sep 10, 2024 at 10:55:25AM +0200, [email protected] wrote:
The patch below does not apply to the 6.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Oops, nope, I got this to work in 6.10.y, but not in 6.6.y