pussuw opened a new pull request, #16262:
URL: https://github.com/apache/nuttx/pull/16262
## Summary
For some SMP calls it is necessary to lock the current CPU for the process
receiving the SMP call. This is done by setting the CPU affinity to the current
CPU and preventing the CPU selection algorithm from switching CPUs.
dtcb->flags |= TCB_FLAG_CPU_LOCKED;
CPU_SET(dtcb->cpu, &dtcb->affinity);
However, this logic is currently broken, as CPU_SET is defined as:
#define CPU_SET(c,s) do { *(s) |= (1u << (c)); } while (0)
In order to assign tcb->cpu (the current CPU) to the affinity mask, the mask
must be cleared first by calling CPU_ZERO.
## Impact
This fixes a bug in SMP mode where the kernel attempts to lock CPU for a
process, but the CPU can still change. Impact
is a bug fix in the kernel. No user / documentation / API changes and so
forth.
## Testing
Testing and bug hunting was done by @jlaitine by running ostest with SMP
enabled.
Issues related:
https://github.com/apache/nuttx/issues/16193
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]