Skip to content

Conversation

@wangchdo
Copy link
Contributor

@wangchdo wangchdo commented Dec 23, 2025

Summary

Signals in NuttX serve two primary purposes:

  1. Synchronization and wake-up
    Signals can be used to block threads on specific signal sets and later wake them up by delivering the corresponding signals to those threads.

  2. Asynchronous notification
    Signals can also be used to register callback handlers for specific signals, allowing threads to asynchronously invoke those handlers when the signals are delivered.

The PR #17357 Introduced the ability to disable only the synchronization and wake-up functionality of signals, while retaining part of the signal infrastructure. This allows moderate memory savings and performance improvements.

The PR #17352 Introduced the ability to completely disable all signal functionality, providing more aggressive memory reduction and performance optimization.

This PR consolidates the above two efforts and introduces a unified mechanism that supports both:

  1. Partial signal disablement: disabling only asynchronous notification while retaining synchronization and wake-up functionality.

  2. Full signal disablement: disabling both synchronization / wake-up and asynchronous notification functionality.

This consolidation enables finer-grained control over signal usage, allowing system integrators to better balance functionality, memory footprint, and performance for different use cases.

Impact

Provide configuration to fully or partially disable signals, should have no impact to exist nuttx functions if
the configuration is not enabled

this PR depends on apache/nuttx-apps#3333 to fix build dependency issues when signals are partially or fully disabled.

Testing

Below tests depend on apache/nuttx-apps#3333

ostest passed on rv-virt:smp64 when CONFIG_ENABLE_PARTIAL_SIGNALS=y

nsh> uname -a
NuttX 0.0.0 3503bbec44-dirty Dec 23 2025 11:32:43 risc-v rv-virt
nsh> ostest

(...)

smp_call_test: Call cpu 1, wait
smp_call_test: Call cpu 2, nowait
smp_call_test: Call cpu 2, wait
smp_call_test: Call cpu 3, nowait
smp_call_test: Call cpu 3, wait
smp_call_test: Call cpu 4, nowait
smp_call_test: Call cpu 4, wait
smp_call_test: Call cpu 5, nowait
smp_call_test: Call cpu 5, wait
smp_call_test: Call cpu 6, nowait
smp_call_test: Call cpu 6, wait
smp_call_test: Call cpu 7, nowait
smp_call_test: Call cpu 7, wait
smp_call_test: Call multi cpu, nowait
smp_call_test: Call in interrupt, wait
smp_call_test: Call multi cpu, wait
smp_call_test: Test success

Final memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena     1fc23e0  1fc23e0
ordblks         1        7
mxordblk  1fb72f0  1fa4140
uordblks     b0f0    14df8
fordblks  1fb72f0  1fad5e8
user_main: Exiting
ostest_main: Exiting with status 0

@github-actions github-actions bot added Arch: arm Issues related to ARM (32-bit) architecture Arch: arm64 Issues related to ARM64 (64-bit) architecture Arch: risc-v Issues related to the RISC-V (32-bit or 64-bit) architecture Arch: tricore Issues related to the TriCore architecture from Infineon Arch: x86 Issues related to the x86 architecture Arch: x86_64 Issues related to the x86_64 architecture Arch: xtensa Issues related to the Xtensa architecture Arch: z16 Issues related to the Z16 architecture Arch: z80 Issues related to the Z80 architecture Area: Drivers Drivers issues Area: File System File System issues Area: OS Components OS Components issues Size: L The size of the change in this PR is large labels Dec 23, 2025
@acassis
Copy link
Contributor

acassis commented Dec 25, 2025

@Fix-Point please help to review

@wangchdo
Copy link
Contributor Author

@xiaoxiang781216 @anchao @acassis

CI is failing because of dependency on apache/nuttx-apps#3333

Shall we merge apache/nuttx-apps#3333 firstly and then restart the CI?

@xiaoxiang781216
Copy link
Contributor

@xiaoxiang781216 @anchao @acassis

CI is failing because of dependency on apache/nuttx-apps#3333

Shall we merge apache/nuttx-apps#3333 firstly and then restart the CI?

yes, let's merge apache/nuttx-apps#3333 and restart again.

@xiaoxiang781216
Copy link
Contributor

but we need add CONFIG_ENABLE_ALL_SIGNALS to the related defconfig without wating apache/nuttx-apps#3333

@wangchdo
Copy link
Contributor Author

but we need add CONFIG_ENABLE_ALL_SIGNALS to the related defconfig without wating apache/nuttx-apps#3333

OK, I added defconfig update

@wangchdo wangchdo force-pushed the add_all_partial_signal_disabling branch from 8a84f7a to 4605df9 Compare January 16, 2026 16:47
@wangchdo wangchdo force-pushed the add_all_partial_signal_disabling branch from 4605df9 to 26e1090 Compare January 17, 2026 03:03
@acassis
Copy link
Contributor

acassis commented Jan 17, 2026

@wangchdo I think you need to refresh these board profiles:

   (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   boards/arm/mps/mps3-an547/configs/ap/defconfig
	modified:   boards/arm/mps/mps3-an547/configs/bl/defconfig
	modified:   boards/arm/nrf53/nrf5340-dk/configs/sdc_nimble_cpunet/defconfig

 Enable CONFIG_ENABLE_ALL_SIGNAL to fix build errors

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
@wangchdo wangchdo force-pushed the add_all_partial_signal_disabling branch from f2e64a1 to 43ee2fb Compare January 18, 2026 01:52
@wangchdo
Copy link
Contributor Author

@wangchdo I think you need to refresh these board profiles:


   (use "git add <file>..." to update what will be committed)

  (use "git restore <file>..." to discard changes in working directory)

	modified:   boards/arm/mps/mps3-an547/configs/ap/defconfig

	modified:   boards/arm/mps/mps3-an547/configs/bl/defconfig

	modified:   boards/arm/nrf53/nrf5340-dk/configs/sdc_nimble_cpunet/defconfig

OK, refreshed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Arch: arm Issues related to ARM (32-bit) architecture Arch: arm64 Issues related to ARM64 (64-bit) architecture Arch: avr Issues related to all AVR(8-bit or 32-bit) architectures Arch: mips Issues related to the MIPS architecture Arch: openrisc Issues related to the OpenRISC architecture Arch: renesas Issues related to the Renesas chips Arch: risc-v Issues related to the RISC-V (32-bit or 64-bit) architecture Arch: simulator Issues related to the SIMulator Arch: sparc Issues related to the SPARC architecture Arch: tricore Issues related to the TriCore architecture from Infineon Arch: x86 Issues related to the x86 architecture Arch: x86_64 Issues related to the x86_64 architecture Arch: xtensa Issues related to the Xtensa architecture Arch: z16 Issues related to the Z16 architecture Arch: z80 Issues related to the Z80 architecture Area: Drivers Drivers issues Area: File System File System issues Area: OS Components OS Components issues Board: arm Board: risc-v Size: L The size of the change in this PR is large Size: M The size of the change in this PR is medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants