shared/runtime/mpirq: Check separate hard IRQ stack correctly.

On the zephyr port, hard IRQ handlers run with a separate stack on a
different thread, so each call to mp_irq_dispatch() and mp_irq_handler()
has to be wrapped with adjustments to the stack-limit checker.

Move these adjustments into the shared mp_irq_dispatch(), introducing
MICROPY_STACK_SIZE_HARD_IRQ which a port can define to non-zero if it
uses a separate stack for hard IRQ handlers. We only need wrap the hard
dispatch case. This should reduce binary size on zephyr without affecting
other ports.

Signed-off-by: Chris Webb <chris@arachsys.com>
This commit is contained in:
Chris Webb
2025-09-09 15:40:51 +01:00
committed by Damien George
parent b9523fd58c
commit 81985d20c9
6 changed files with 24 additions and 38 deletions

View File

@@ -717,6 +717,13 @@
#define MICROPY_STACK_CHECK_MARGIN (0)
#endif
// The size of a separate stack used for hard IRQ handlers, which should be
// checked instead of the main stack when running a hard callback. 0 implies
// there is no separate ISR stack to check.
#ifndef MICROPY_STACK_SIZE_HARD_IRQ
#define MICROPY_STACK_SIZE_HARD_IRQ (0)
#endif
// Whether to have an emergency exception buffer
#ifndef MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (0)