Hello Reinette,
On 9/28/2023 1:10 AM, Shaopeng Tan (Fujitsu) wrote:
On 9/15/2023 8:44 AM, Ilpo Järvinen wrote:
...
+static void run_mbm_test(const char * const *benchmark_cmd, int +cpu_no) {
- int res;
- ksft_print_msg("Starting MBM BW change ...\n");
- if (test_prepare())
return;
I am not sure about this. With this exit the kselftest machinery is not aware of the test passing or failing. I wonder if there should not rather be a "goto" here that triggers ksft_test_result()? This needs some more thought though. First, with this change test_prepare() officially gains responsibility to determine if a failure is transient (just a single test fails) or permanent (no use trying any other tests if this fails). For the former it would then be up to the caller to call ksft_test_result() and for the latter test_prepare() will call ksft_exit_fail_msg(). Second, that SNC warning may be an inconvenience with a new goto. Here it may be ok to print that message before the test failure?
If a failure may be permanent, it may be best to detect it before running all
tests, rather than in test_prepare().
Now some detections are completed before running all tests. For example: 273 if (geteuid() != 0) 274 return ksft_exit_skip("Not running as root.
Skipping...\n");
275 276 if (!check_resctrlfs_support()) 277 return ksft_exit_skip("resctrl FS does not exist. Enable
X86_CPU_RESCTRL config option.\n");
278 279 if (umount_resctrlfs()) 280 return ksft_exit_skip("resctrl FS unmount failed.\n");
You are correct that the tests should aim to detect as early as possible if no test has a chance of succeeding. This is covered in the checks you mention. The purpose of test_prepare()/test_cleanup() pair is to perform actions that should be done for every test. For example, resctrl is mounted before each test and unmounted after each test. Since these actions are required to be done for every test it cannot be a single call before all tests are run.
It may be possible to add a test_prepare() directly followed by a test_cleanup() before any test is run to be more explicit about early detection but that does not seem necessary considering the checks would be done anyway when the first test is run. Even when doing so it would not eliminate the need for test_prepare()/test_cleanup() to form part of every test run and needing to exit if, for example, a previous test triggered a fault preventing resctrl from being mounted.
Thanks for your explanation. I understand
Best regards, Shaopeng TAN