kernel/irq/proc.c
Source file repositories/reference/linux-study-clean/kernel/irq/proc.c
File Facts
- System
- Linux kernel
- Corpus path
kernel/irq/proc.c- Extension
.c- Size
- 17187 bytes
- Lines
- 679
- Domain
- Core OS
- Bucket
- Scheduler, Processes, Timers, Sync, And Syscalls
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/irq.hlinux/gfp.hlinux/proc_fs.hlinux/seq_file.hlinux/interrupt.hlinux/kernel.hlinux/kernel_stat.hlinux/mutex.hlinux/string.hinternals.h
Detected Declarations
function show_irq_affinityfunction irq_affinity_hint_proc_showfunction scoped_guardfunction irq_affinity_proc_showfunction irq_affinity_list_proc_showfunction irq_select_affinity_usrfunction irq_select_affinity_usrfunction write_irq_affinityfunction irq_affinity_proc_writefunction irq_affinity_list_proc_writefunction irq_affinity_proc_openfunction irq_affinity_list_proc_openfunction irq_effective_aff_proc_showfunction irq_effective_aff_list_proc_showfunction default_affinity_showfunction default_affinity_writefunction default_affinity_openfunction irq_node_proc_showfunction irq_spurious_proc_showfunction name_uniquefunction register_handler_procfunction register_irq_procfunction unregister_irq_procfunction unregister_handler_procfunction register_default_affinity_procfunction init_irq_procfunction irq_proc_update_validfunction arch_show_interruptsfunction irq_proc_calc_precfunction irq_proc_update_chipfunction irq_proc_emit_zero_countsfunction irq_proc_emit_countfunction irq_proc_emit_countsfunction irq_seq_showfunction irq_seq_stopfunction irq_proc_initmodule init irq_proc_init
Annotated Snippet
if (desc) {
*pos = irq_desc_get_irq(desc);
/*
* If valid for output then try to acquire a reference
* count on the descriptor so that it can't be freed
* after dropping RCU read lock on return.
*/
if (irq_settings_proc_valid(desc) && irq_desc_get_ref(desc))
return desc;
(*pos)++;
} else {
*pos = total_nr_irqs;
return ARCH_PROC_IRQDESC;
}
}
}
static void *irq_seq_start(struct seq_file *f, loff_t *pos)
{
if (!*pos) {
struct irq_proc_constraints *constr = f->private;
constr->num_prec = READ_ONCE(irq_proc_constraints.num_prec);
constr->chip_width = READ_ONCE(irq_proc_constraints.chip_width);
constr->print_header = true;
}
return irq_seq_next_desc(pos);
}
static void *irq_seq_next(struct seq_file *f, void *v, loff_t *pos)
{
if (v && v != ARCH_PROC_IRQDESC)
irq_desc_put_ref(v);
(*pos)++;
return irq_seq_next_desc(pos);
}
static void irq_seq_stop(struct seq_file *f, void *v)
{
if (v && v != ARCH_PROC_IRQDESC)
irq_desc_put_ref(v);
}
static const struct seq_operations irq_seq_ops = {
.start = irq_seq_start,
.next = irq_seq_next,
.stop = irq_seq_stop,
.show = irq_seq_show,
};
static int __init irq_proc_init(void)
{
proc_create_seq_private("interrupts", 0, NULL, &irq_seq_ops,
sizeof(irq_proc_constraints), NULL);
return 0;
}
fs_initcall(irq_proc_init);
#endif
Annotation
- Immediate include surface: `linux/irq.h`, `linux/gfp.h`, `linux/proc_fs.h`, `linux/seq_file.h`, `linux/interrupt.h`, `linux/kernel.h`, `linux/kernel_stat.h`, `linux/mutex.h`.
- Detected declarations: `function show_irq_affinity`, `function irq_affinity_hint_proc_show`, `function scoped_guard`, `function irq_affinity_proc_show`, `function irq_affinity_list_proc_show`, `function irq_select_affinity_usr`, `function irq_select_affinity_usr`, `function write_irq_affinity`, `function irq_affinity_proc_write`, `function irq_affinity_list_proc_write`.
- Atlas domain: Core OS / Scheduler, Processes, Timers, Sync, And Syscalls.
- 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.