Merge branch '2022-09-13-add-support-for-cyclic-function-execution' into next
authorTom Rini <trini@konsulko.com>
Wed, 14 Sep 2022 12:57:39 +0000 (08:57 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 14 Sep 2022 12:57:39 +0000 (08:57 -0400)
commita822b9234b2f961f0bbdf2a0b20863d48c6de6e3
tree8bdeb980e294dd298d04b371ad41a0149c90aa07
parentc2238fcf0c4567bbd581882e5952047e71406f58
parentaf042c211d017f5a1c324fea9e817e33bfd2a475
Merge branch '2022-09-13-add-support-for-cyclic-function-execution' into next

To quote the author:
This patchset adds the basic infrastructure to periodically execute
code, e.g. all 100ms. Examples for such functions might be LED blinking
etc. The functions that are hooked into this cyclic list should be
small timewise as otherwise the execution of the other code that relies
on a high frequent polling (e.g. UART rx char ready check) might be
delayed too much. This patch also adds the Kconfig option
CONFIG_CYCLIC_MAX_CPU_TIME_US, which configures the max allowed time
for such a cyclic function. If it's execution time exceeds this time,
this cyclic function will get removed from the cyclic list.

How is this cyclic functionality executed?
This patchset integrates the main function responsible for calling all
registered cyclic functions cyclic_run() into the common WATCHDOG_RESET
macro. This guarantees that cyclic_run() is executed very often, which
is necessary for the cyclic functions to get scheduled and executed at
their configured periods.

This cyclic infrastructure will be used by a board specific function on
the NIC23 MIPS Octeon board, which needs to check periodically, if a
PCIe FLR has occurred.

Ideas how to continue:
One idea is to rename WATCHDOG_RESET to something like SCHEDULE and
move the watchdog_reset call into this cyclic infrastructure as well.
Or to perhaps move the shell UART RX ready polling to a cyclic
function.

It's also possible to extend the "cyclic" command, to support the
creation of periodically executed shell commands (for testing etc).