Linux内核具有用于用户模式和内核模式进程的独立堆栈以及一些特殊堆栈。其中一个特殊的堆栈是中断堆栈,大小为16千字节放在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个字节?
谢谢。
答案 0 :(得分:0)
用作避免意外越过边界的边距?