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.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/mmdebug.hlinux/sizes.h
Detected Declarations
struct mmu_psize_deffunction shift_to_mmu_psizefunction mmu_psize_to_shiftfunction arch_vmap_try_sizefunction arch_vmap_pte_range_map_sizefunction arch_vmap_pte_supported_shift
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
- Immediate include surface: `linux/mmdebug.h`, `linux/sizes.h`.
- Detected declarations: `struct mmu_psize_def`, `function shift_to_mmu_psize`, `function mmu_psize_to_shift`, `function arch_vmap_try_size`, `function arch_vmap_pte_range_map_size`, `function arch_vmap_pte_supported_shift`.
- Atlas domain: Architecture Layer / arch/powerpc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.