forked from mirrors/linux
		
	The naming of pgtable_page_{ctor,dtor}() seems to have confused a few
people, and until recently arm64 used these erroneously/pointlessly for
other levels of page table.
To make it incredibly clear that these only apply to the PTE level, and to
align with the naming of pgtable_pmd_page_{ctor,dtor}(), let's rename them
to pgtable_pte_page_{ctor,dtor}().
These changes were generated with the following shell script:
----
git grep -lw 'pgtable_page_.tor' | while read FILE; do
    sed -i '{s/pgtable_page_ctor/pgtable_pte_page_ctor/}' $FILE;
    sed -i '{s/pgtable_page_dtor/pgtable_pte_page_dtor/}' $FILE;
done
----
... with the documentation re-flowed to remain under 80 columns, and
whitespace fixed up in macros to keep backslashes aligned.
There should be no functional change as a result of this patch.
Link: http://lkml.kernel.org/r/20190722141133.3116-1-mark.rutland@arm.com
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>	[m68k]
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Yu Zhao <yuzhao@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
	
			
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
						|
/*
 | 
						|
 *  arch/arm/include/asm/tlb.h
 | 
						|
 *
 | 
						|
 *  Copyright (C) 2002 Russell King
 | 
						|
 *
 | 
						|
 *  Experimentation shows that on a StrongARM, it appears to be faster
 | 
						|
 *  to use the "invalidate whole tlb" rather than "invalidate single
 | 
						|
 *  tlb" for this.
 | 
						|
 *
 | 
						|
 *  This appears true for both the process fork+exit case, as well as
 | 
						|
 *  the munmap-large-area case.
 | 
						|
 */
 | 
						|
#ifndef __ASMARM_TLB_H
 | 
						|
#define __ASMARM_TLB_H
 | 
						|
 | 
						|
#include <asm/cacheflush.h>
 | 
						|
 | 
						|
#ifndef CONFIG_MMU
 | 
						|
 | 
						|
#include <linux/pagemap.h>
 | 
						|
 | 
						|
#define tlb_flush(tlb)	((void) tlb)
 | 
						|
 | 
						|
#include <asm-generic/tlb.h>
 | 
						|
 | 
						|
#else /* !CONFIG_MMU */
 | 
						|
 | 
						|
#include <linux/swap.h>
 | 
						|
#include <asm/pgalloc.h>
 | 
						|
#include <asm/tlbflush.h>
 | 
						|
 | 
						|
static inline void __tlb_remove_table(void *_table)
 | 
						|
{
 | 
						|
	free_page_and_swap_cache((struct page *)_table);
 | 
						|
}
 | 
						|
 | 
						|
#include <asm-generic/tlb.h>
 | 
						|
 | 
						|
#ifndef CONFIG_HAVE_RCU_TABLE_FREE
 | 
						|
#define tlb_remove_table(tlb, entry) tlb_remove_page(tlb, entry)
 | 
						|
#endif
 | 
						|
 | 
						|
static inline void
 | 
						|
__pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte, unsigned long addr)
 | 
						|
{
 | 
						|
	pgtable_pte_page_dtor(pte);
 | 
						|
 | 
						|
#ifndef CONFIG_ARM_LPAE
 | 
						|
	/*
 | 
						|
	 * With the classic ARM MMU, a pte page has two corresponding pmd
 | 
						|
	 * entries, each covering 1MB.
 | 
						|
	 */
 | 
						|
	addr = (addr & PMD_MASK) + SZ_1M;
 | 
						|
	__tlb_adjust_range(tlb, addr - PAGE_SIZE, 2 * PAGE_SIZE);
 | 
						|
#endif
 | 
						|
 | 
						|
	tlb_remove_table(tlb, pte);
 | 
						|
}
 | 
						|
 | 
						|
static inline void
 | 
						|
__pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp, unsigned long addr)
 | 
						|
{
 | 
						|
#ifdef CONFIG_ARM_LPAE
 | 
						|
	struct page *page = virt_to_page(pmdp);
 | 
						|
 | 
						|
	tlb_remove_table(tlb, page);
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
#endif /* CONFIG_MMU */
 | 
						|
#endif
 |