2015-08-22 2 views
1

Ядро 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 здесь?

спасибо.

ответ

0

Используется как запас, чтобы случайно не пересечь границу?

Смежные вопросы