Ядро 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;
Почему мы вычитаем 64 байт от конца irq_stack_union.irq_stack здесь?
спасибо.