arch/arm64/kernel/irq.c
Source file repositories/reference/linux-study-clean/arch/arm64/kernel/irq.c
File Facts
- System
- Linux kernel
- Corpus path
arch/arm64/kernel/irq.c- Extension
.c- Size
- 3083 bytes
- Lines
- 136
- Domain
- Architecture Layer
- Bucket
- arch/arm64
- 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.
- 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/errno.hlinux/hardirq.hlinux/init.hlinux/irq.hlinux/irqchip.hlinux/kprobes.hlinux/memory.hlinux/scs.hlinux/seq_file.hlinux/smp.hlinux/vmalloc.hasm/daifflags.hasm/exception.hasm/numa.hasm/softirq_stack.hasm/stacktrace.hasm/vmap_stack.h
Detected Declarations
function init_irq_scsfunction for_each_possible_cpufunction init_irq_stacksfunction for_each_possible_cpufunction ____do_softirqfunction do_softirq_own_stackfunction default_handle_irqfunction default_handle_fiqfunction set_handle_irqfunction set_handle_fiqfunction init_IRQ
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* Based on arch/arm/kernel/irq.c
*
* Copyright (C) 1992 Linus Torvalds
* Modifications for ARM processor Copyright (C) 1995-2000 Russell King.
* Support for Dynamic Tick Timer Copyright (C) 2004-2005 Nokia Corporation.
* Dynamic Tick Timer written by Tony Lindgren <tony@atomide.com> and
* Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>.
* Copyright (C) 2012 ARM Ltd.
*/
#include <linux/errno.h>
#include <linux/hardirq.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/irqchip.h>
#include <linux/kprobes.h>
#include <linux/memory.h>
#include <linux/scs.h>
#include <linux/seq_file.h>
#include <linux/smp.h>
#include <linux/vmalloc.h>
#include <asm/daifflags.h>
#include <asm/exception.h>
#include <asm/numa.h>
#include <asm/softirq_stack.h>
#include <asm/stacktrace.h>
#include <asm/vmap_stack.h>
/* Only access this in an NMI enter/exit */
DEFINE_PER_CPU(struct nmi_ctx, nmi_contexts);
DEFINE_PER_CPU(unsigned long *, irq_stack_ptr);
DECLARE_PER_CPU(unsigned long *, irq_shadow_call_stack_ptr);
#ifdef CONFIG_SHADOW_CALL_STACK
DEFINE_PER_CPU(unsigned long *, irq_shadow_call_stack_ptr);
#endif
static int __init init_irq_scs(void)
{
int cpu;
void *s;
if (!scs_is_enabled())
return 0;
for_each_possible_cpu(cpu) {
s = scs_alloc(early_cpu_to_node(cpu));
if (!s)
return -ENOMEM;
per_cpu(irq_shadow_call_stack_ptr, cpu) = s;
}
return 0;
}
static int __init init_irq_stacks(void)
{
int cpu;
unsigned long *p;
for_each_possible_cpu(cpu) {
p = arch_alloc_vmap_stack(IRQ_STACK_SIZE, early_cpu_to_node(cpu));
if (!p)
return -ENOMEM;
per_cpu(irq_stack_ptr, cpu) = p;
}
return 0;
}
#ifdef CONFIG_SOFTIRQ_ON_OWN_STACK
static void ____do_softirq(struct pt_regs *regs)
{
__do_softirq();
}
void do_softirq_own_stack(void)
{
call_on_irq_stack(NULL, ____do_softirq);
}
#endif
static void default_handle_irq(struct pt_regs *regs)
{
panic("IRQ taken without a root IRQ handler\n");
}
Annotation
- Immediate include surface: `linux/errno.h`, `linux/hardirq.h`, `linux/init.h`, `linux/irq.h`, `linux/irqchip.h`, `linux/kprobes.h`, `linux/memory.h`, `linux/scs.h`.
- Detected declarations: `function init_irq_scs`, `function for_each_possible_cpu`, `function init_irq_stacks`, `function for_each_possible_cpu`, `function ____do_softirq`, `function do_softirq_own_stack`, `function default_handle_irq`, `function default_handle_fiq`, `function set_handle_irq`, `function set_handle_fiq`.
- Atlas domain: Architecture Layer / arch/arm64.
- 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.