From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jbLGg-0007xh-Uk for barebox@lists.infradead.org; Wed, 20 May 2020 09:44:08 +0000 From: Sascha Hauer Date: Wed, 20 May 2020 11:43:46 +0200 Message-Id: <20200520094403.12651-3-s.hauer@pengutronix.de> In-Reply-To: <20200520094403.12651-1-s.hauer@pengutronix.de> References: <20200520094403.12651-1-s.hauer@pengutronix.de> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 02/19] poller: Add a poller command To: Barebox List Cc: Edmund Henniges , =?UTF-8?q?Daniel=20Gl=C3=B6ckner?= 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 --- commands/Kconfig | 9 ++++++ common/poller.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/commands/Kconfig b/commands/Kconfig index 8de98ef3ee..3789f33c3b 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -244,6 +244,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 +#include + +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("\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.26.2 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox