arch/arm64/kvm/ptdump.c
Source file repositories/reference/linux-study-clean/arch/arm64/kvm/ptdump.c
File Facts
- System
- Linux kernel
- Corpus path
arch/arm64/kvm/ptdump.c- Extension
.c- Size
- 7470 bytes
- Lines
- 309
- Domain
- Architecture Layer
- Bucket
- arch/arm64
- Inferred role
- Architecture Layer: operation-table or driver-model contract
- Status
- pattern 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 an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- 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/debugfs.hlinux/kvm_host.hlinux/seq_file.hasm/cpufeature.hasm/kvm_mmu.hasm/kvm_pgtable.hasm/ptdump.h
Detected Declarations
struct kvm_ptdump_guest_statefunction kvm_ptdump_visitorfunction kvm_ptdump_build_levelsfunction kvm_ptdump_guest_showfunction kvm_ptdump_guest_openfunction kvm_ptdump_guest_closefunction kvm_pgtable_range_showfunction kvm_pgtable_levels_showfunction kvm_pgtable_debugfs_openfunction kvm_pgtable_range_openfunction kvm_pgtable_levels_openfunction kvm_pgtable_debugfs_closefunction kvm_nested_s2_ptdump_create_debugfsfunction kvm_nested_s2_ptdump_remove_debugfsfunction kvm_s2_ptdump_create_debugfs
Annotated Snippet
static const struct file_operations kvm_ptdump_guest_fops = {
.open = kvm_ptdump_guest_open,
.read = seq_read,
.llseek = seq_lseek,
.release = kvm_ptdump_guest_close,
};
static int kvm_pgtable_range_show(struct seq_file *m, void *unused)
{
struct kvm_pgtable *pgtable = m->private;
seq_printf(m, "%2u\n", pgtable->ia_bits);
return 0;
}
static int kvm_pgtable_levels_show(struct seq_file *m, void *unused)
{
struct kvm_pgtable *pgtable = m->private;
seq_printf(m, "%1d\n", KVM_PGTABLE_MAX_LEVELS - pgtable->start_level);
return 0;
}
static int kvm_pgtable_debugfs_open(struct inode *m, struct file *file,
int (*show)(struct seq_file *, void *))
{
struct kvm_s2_mmu *mmu = m->i_private;
struct kvm *kvm = kvm_s2_mmu_to_kvm(mmu);
struct kvm_pgtable *pgtable;
int ret;
if (!kvm_get_kvm_safe(kvm))
return -ENOENT;
pgtable = mmu->pgt;
ret = single_open(file, show, pgtable);
if (ret < 0)
kvm_put_kvm(kvm);
return ret;
}
static int kvm_pgtable_range_open(struct inode *m, struct file *file)
{
return kvm_pgtable_debugfs_open(m, file, kvm_pgtable_range_show);
}
static int kvm_pgtable_levels_open(struct inode *m, struct file *file)
{
return kvm_pgtable_debugfs_open(m, file, kvm_pgtable_levels_show);
}
static int kvm_pgtable_debugfs_close(struct inode *m, struct file *file)
{
struct kvm *kvm = kvm_s2_mmu_to_kvm(m->i_private);
kvm_put_kvm(kvm);
return single_release(m, file);
}
static const struct file_operations kvm_pgtable_range_fops = {
.open = kvm_pgtable_range_open,
.read = seq_read,
.llseek = seq_lseek,
.release = kvm_pgtable_debugfs_close,
};
static const struct file_operations kvm_pgtable_levels_fops = {
.open = kvm_pgtable_levels_open,
.read = seq_read,
.llseek = seq_lseek,
.release = kvm_pgtable_debugfs_close,
};
void kvm_nested_s2_ptdump_create_debugfs(struct kvm_s2_mmu *mmu)
{
struct dentry *dent;
char file_name[S2FNAMESZ];
snprintf(file_name, sizeof(file_name), "0x%016llx-0x%016llx-s2-%sabled",
mmu->tlb_vttbr,
mmu->tlb_vtcr,
mmu->nested_stage2_enabled ? "en" : "dis");
dent = debugfs_create_file(file_name, 0400,
mmu->arch->debugfs_nv_dentry, mmu,
&kvm_ptdump_guest_fops);
mmu->shadow_pt_debugfs_dentry = dent;
}
Annotation
- Immediate include surface: `linux/debugfs.h`, `linux/kvm_host.h`, `linux/seq_file.h`, `asm/cpufeature.h`, `asm/kvm_mmu.h`, `asm/kvm_pgtable.h`, `asm/ptdump.h`.
- Detected declarations: `struct kvm_ptdump_guest_state`, `function kvm_ptdump_visitor`, `function kvm_ptdump_build_levels`, `function kvm_ptdump_guest_show`, `function kvm_ptdump_guest_open`, `function kvm_ptdump_guest_close`, `function kvm_pgtable_range_show`, `function kvm_pgtable_levels_show`, `function kvm_pgtable_debugfs_open`, `function kvm_pgtable_range_open`.
- Atlas domain: Architecture Layer / arch/arm64.
- Implementation status: pattern 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.