The poller command allows to print which pollers are registered and also how many times we can run the registered pollers in one second. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- commands/Kconfig | 9 ++++++ common/poller.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/commands/Kconfig b/commands/Kconfig index 7784966282..665eb470b1 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -260,6 +260,15 @@ config CMD_MMC_EXTCSD -y don't request when writing to one time programmable fields __CAUTION__: this could damage the device! +config CMD_POLLER + tristate + prompt "poller" + depends on POLLER + help + Pollers are functions that are running in the background whenever code executes + is_timeout() or one of the various delay functions. The poller command prints + informations about registered pollers. + # end Information commands endmenu diff --git a/common/poller.c b/common/poller.c index b1a2122f91..95f828b439 100644 --- a/common/poller.c +++ b/common/poller.c @@ -121,3 +121,74 @@ void poller_call(void) poller_active = 0; } + +#if defined CONFIG_CMD_POLLER + +#include <command.h> +#include <getopt.h> + +static void poller_time(void) +{ + uint64_t start = get_time_ns(); + int i = 0; + + /* + * How many times we can run the registered pollers in one second? + * + * A low number here may point to problems with pollers taking too + * much time. + */ + while (!is_timeout(start, SECOND)) + i++; + + printf("%d poller calls in 1s\n", i); +} + +static void poller_info(void) +{ + struct poller_struct *poller; + + printf("Registered pollers:\n"); + + if (list_empty(&poller_list)) { + printf("<none>\n"); + return; + } + + list_for_each_entry(poller, &poller_list, list) + printf("%s\n", poller->name); +} + +BAREBOX_CMD_HELP_START(poller) +BAREBOX_CMD_HELP_TEXT("print info about registered pollers") +BAREBOX_CMD_HELP_TEXT("") +BAREBOX_CMD_HELP_TEXT("Options:") +BAREBOX_CMD_HELP_OPT ("-i", "Print information about registered pollers") +BAREBOX_CMD_HELP_OPT ("-t", "measure how many pollers we run in 1s") +BAREBOX_CMD_HELP_END + +static int do_poller(int argc, char *argv[]) +{ + int opt; + + while ((opt = getopt(argc, argv, "it")) > 0) { + switch (opt) { + case 'i': + poller_info(); + return 0; + case 't': + poller_time(); + return 0; + } + } + + return COMMAND_ERROR_USAGE; +} + +BAREBOX_CMD_START(poller) + .cmd = do_poller, + BAREBOX_CMD_DESC("print info about registered pollers") + BAREBOX_CMD_GROUP(CMD_GRP_MISC) + BAREBOX_CMD_HELP(cmd_poller_help) +BAREBOX_CMD_END +#endif -- 2.25.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox