割り込みスタックのスタックポインタ

割り込みスタックのスタックポインタ

Linuxカーネルには、ユーザーモードとカーネルモードプロセス用の別々のスタックといくつかの特別なスタックがあります。これらの特別なスタックの1つは、サイズが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;

64ここで最後からバイトを引くのはなぜですかirq_stack_union.irq_stack

ありがとうございます。

ベストアンサー1

もう知る人がいないようです。

irqスタックの末尾には、少なくとも12年間64バイトのスペースがあります。それはgitの歴史よりも前であり、これの妥当な理由を見つけることができません。それを削除します。起こりうる最悪の状況は何ですか?

http://git.kernel.org/linus/4950d6d48a0c43cc61d0bbb76fb10e0214b79c66

おすすめ記事