From: Reinette Chatre <reinette.chatre@intel.com>
To: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
linux-kselftest@vger.kernel.org, "Shuah Khan" <shuah@kernel.org>,
"Shaopeng Tan" <tan.shaopeng@jp.fujitsu.com>,
"Maciej Wieczór-Retman" <maciej.wieczor-retman@intel.com>,
"Fenghua Yu" <fenghua.yu@intel.com>
Cc: <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 01/29] selftests/resctrl: Convert perror() to ksft_perror() or ksft_print_msg()
Date: Wed, 13 Dec 2023 13:53:55 -0800 [thread overview]
Message-ID: <1e7ede83-ac80-43aa-a452-0f95b32d849c@intel.com> (raw)
In-Reply-To: <20231211121826.14392-2-ilpo.jarvinen@linux.intel.com>
Hi Ilpo,
On 12/11/2023 4:17 AM, Ilpo Järvinen wrote:
> The resctrl selftest code contains a number of perror() calls. Some of
> them come with hash character and some don't. The kselftest framework
> provides ksft_perror() that is compatible with test output formatting
> so it should be used instead of adding custom hash signs.
>
> Some perror() calls are too far away from anything that sets error.
> For those call sites, ksft_print_msg() must be used instead.
>
> Convert perror() to ksft_perror() or ksft_print_msg().
>
> Other related changes:
> - Remove hash signs
> - Remove trailing stops & newlines from ksft_perror()
> - Add terminating newlines for converted ksft_print_msg()
> - Use consistent capitalization
>
Another great cleanup. Also thanks for fixing some non-sensical messages.
...
> @@ -149,7 +149,7 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
> param.num_of_runs = 0;
>
> if (pipe(pipefd)) {
> - perror("# Unable to create pipe");
> + ksft_perror("Unable to create pipe");
> return errno;
> }
>
> @@ -185,7 +185,7 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
> * Just print the error message.
> * Let while(1) run and wait for itself to be killed.
> */
> - perror("# failed signaling parent process");
> + ksft_perror("Failed signaling parent process");
>
Partial writes are not actually errors and it cannot be expected that errno be set
in these cases. In these cases I think ksft_print_msg() would be more appropriate.
> close(pipefd[1]);
> while (1)
> @@ -197,7 +197,7 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
> while (pipe_message != 1) {
> if (read(pipefd[0], &pipe_message,
> sizeof(pipe_message)) < sizeof(pipe_message)) {
> - perror("# failed reading from child process");
> + ksft_perror("Failed reading from child process");
> break;
> }
Same with partial reads.
...
> @@ -540,14 +540,14 @@ static int print_results_bw(char *filename, int bm_pid, float bw_imc,
> } else {
> fp = fopen(filename, "a");
> if (!fp) {
> - perror("Cannot open results file");
> + ksft_perror("Cannot open results file");
>
> return errno;
> }
> if (fprintf(fp, "Pid: %d \t Mem_BW_iMC: %f \t Mem_BW_resc: %lu \t Difference: %lu\n",
> bm_pid, bw_imc, bw_resc, diff) <= 0) {
> + ksft_perror("Could not log results");
> fclose(fp);
> - perror("Could not log results.");
>
> return errno;
From what I can tell fprintf() does not set errno on error. Perhaps this
should rather be ksft_print_msg()?
...
> @@ -738,15 +743,17 @@ int resctrl_val(const char * const *benchmark_cmd, struct resctrl_val_param *par
> sigact.sa_flags = SA_SIGINFO;
>
> /* Register for "SIGUSR1" signal from parent */
> - if (sigaction(SIGUSR1, &sigact, NULL))
> - PARENT_EXIT("Can't register child for signal");
> + if (sigaction(SIGUSR1, &sigact, NULL)) {
> + ksft_perror("Can't register child for signal");
> + PARENT_EXIT();
> + }
>
> /* Tell parent that child is ready */
> close(pipefd[0]);
> pipe_message = 1;
> if (write(pipefd[1], &pipe_message, sizeof(pipe_message)) <
> sizeof(pipe_message)) {
> - perror("# failed signaling parent process");
> + ksft_perror("Failed signaling parent process");
> close(pipefd[1]);
> return -1;
another partial write possibility
> }
> @@ -755,7 +762,8 @@ int resctrl_val(const char * const *benchmark_cmd, struct resctrl_val_param *par
> /* Suspend child until delivery of "SIGUSR1" from parent */
> sigsuspend(&sigact.sa_mask);
>
> - PARENT_EXIT("Child is done");
> + ksft_perror("Child is done");
> + PARENT_EXIT();
> }
>
> ksft_print_msg("Benchmark PID: %d\n", bm_pid);
> @@ -796,7 +804,7 @@ int resctrl_val(const char * const *benchmark_cmd, struct resctrl_val_param *par
> while (pipe_message != 1) {
> if (read(pipefd[0], &pipe_message, sizeof(pipe_message)) <
> sizeof(pipe_message)) {
> - perror("# failed reading message from child process");
> + ksft_perror("Failed reading message from child process");
> close(pipefd[0]);
> goto out;
another partial read possibility
...
> @@ -348,12 +348,12 @@ static int write_pid_to_tasks(char *tasks, pid_t pid)
>
> fp = fopen(tasks, "w");
> if (!fp) {
> - perror("Failed to open tasks file");
> + ksft_perror("Failed to open tasks file");
>
> return -1;
> }
> if (fprintf(fp, "%d\n", pid) < 0) {
> - perror("Failed to wr pid to tasks file");
> + ksft_perror("Failed to wr pid to tasks file");
> fclose(fp);
>
another fprintf() that I do not think sets errno on error.
Reinette
next prev parent reply other threads:[~2023-12-13 21:54 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-11 12:17 [PATCH v3 00/29] selftests/resctrl: CAT test improvements & generalized test framework Ilpo Järvinen
2023-12-11 12:17 ` [PATCH v3 01/29] selftests/resctrl: Convert perror() to ksft_perror() or ksft_print_msg() Ilpo Järvinen
2023-12-13 21:53 ` Reinette Chatre [this message]
2023-12-14 10:12 ` Ilpo Järvinen
2023-12-14 18:10 ` Reinette Chatre
2023-12-11 12:17 ` [PATCH v3 02/29] selftests/resctrl: Return -1 instead of errno on error Ilpo Järvinen
2023-12-13 21:54 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 03/29] selftests/resctrl: Don't use ctrlc_handler() outside signal handling Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 04/29] selftests/resctrl: Change function comments to say < 0 on error Ilpo Järvinen
2023-12-13 21:54 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 05/29] selftests/resctrl: Split fill_buf to allow tests finer-grained control Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 06/29] selftests/resctrl: Refactor fill_buf functions Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 07/29] selftests/resctrl: Refactor get_cbm_mask() and rename to get_full_cbm() Ilpo Järvinen
2023-12-13 21:55 ` Reinette Chatre
2023-12-14 10:14 ` Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 08/29] selftests/resctrl: Mark get_cache_size() cache_type const Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 09/29] selftests/resctrl: Create cache_portion_size() helper Ilpo Järvinen
2023-12-13 21:56 ` Reinette Chatre
2023-12-14 10:16 ` Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 10/29] selftests/resctrl: Exclude shareable bits from schemata in CAT test Ilpo Järvinen
2023-12-13 21:56 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 11/29] selftests/resctrl: Split measure_cache_vals() Ilpo Järvinen
2023-12-13 21:56 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 12/29] selftests/resctrl: Split show_cache_info() to test specific and generic parts Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 13/29] selftests/resctrl: Remove unnecessary __u64 -> unsigned long conversion Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 14/29] selftests/resctrl: Remove nested calls in perf event handling Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 15/29] selftests/resctrl: Consolidate naming of perf event related things Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 16/29] selftests/resctrl: Improve perf init Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 17/29] selftests/resctrl: Convert perf related globals to locals Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 18/29] selftests/resctrl: Move cat_val() to cat_test.c and rename to cat_test() Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 19/29] selftests/resctrl: Open perf fd before start & add error handling Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 20/29] selftests/resctrl: Replace file write with volatile variable Ilpo Järvinen
2023-12-13 21:56 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 21/29] selftests/resctrl: Read in less obvious order to defeat prefetch optimizations Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 22/29] selftests/resctrl: Rewrite Cache Allocation Technology (CAT) test Ilpo Järvinen
2023-12-13 21:56 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 23/29] selftests/resctrl: Restore the CPU affinity after CAT test Ilpo Järvinen
2023-12-13 21:59 ` Reinette Chatre
2023-12-14 10:25 ` Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 24/29] selftests/resctrl: Create struct for input parameters Ilpo Järvinen
2023-12-13 21:59 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 25/29] selftests/resctrl: Introduce generalized test framework Ilpo Järvinen
2023-12-13 22:00 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 26/29] selftests/resctrl: Pass write_schemata() resource instead of test name Ilpo Järvinen
2023-12-11 12:18 ` [PATCH v3 27/29] selftests/resctrl: Add helper to convert L2/3 to integer Ilpo Järvinen
2023-12-13 22:00 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 28/29] selftests/resctrl: Rename resource ID to domain ID Ilpo Järvinen
2023-12-13 22:01 ` Reinette Chatre
2023-12-11 12:18 ` [PATCH v3 29/29] selftests/resctrl: Get domain id from cache id Ilpo Järvinen
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=1e7ede83-ac80-43aa-a452-0f95b32d849c@intel.com \
--to=reinette.chatre@intel.com \
--cc=fenghua.yu@intel.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=shuah@kernel.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