Hello, I would like to discuss a small breaking change, as CONTRIBUTING.md 1.13 asks:
https://github.com/apache/nuttx/pull/21696 The PR is a draft with the "breaking change" label. It depends on apache/nuttx#21693 and stays a draft until that one merges. I will start a vote after the discussion. What the PR does It removes the BOARDIOC_SPINLOCK boardctl() command, CONFIG_BOARDCTL_SPINLOCK and struct boardioc_spinlock_s. Its only user was pthread_spin_*(), and apache/nuttx#21693 (not a breaking change) implements those in libc with atomics, so they no longer need a system call. Xiang Xiao asked for the removal in the review of #21693; it is in its own PR because it removes a public command. The value 0x000f stays unused, so the other boardctl() commands keep their numbers. The PR also removes the documentation page of the boardioc_spinlock example, which is not in nuttx-apps. Who is affected No configuration or application in nuttx and nuttx-apps master: with #21693, no code uses BOARDIOC_SPINLOCK, and no defconfig sets CONFIG_BOARDCTL_SPINLOCK. Out-of-tree code that calls boardctl(BOARDIOC_SPINLOCK) is affected. Quick fix An application that called boardctl(BOARDIOC_SPINLOCK) uses pthread_spin_lock(), pthread_spin_trylock() and pthread_spin_unlock() (CONFIG_PTHREAD_SPINLOCKS); kernel code uses spin_lock() and spin_unlock() from <nuttx/spinlock.h>. A defconfig drops CONFIG_BOARDCTL_SPINLOCK. The alternative Keep the command with no user in the tree. Tests The removed code has no caller, so nothing runs differently. Builds with -Werror of this PR together with #21693 pass (qemu-armv8a:knsh, bl602evb:wifi). The spin locks of #21693 pass a test program on QEMU (arm64 kernel, flat and SMP, rv64 kernel, armv7-m protected) and on real hardware: RP2350 (Pimoroni Pico Plus 2, one and two Cortex-M33 cores). ostest passes on QEMU and on the RP2350. Help with build and runtime logs on other real boards is welcome. Please send your comments here or in the PR. Best regards, Marco Casaroli
