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

Reply via email to