[Intel-gfx] [PATCH i-g-t v2 11/11] lib/kunit: Execute kunit test cases only when needed
Kamil Konieczny
kamil.konieczny at linux.intel.com
Mon Oct 9 17:10:20 UTC 2023
Hi Janusz,
On 2023-10-09 at 14:28:02 +0200, Janusz Krzysztofik wrote:
> IGT user interface allows to request execution of only those dynamic sub-
> subtests that match a user provided name pattern. If the user pattern
> doesn't match any names of test cases provided by a kunit test module used
> with the subtest to be run then no results from any dynamic sub-subtests
> will be reported. Since we already know the list of test cases provided
> by the kunit test module, there is no need to load that module to execute
> them unless the user pattern matches at least one of those test cases.
>
> Don't load the kunit test module in execute mode before entering the loop
> of dynamic sub-subtests, and do that only from the first actually executed
> dynamic sub-subtest.
>
> v2: Always pass last result to next dynamic sub-subtest, fetch first
> result right after loading the kunit test module for execution.
>
> Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
> lib/igt_kmod.c | 66 ++++++++++++++++++++++++++------------------------
> 1 file changed, 35 insertions(+), 31 deletions(-)
>
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 150fe49803..69915adc40 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -981,33 +981,37 @@ static void __igt_kunit(struct igt_ktest *tst,
>
> igt_skip_on(lseek(tst->kmsg, 0, SEEK_END) < 0);
>
> - igt_skip_on(pthread_mutexattr_init(&attr));
> - igt_skip_on(pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST));
> - igt_skip_on(pthread_mutex_init(&modprobe.lock, &attr));
> -
> ktap = igt_ktap_alloc(&results);
> igt_require(ktap);
>
> - if (igt_debug_on(pthread_create(&modprobe.thread, NULL,
> - modprobe_task, &modprobe))) {
> - igt_ktap_free(ktap);
> - igt_skip("Failed to create a modprobe thread\n");
> - }
> -
> igt_list_for_each_entry(t, tests, link) {
> igt_dynamic_f("%s%s%s",
> strcmp(t->suite_name, name) ? t->suite_name : "",
> strcmp(t->suite_name, name) ? "-" : "",
> t->case_name) {
>
> - if (igt_list_empty(&results)) {
> + if (!modprobe.thread) {
> + igt_assert_eq(pthread_mutexattr_init(&attr), 0);
> + igt_assert_eq(pthread_mutexattr_setrobust(&attr,
> + PTHREAD_MUTEX_ROBUST),
> + 0);
> + igt_assert_eq(pthread_mutex_init(&modprobe.lock,
> + &attr), 0);
> +
> + modprobe.err = pthread_create(&modprobe.thread,
> + NULL,
> + modprobe_task,
> + &modprobe);
> + igt_assert_eq(modprobe.err, 0);
> +
> + igt_assert(igt_list_empty(&results));
> igt_assert_eq(ret, -EINPROGRESS);
> ret = kunit_kmsg_result_get(&results, &modprobe,
> tst->kmsg, ktap);
> igt_fail_on(igt_list_empty(&results));
> - }
>
> - r = igt_list_first_entry(&results, r, link);
> + r = igt_list_first_entry(&results, r, link);
> + }
>
> while (igt_debug_on_f(strcmp(r->suite_name, t->suite_name),
> "suite_name expected: %s, got: %s\n",
> @@ -1079,30 +1083,30 @@ static void __igt_kunit(struct igt_ktest *tst,
> igt_assert_eq(igt_kernel_tainted(&taints), 0);
> }
>
> - kunit_result_free(&r, &suite_name, &case_name);
> -
> if (igt_debug_on(ret != -EINPROGRESS))
> break;
> }
>
> kunit_results_free(&results, &suite_name, &case_name);
>
> - switch (pthread_mutex_lock(&modprobe.lock)) {
> - case 0:
> - igt_debug_on(pthread_cancel(modprobe.thread));
> - igt_debug_on(pthread_mutex_unlock(&modprobe.lock));
> - igt_debug_on(pthread_join(modprobe.thread, NULL));
> - break;
> - case EOWNERDEAD:
> - /* leave the mutex unrecoverable */
> - igt_debug_on(pthread_mutex_unlock(&modprobe.lock));
> - break;
> - case ENOTRECOVERABLE:
> - break;
> - default:
> - igt_debug("pthread_mutex_lock() failed\n");
> - igt_debug_on(pthread_join(modprobe.thread, NULL));
> - break;
> + if (modprobe.thread) {
> + switch (pthread_mutex_lock(&modprobe.lock)) {
> + case 0:
> + igt_debug_on(pthread_cancel(modprobe.thread));
> + igt_debug_on(pthread_mutex_unlock(&modprobe.lock));
> + igt_debug_on(pthread_join(modprobe.thread, NULL));
> + break;
> + case EOWNERDEAD:
> + /* leave the mutex unrecoverable */
> + igt_debug_on(pthread_mutex_unlock(&modprobe.lock));
> + break;
> + case ENOTRECOVERABLE:
> + break;
> + default:
> + igt_debug("pthread_mutex_lock() failed\n");
> + igt_debug_on(pthread_join(modprobe.thread, NULL));
> + break;
> + }
> }
>
> igt_ktap_free(ktap);
> --
> 2.42.0
>
More information about the Intel-gfx
mailing list