mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: unit: Argument to run single unit
Specify a unit to run from the command line, especially useful as the number of units is increasing. The argument behaves as a wildcard. All units that contain the argument in the name will be executed. JIRA NVGPU-1246 Change-Id: Ia650929751a0acd83fc034fbeb0fd7df8d39e48d Signed-off-by: Nicolas Benech <nbenech@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1967082 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Philip Elcan <pelcan@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
9d92695e97
commit
48648cfc58
@@ -48,6 +48,7 @@ struct unit_fw_args {
|
|||||||
|
|
||||||
const char *unit_name;
|
const char *unit_name;
|
||||||
const char *unit_load_path;
|
const char *unit_load_path;
|
||||||
|
const char *unit_to_run;
|
||||||
};
|
};
|
||||||
|
|
||||||
int core_parse_args(struct unit_fw *fw, int argc, char **argv);
|
int core_parse_args(struct unit_fw *fw, int argc, char **argv);
|
||||||
|
|||||||
@@ -155,5 +155,13 @@ int core_parse_args(struct unit_fw *fw, int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there is an extra argument after the command-line options, then
|
||||||
|
* it is a unit test name that need to be specifically run.
|
||||||
|
*/
|
||||||
|
if (optind < argc) {
|
||||||
|
args->unit_to_run = argv[optind];
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,14 @@ static struct unit_module *load_one_module(struct unit_fw *fw,
|
|||||||
|
|
||||||
core_vbs(fw, 1, "Loading: %s\n", dent->d_name);
|
core_vbs(fw, 1, "Loading: %s\n", dent->d_name);
|
||||||
|
|
||||||
|
if (fw->args->unit_to_run != NULL) {
|
||||||
|
if (strstr(dent->d_name, fw->args->unit_to_run) == NULL) {
|
||||||
|
core_vbs(fw, 1, " Skipping unit (not *%s*)\n",
|
||||||
|
fw->args->unit_to_run);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lib_handle = dlopen(dent->d_name, RTLD_NOW);
|
lib_handle = dlopen(dent->d_name, RTLD_NOW);
|
||||||
if (lib_handle == NULL) {
|
if (lib_handle == NULL) {
|
||||||
core_err(fw, "Failed to load %s: %s\n",
|
core_err(fw, "Failed to load %s: %s\n",
|
||||||
|
|||||||
@@ -70,15 +70,25 @@ int main(int argc, char **argv)
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
if (fw->results == NULL) {
|
||||||
|
core_msg(fw, "No tests were run!\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
core_print_test_status(fw);
|
core_print_test_status(fw);
|
||||||
|
|
||||||
if (fw->results->nr_tests == 0) {
|
if ((fw->results->nr_tests - fw->results->nr_passing) != 0) {
|
||||||
/* No tests were run */
|
|
||||||
return -1;
|
|
||||||
} else if ((fw->results->nr_tests - fw->results->nr_passing) != 0) {
|
|
||||||
/* Some tests failed */
|
/* Some tests failed */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fw->args->unit_to_run != NULL) {
|
||||||
|
/*
|
||||||
|
* Just in case (especially when running in automation), return
|
||||||
|
* a failure if only executed a subset of the units
|
||||||
|
*/
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user