nuttx/arch
Daniel Fanache 614cdcd93f arch/arm/src/rp23xx: place PendSV at the lowest NVIC priority
PendSV is the deferred half of the Cortex-M context-switch path: a
higher-priority ISR that wakes a task sets PendSV pending and returns,
and PendSV then performs the register save/restore. This pattern is
only safe when PendSV runs at the lowest priority - otherwise a
peripheral ISR can preempt the context switch mid-update and corrupt
thread state.

The previous write of DEFPRIORITY32 to NVIC_SYSH12_15_PRIORITY in
up_irqinitialize() leaves PendSV at NVIC_SYSH_PRIORITY_DEFAULT (0x80),
the same priority as peripheral IRQs. Read-modify-write the SHPR3 to
lower only the PendSV byte to NVIC_SYSH_PRIORITY_MIN.

This is the canonical ARM Cortex-M priority arrangement and it matches
e.g. this reference:
https://nuttx.apache.org/docs/latest/guides/zerolatencyinterrupts.html (although
worked with a three-bit priority system)

This patch hardens up_irqinitialize against future peripheral-IRQ
prioritisation.

Signed-off-by: Daniel Fanache <dan@rts.ro>
2026-05-12 16:34:16 +08:00
..
arm arch/arm/src/rp23xx: place PendSV at the lowest NVIC priority 2026-05-12 16:34:16 +08:00
arm64 arch/imx9: Add bidirectional dshot driver using i.MX9 FlexIO 2026-04-30 12:24:47 +08:00
avr style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
ceva arch/ceva: Replace board_app_initialize 2026-05-02 18:36:46 +08:00
dummy
hc style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
mips include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
misoc include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
or1k include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
renesas style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
risc-v arch/risc-v/espressif: Add BLE sleep 2026-05-09 09:48:32 +08:00
sim sim: adapt macos avfoundation backend for camera indexing and capture 2026-05-08 19:51:39 +08:00
sparc include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
tricore include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
x86 arch/x86: Add palette 256 color to qemu-i486 VGA driver 2026-05-02 09:51:59 -04:00
x86_64 arch/x86_64/intel64: fix signal delivery race in x86_64_sigdeliver 2026-04-21 21:57:44 +08:00
xtensa arch/xtensa: Update common layer version for esp32[-|-s2|-s3] 2026-05-09 09:48:32 +08:00
z16 include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
z80 style: fix checkpatch issues after debug.h move 2026-04-07 07:50:06 -03:00
CMakeLists.txt
Kconfig arch/delays: Invalid default value for BOARD_LOOPSPERMSEC 2026-02-25 15:00:03 -03:00