The new MMF_KERNEL flag identifies kernel-owned mm's. Checking the flag with mm_is_kernel() is preferred over comparing directly against &init_mm. No functional change, as only init_mm has MMF_KERNEL set for now. pgtable_64.h previously forward-declared init_mm to avoid pulling in mm_types.h. It seems that including mm_types.h is not causing troubles any more, so we can also use mm_is_kernel() there and drop the forward declaration. Assisted-by: Codex:GPT-5.5 Signed-off-by: Kevin Brodsky --- arch/sparc/include/asm/mmu_context_64.h | 2 +- arch/sparc/include/asm/pgtable_64.h | 6 ++---- arch/sparc/mm/init_64.c | 2 +- arch/sparc/mm/tlb.c | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/arch/sparc/include/asm/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h index 78bbacc14d2d..e88bc61aeb04 100644 --- a/arch/sparc/include/asm/mmu_context_64.h +++ b/arch/sparc/include/asm/mmu_context_64.h @@ -83,7 +83,7 @@ static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct *mm, str int cpu = smp_processor_id(); per_cpu(per_cpu_secondary_mm, cpu) = mm; - if (unlikely(mm == &init_mm)) + if (unlikely(mm_is_kernel(mm))) return; spin_lock_irqsave(&mm->context.lock, flags); diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index 0837ebbc5dce..960f8bf1ec5a 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -86,6 +86,7 @@ extern unsigned long VMALLOC_END; #define vmemmap ((struct page *)VMEMMAP_BASE) #include +#include #include bool kern_addr_valid(unsigned long addr); @@ -885,9 +886,6 @@ static inline unsigned long pud_pfn(pud_t pud) #define p4d_set(p4dp, pudp) \ (p4d_val(*(p4dp)) = (__pa((unsigned long) (pudp)))) -/* We cannot include at this point yet: */ -extern struct mm_struct init_mm; - /* Actual page table PTE updates. */ void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig, int fullmm, @@ -903,7 +901,7 @@ static void maybe_tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, * SUN4V NOTE: _PAGE_VALID is the same value in both the SUN4U * and SUN4V pte layout, so this inline test is fine. */ - if (likely(mm != &init_mm) && pte_accessible(mm, orig)) + if (likely(!mm_is_kernel(mm)) && pte_accessible(mm, orig)) tlb_batch_add(mm, vaddr, ptep, orig, fullmm, hugepage_shift); } diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c index 103db4683b16..e0b678349e3a 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c @@ -788,7 +788,7 @@ static void mmu_context_wrap(void) */ mm = per_cpu(per_cpu_secondary_mm, cpu); - if (unlikely(!mm || mm == &init_mm)) + if (unlikely(!mm || mm_is_kernel(mm))) continue; old_ctx = mm->context.sparc64_ctx_val; diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c index 6d9dd5eb1328..47083c287a94 100644 --- a/arch/sparc/mm/tlb.c +++ b/arch/sparc/mm/tlb.c @@ -179,7 +179,7 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr, static void __set_pmd_acct(struct mm_struct *mm, unsigned long addr, pmd_t orig, pmd_t pmd) { - if (mm == &init_mm) + if (mm_is_kernel(mm)) return; if ((pmd_val(pmd) ^ pmd_val(orig)) & _PAGE_PMD_HUGE) { -- 2.51.2