I have read about how Linux uses hard IRQ stack and soft IRQ stack per CPU in case the exception stack determined to be only 4KB in compilation time of the kernel.
Now I know that in the case of 8KB kernel mode stack, when the CPU looks in the IDT for interrupt handler and find out there is a need for a change of privilege he get the address of the kernel mode stack from the TSS segment of the process. Also in the case of 4KB kernel mode stack the cpu gets the address of the exception stack from the TSS segment.
What I am not clear about is how the CPU gets the address of the hard_irq stack or soft_irq stack in case of handling an interrupt.
Can someone explain it to me?