arch/s390/boot/vmem.c
Source file repositories/reference/linux-study-clean/arch/s390/boot/vmem.c
File Facts
- System
- Linux kernel
- Corpus path
arch/s390/boot/vmem.c- Extension
.c- Size
- 16734 bytes
- Lines
- 559
- Domain
- Architecture Layer
- Bucket
- arch/s390
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/cpufeature.hlinux/sched/task.hlinux/pgtable.hlinux/kasan.hasm/page-states.hasm/pgalloc.hasm/facility.hasm/sections.hasm/ctlreg.hasm/physmem_info.hasm/maccess.hasm/machine.hasm/abs_lowcore.hdecompressor.hboot.h
Detected Declarations
enum populate_modefunction is_kasan_populate_modefunction kasan_populatefunction kasan_populate_shadowfunction for_each_physmem_usable_rangefunction kasan_pgd_populate_zero_shadowfunction kasan_p4d_populate_zero_shadowfunction kasan_pud_populate_zero_shadowfunction kasan_pmd_populate_zero_shadowfunction kasan_pte_populate_zero_shadowfunction kasan_populate_shadowfunction kasan_p4d_populate_zero_shadowfunction kasan_pud_populate_zero_shadowfunction kasan_pmd_populate_zero_shadowfunction kasan_pte_populate_zero_shadowfunction virt_to_kptefunction resolve_pa_may_allocfunction large_page_mapping_allowedfunction try_get_large_pud_pafunction try_get_large_pmd_pafunction pgtable_pte_populatefunction pgtable_pmd_populatefunction pgtable_pud_populatefunction pgtable_p4d_populatefunction pgtable_populatefunction setup_vmem
Annotated Snippet
if (memgap_start && physmem_info.info_source == MEM_DETECT_DIAG260) {
kasan_populate((unsigned long)__identity_va(memgap_start),
(unsigned long)__identity_va(start),
POPULATE_KASAN_ZERO_SHADOW);
}
memgap_start = end;
}
kasan_populate(kernel_start + TEXT_OFFSET, kernel_end, POPULATE_KASAN_MAP_SHADOW);
kasan_populate(0, (unsigned long)__identity_va(0), POPULATE_KASAN_ZERO_SHADOW);
kasan_populate(AMODE31_START, AMODE31_END, POPULATE_KASAN_ZERO_SHADOW);
/* shallowly populate kasan shadow for vmalloc and modules */
kasan_populate(VMALLOC_START, MODULES_END, POPULATE_KASAN_SHALLOW);
/* populate kasan shadow for untracked memory */
kasan_populate((unsigned long)__identity_va(ident_map_size), VMALLOC_START,
POPULATE_KASAN_ZERO_SHADOW);
kasan_populate(kernel_end, _REGION1_SIZE, POPULATE_KASAN_ZERO_SHADOW);
}
static bool kasan_pgd_populate_zero_shadow(pgd_t *pgd, unsigned long addr,
unsigned long end, enum populate_mode mode)
{
if (mode == POPULATE_KASAN_ZERO_SHADOW &&
IS_ALIGNED(addr, PGDIR_SIZE) && end - addr >= PGDIR_SIZE) {
pgd_populate(&init_mm, pgd, kasan_early_shadow_p4d);
return true;
}
return false;
}
static bool kasan_p4d_populate_zero_shadow(p4d_t *p4d, unsigned long addr,
unsigned long end, enum populate_mode mode)
{
if (mode == POPULATE_KASAN_ZERO_SHADOW &&
IS_ALIGNED(addr, P4D_SIZE) && end - addr >= P4D_SIZE) {
p4d_populate(&init_mm, p4d, kasan_early_shadow_pud);
return true;
}
return false;
}
static bool kasan_pud_populate_zero_shadow(pud_t *pud, unsigned long addr,
unsigned long end, enum populate_mode mode)
{
if (mode == POPULATE_KASAN_ZERO_SHADOW &&
IS_ALIGNED(addr, PUD_SIZE) && end - addr >= PUD_SIZE) {
pud_populate(&init_mm, pud, kasan_early_shadow_pmd);
return true;
}
return false;
}
static bool kasan_pmd_populate_zero_shadow(pmd_t *pmd, unsigned long addr,
unsigned long end, enum populate_mode mode)
{
if (mode == POPULATE_KASAN_ZERO_SHADOW &&
IS_ALIGNED(addr, PMD_SIZE) && end - addr >= PMD_SIZE) {
pmd_populate(&init_mm, pmd, kasan_early_shadow_pte);
return true;
}
return false;
}
static bool kasan_pte_populate_zero_shadow(pte_t *pte, enum populate_mode mode)
{
if (mode == POPULATE_KASAN_ZERO_SHADOW) {
set_pte(pte, pte_z);
return true;
}
return false;
}
#else
static inline void kasan_populate_shadow(unsigned long kernel_start, unsigned long kernel_end)
{
}
static inline bool kasan_pgd_populate_zero_shadow(pgd_t *pgd, unsigned long addr,
unsigned long end, enum populate_mode mode)
{
return false;
}
static inline bool kasan_p4d_populate_zero_shadow(p4d_t *p4d, unsigned long addr,
unsigned long end, enum populate_mode mode)
{
return false;
}
static inline bool kasan_pud_populate_zero_shadow(pud_t *pud, unsigned long addr,
unsigned long end, enum populate_mode mode)
Annotation
- Immediate include surface: `linux/cpufeature.h`, `linux/sched/task.h`, `linux/pgtable.h`, `linux/kasan.h`, `asm/page-states.h`, `asm/pgalloc.h`, `asm/facility.h`, `asm/sections.h`.
- Detected declarations: `enum populate_mode`, `function is_kasan_populate_mode`, `function kasan_populate`, `function kasan_populate_shadow`, `function for_each_physmem_usable_range`, `function kasan_pgd_populate_zero_shadow`, `function kasan_p4d_populate_zero_shadow`, `function kasan_pud_populate_zero_shadow`, `function kasan_pmd_populate_zero_shadow`, `function kasan_pte_populate_zero_shadow`.
- Atlas domain: Architecture Layer / arch/s390.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.