kernel/irq/irq_sim.c
Source file repositories/reference/linux-study-clean/kernel/irq/irq_sim.c
File Facts
- System
- Linux kernel
- Corpus path
kernel/irq/irq_sim.c- Extension
.c- Size
- 7938 bytes
- Lines
- 298
- Domain
- Core OS
- Bucket
- Scheduler, Processes, Timers, Sync, And Syscalls
- Inferred role
- Core OS: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- 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/cleanup.hlinux/interrupt.hlinux/irq.hlinux/irq_sim.hlinux/irq_work.hlinux/slab.h
Detected Declarations
struct irq_sim_work_ctxstruct irq_sim_irq_ctxfunction irq_sim_irqmaskfunction irq_sim_irqunmaskfunction irq_sim_set_typefunction irq_sim_get_irqchip_statefunction irq_sim_set_irqchip_statefunction irq_sim_request_resourcesfunction irq_sim_release_resourcesfunction irq_sim_handle_irqfunction irq_sim_domain_mapfunction irq_sim_domain_unmapfunction irq_domain_remove_simfunction devm_irq_domain_remove_simfunction devm_irq_domain_create_sim_fullexport irq_domain_create_simexport irq_domain_create_sim_fullexport irq_domain_remove_simexport devm_irq_domain_create_simexport devm_irq_domain_create_sim_full
Annotated Snippet
struct irq_sim_work_ctx {
struct irq_work work;
unsigned int irq_count;
unsigned long *pending;
struct irq_domain *domain;
struct irq_sim_ops ops;
void *user_data;
};
struct irq_sim_irq_ctx {
bool enabled;
struct irq_sim_work_ctx *work_ctx;
};
static void irq_sim_irqmask(struct irq_data *data)
{
struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
irq_ctx->enabled = false;
}
static void irq_sim_irqunmask(struct irq_data *data)
{
struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
irq_ctx->enabled = true;
}
static int irq_sim_set_type(struct irq_data *data, unsigned int type)
{
/* We only support rising and falling edge trigger types. */
if (type & ~IRQ_TYPE_EDGE_BOTH)
return -EINVAL;
irqd_set_trigger_type(data, type);
return 0;
}
static int irq_sim_get_irqchip_state(struct irq_data *data,
enum irqchip_irq_state which, bool *state)
{
struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
irq_hw_number_t hwirq = irqd_to_hwirq(data);
switch (which) {
case IRQCHIP_STATE_PENDING:
if (irq_ctx->enabled)
*state = test_bit(hwirq, irq_ctx->work_ctx->pending);
break;
default:
return -EINVAL;
}
return 0;
}
static int irq_sim_set_irqchip_state(struct irq_data *data,
enum irqchip_irq_state which, bool state)
{
struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
irq_hw_number_t hwirq = irqd_to_hwirq(data);
switch (which) {
case IRQCHIP_STATE_PENDING:
if (irq_ctx->enabled) {
assign_bit(hwirq, irq_ctx->work_ctx->pending, state);
if (state)
irq_work_queue(&irq_ctx->work_ctx->work);
}
break;
default:
return -EINVAL;
}
return 0;
}
static int irq_sim_request_resources(struct irq_data *data)
{
struct irq_sim_irq_ctx *irq_ctx = irq_data_get_irq_chip_data(data);
struct irq_sim_work_ctx *work_ctx = irq_ctx->work_ctx;
irq_hw_number_t hwirq = irqd_to_hwirq(data);
if (work_ctx->ops.irq_sim_irq_requested)
return work_ctx->ops.irq_sim_irq_requested(work_ctx->domain,
hwirq,
work_ctx->user_data);
return 0;
Annotation
- Immediate include surface: `linux/cleanup.h`, `linux/interrupt.h`, `linux/irq.h`, `linux/irq_sim.h`, `linux/irq_work.h`, `linux/slab.h`.
- Detected declarations: `struct irq_sim_work_ctx`, `struct irq_sim_irq_ctx`, `function irq_sim_irqmask`, `function irq_sim_irqunmask`, `function irq_sim_set_type`, `function irq_sim_get_irqchip_state`, `function irq_sim_set_irqchip_state`, `function irq_sim_request_resources`, `function irq_sim_release_resources`, `function irq_sim_handle_irq`.
- Atlas domain: Core OS / Scheduler, Processes, Timers, Sync, And Syscalls.
- Implementation status: integration 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.