中断堆栈的堆栈指针
Posted
技术标签:
【中文标题】中断堆栈的堆栈指针【英文标题】:Stack pointer of the interrupt stack 【发布时间】: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 个字节?
谢谢。
【问题讨论】:
【参考方案1】:用作边距避免意外越界?
【讨论】:
以上是关于中断堆栈的堆栈指针的主要内容,如果未能解决你的问题,请参考以下文章