【发布时间】:2015-11-16 13:01:18
【问题描述】:
Linux 内核为用户模式和内核模式进程提供了单独的堆栈,还有一些特殊的堆栈。其中一个特殊堆栈是大小为 16 KB 的中断堆栈,位于 irq_stack_union:
union irq_stack_union {
char irq_stack[IRQ_STACK_SIZE];
struct {
char gs_base[40];
unsigned long stack_canary;
};
};
有指向此堆栈的指针的定义 - irq_stack_ptr。据我了解,这个 irq_stack_ptr 必须指向 irq_stack 的末尾,或者换句话说指向 irq_stack + IRQ_STACK_SIZE - 1,但 irq_stack_ptr 的定义是:
DEFINE_PER_CPU(char *, irq_stack_ptr) =
init_per_cpu_var(irq_stack_union.irq_stack) + IRQ_STACK_SIZE - 64;
为什么我们在这里从 irq_stack_union.irq_stack 的末尾减去 64 个字节?
谢谢。
【问题讨论】:
标签: linux stack kernel interrupt