arch/powerpc/include/asm/nohash/32/mmu-8xx.h

Source file repositories/reference/linux-study-clean/arch/powerpc/include/asm/nohash/32/mmu-8xx.h

File Facts

System
Linux kernel
Corpus path
arch/powerpc/include/asm/nohash/32/mmu-8xx.h
Extension
.h
Size
9321 bytes
Lines
267
Domain
Architecture Layer
Bucket
arch/powerpc
Inferred role
Architecture Layer: implementation source
Status
source implementation candidate

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

struct mmu_psize_def {
	unsigned int	shift;	/* number of bits */
};

extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT];

static inline int shift_to_mmu_psize(unsigned int shift)
{
	int psize;

	for (psize = 0; psize < MMU_PAGE_COUNT; ++psize)
		if (mmu_psize_defs[psize].shift == shift)
			return psize;
	return -1;
}

static inline unsigned int mmu_psize_to_shift(unsigned int mmu_psize)
{
	if (mmu_psize_defs[mmu_psize].shift)
		return mmu_psize_defs[mmu_psize].shift;
	BUG();
}

static inline bool arch_vmap_try_size(unsigned long addr, unsigned long end, u64 pfn,
				      unsigned int max_page_shift, unsigned long size)
{
	if (end - addr < size)
		return false;

	if ((1UL << max_page_shift) < size)
		return false;

	if (!IS_ALIGNED(addr, size))
		return false;

	if (!IS_ALIGNED(PFN_PHYS(pfn), size))
		return false;

	return true;
}

static inline unsigned long arch_vmap_pte_range_map_size(unsigned long addr, unsigned long end,
							 u64 pfn, unsigned int max_page_shift)
{
	if (arch_vmap_try_size(addr, end, pfn, max_page_shift, SZ_512K))
		return SZ_512K;
	if (PAGE_SIZE == SZ_16K)
		return SZ_16K;
	if (arch_vmap_try_size(addr, end, pfn, max_page_shift, SZ_16K))
		return SZ_16K;
	return PAGE_SIZE;
}
#define arch_vmap_pte_range_map_size arch_vmap_pte_range_map_size

static inline int arch_vmap_pte_supported_shift(unsigned long size)
{
	if (size >= SZ_512K)
		return 19;
	else if (size >= SZ_16K)
		return 14;
	else
		return PAGE_SHIFT;
}
#define arch_vmap_pte_supported_shift arch_vmap_pte_supported_shift

/* patch sites */
extern s32 patch__itlbmiss_exit_1, patch__dtlbmiss_exit_1;
extern s32 patch__itlbmiss_perf, patch__dtlbmiss_perf;

#endif /* !__ASSEMBLER__ */

#endif /* _ASM_POWERPC_MMU_8XX_H_ */

Annotation

Implementation Notes