인터럽트 스택의 스택 포인터

인터럽트 스택의 스택 포인터

Linux 커널에는 사용자 모드 및 커널 모드 프로세스를 위한 별도의 스택과 일부 특수 스택이 있습니다. 이러한 특수 스택 중 하나는 크기가 16KB이고 다음 위치에 배치되는 인터럽트 스택입니다 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

관련 정보