From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Reinette Chatre <reinette.chatre@intel.com>,
Shuah Khan <skhan@linuxfoundation.org>,
linux-kselftest@vger.kernel.org, Shuah Khan <shuah@kernel.org>,
Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
Cc: "Fenghua Yu" <fenghua.yu@intel.com>,
"Babu Moger" <babu.moger@amd.com>,
LKML <linux-kernel@vger.kernel.org>,
"Shaopeng Tan" <tan.shaopeng@jp.fujitsu.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Subject: [PATCH v3 7/7] selftests/resctrl: Cleanup benchmark argument parsing
Date: Wed, 23 Aug 2023 16:15:56 +0300 [thread overview]
Message-ID: <20230823131556.27617-8-ilpo.jarvinen@linux.intel.com> (raw)
In-Reply-To: <20230823131556.27617-1-ilpo.jarvinen@linux.intel.com>
Benchmark argument is handled by custom argument parsing code which is
more complicated than it needs to be.
Process benchmark argument within the normal getopt() handling and drop
entirely unnecessary ben_ind and has_ben variables. If -b is not given,
setup the default benchmark command right after the switch statement
and make -b to goto over it while it terminates the getopt() loop.
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
---
.../testing/selftests/resctrl/resctrl_tests.c | 71 ++++++++++---------
1 file changed, 36 insertions(+), 35 deletions(-)
diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
index 94516d1f4307..ae9001ef7b0a 100644
--- a/tools/testing/selftests/resctrl/resctrl_tests.c
+++ b/tools/testing/selftests/resctrl/resctrl_tests.c
@@ -169,28 +169,35 @@ static void run_cat_test(int cpu_no, int no_of_bits)
int main(int argc, char **argv)
{
- bool has_ben = false, mbm_test = true, mba_test = true, cmt_test = true;
- int c, cpu_no = 1, argc_new = argc, i, no_of_bits = 0;
+ bool mbm_test = true, mba_test = true, cmt_test = true;
+ int c, cpu_no = 1, i, no_of_bits = 0;
const char *benchmark_cmd[BENCHMARK_ARGS];
- int ben_ind, tests = 0;
char *span_str = NULL;
bool cat_test = true;
char *skip_reason;
+ int tests = 0;
int ret;
- for (i = 0; i < argc; i++) {
- if (strcmp(argv[i], "-b") == 0) {
- ben_ind = i + 1;
- argc_new = ben_ind - 1;
- has_ben = true;
- break;
- }
- }
-
- while ((c = getopt(argc_new, argv, "ht:b:n:p:")) != -1) {
+ while ((c = getopt(argc, argv, "ht:b:n:p:")) != -1) {
char *token;
switch (c) {
+ case 'b':
+ /*
+ * First move optind back to the (first) optarg and
+ * then build the benchmark command using the
+ * remaining arguments.
+ */
+ optind--;
+ if (argc - optind >= BENCHMARK_ARGS - 1)
+ ksft_exit_fail_msg("Too long benchmark command");
+
+ /* Extract benchmark command from command line. */
+ for (i = 0; i < argc - optind; i++)
+ benchmark_cmd[i] = argv[i + optind];
+ benchmark_cmd[i] = NULL;
+
+ goto last_arg;
case 't':
token = strtok(optarg, ",");
@@ -240,6 +247,19 @@ int main(int argc, char **argv)
}
}
+ /* If no benchmark is given by "-b" argument, use fill_buf. */
+ benchmark_cmd[0] = "fill_buf";
+ ret = asprintf(&span_str, "%u", DEFAULT_SPAN);
+ if (ret < 0)
+ ksft_exit_fail_msg("Out of memory!\n");
+ benchmark_cmd[1] = span_str;
+ benchmark_cmd[2] = "1";
+ benchmark_cmd[3] = "0";
+ benchmark_cmd[4] = "false";
+ benchmark_cmd[5] = NULL;
+
+last_arg:
+
ksft_print_header();
/*
@@ -247,28 +267,9 @@ int main(int argc, char **argv)
* 1. We write to resctrl FS
* 2. We execute perf commands
*/
- if (geteuid() != 0)
- return ksft_exit_skip("Not running as root. Skipping...\n");
-
- if (has_ben) {
- if (argc - ben_ind >= BENCHMARK_ARGS - 1)
- ksft_exit_fail_msg("Too long benchmark command.\n");
-
- /* Extract benchmark command from command line. */
- for (i = 0; i < argc - ben_ind; i++)
- benchmark_cmd[i] = argv[i + ben_ind];
- benchmark_cmd[i] = NULL;
- } else {
- /* If no benchmark is given by "-b" argument, use fill_buf. */
- benchmark_cmd[0] = "fill_buf";
- ret = asprintf(&span_str, "%u", DEFAULT_SPAN);
- if (ret < 0)
- ksft_exit_fail_msg("Out of memory!\n");
- benchmark_cmd[1] = span_str;
- benchmark_cmd[2] = "1";
- benchmark_cmd[3] = "0";
- benchmark_cmd[4] = "false";
- benchmark_cmd[5] = NULL;
+ if (geteuid() != 0) {
+ skip_reason = "Not running as root. Skipping...\n";
+ goto free_span;
}
if (!check_resctrlfs_support()) {
--
2.30.2
next prev parent reply other threads:[~2023-08-23 13:19 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-23 13:15 [PATCH v3 0/7] selftests/resctrl: Rework benchmark command handling Ilpo Järvinen
2023-08-23 13:15 ` [PATCH v3 1/7] selftests/resctrl: Ensure the benchmark commands fits to its array Ilpo Järvinen
2023-08-23 13:15 ` [PATCH v3 2/7] selftests/resctrl: Correct benchmark command help Ilpo Järvinen
2023-08-30 0:53 ` Reinette Chatre
2023-08-23 13:15 ` [PATCH v3 3/7] selftests/resctrl: Remove bw_report and bm_type from main() Ilpo Järvinen
2023-08-23 13:15 ` [PATCH v3 4/7] selftests/resctrl: Simplify span lifetime Ilpo Järvinen
2023-08-23 13:15 ` [PATCH v3 5/7] selftests/resctrl: Make benchmark command const and build it with pointers Ilpo Järvinen
2023-08-30 0:53 ` Reinette Chatre
2023-08-30 8:59 ` Ilpo Järvinen
2023-08-30 17:47 ` Reinette Chatre
2023-08-31 7:10 ` Ilpo Järvinen
2023-08-23 13:15 ` [PATCH v3 6/7] selftests/resctrl: Remove ben_count variable Ilpo Järvinen
2023-08-23 13:15 ` Ilpo Järvinen [this message]
2023-08-29 12:48 ` [PATCH v3 7/7] selftests/resctrl: Cleanup benchmark argument parsing Maciej Wieczór-Retman
2023-08-29 13:04 ` Ilpo Järvinen
2023-08-29 13:23 ` Maciej Wieczór-Retman
2023-08-25 8:36 ` [PATCH v3 0/7] selftests/resctrl: Rework benchmark command handling Shaopeng Tan (Fujitsu)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230823131556.27617-8-ilpo.jarvinen@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=babu.moger@amd.com \
--cc=fenghua.yu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=reinette.chatre@intel.com \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=tan.shaopeng@jp.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox