[Intel-gfx] [i-g-t PATCH v3 3/3] Convert shell script tests to C version

Abdiel Janulgue abdiel.janulgue at linux.intel.com
Tue Jun 13 10:22:16 UTC 2017



On 12.06.2017 14:14, Arkadiusz Hiler wrote:
> On Tue, Jun 06, 2017 at 11:54:14AM +0300, Abdiel Janulgue wrote:
>> v3: Drop redundant test covered by drv_hangman/basic. Descend thru
>>     debugfs path when reading sysfs entries (Chris).
>>
>> v2: Use internal igt_debugfs functions instead of cat and document
>>     debugfs tests.
>>     Convert sysfs_l3_parity properly.
>>     Rename redundant names in tests.
>>
>> Converted:
>>  - check_drm_clients (ensures no other clients are running.
>>    functionality provided by drm_open_driver_master).
>>  - debugfs_emon_crash
>>  - debugfs_wedged
>>  - drv_debugfs_reader
>>  - sysfs_l3_parity
>>  - test_rte_check  (same as check_drm_clients)
>>  - tools_test
>>  - ZZ_check_dmesg
> 
> Hey,
> 
> Doing each tool in a separate commit would help with readability.

Will do.

> 
>>
>> Cc: Petri Latvala <petri.latvala at intel.com>
>> Signed-off-by: Abdiel Janulgue <abdiel.janulgue at linux.intel.com>
>> ---
>>  tests/Makefile.sources   |   9 +---
>>  tests/ZZ_check_dmesg     |  11 -----
>>  tests/check_drm_clients  |   6 ---
>>  tests/debugfs.c          |  96 +++++++++++++++++++++++++++++++++++++
>>  tests/debugfs_emon_crash |  16 -------
>>  tests/debugfs_wedged     |  10 ----
>>  tests/drv_debugfs_reader |   9 ----
>>  tests/sysfs_l3_parity    |  22 ---------
>>  tests/test_rte_check     |   6 ---
>>  tests/tools.c            | 122 +++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/tools_test         |  16 -------
>>  11 files changed, 220 insertions(+), 103 deletions(-)
>>  delete mode 100755 tests/ZZ_check_dmesg
>>  delete mode 100755 tests/check_drm_clients
>>  create mode 100644 tests/debugfs.c
>>  delete mode 100755 tests/debugfs_emon_crash
>>  delete mode 100755 tests/debugfs_wedged
>>  delete mode 100755 tests/drv_debugfs_reader
>>  delete mode 100755 tests/sysfs_l3_parity
>>  delete mode 100755 tests/test_rte_check
>>  create mode 100644 tests/tools.c
>>  delete mode 100755 tests/tools_test
>>
>> diff --git a/tests/Makefile.sources b/tests/Makefile.sources
>> index 9553e4d..c4a78a9 100644
>> --- a/tests/Makefile.sources
>> +++ b/tests/Makefile.sources
>> @@ -243,6 +243,8 @@ TESTS_progs = \
>>  	drv_module_reload \
>>  	kms_sysfs_edid_timing \
>>  	perf \
>> +	debugfs \
> 
> The name clashes on AOSP build:
> build/core/base_rules.mk:238: error: external/igt/tests: MODULE.TARGET.EXECUTABLES.debugfs already defined by external/e2fsprogs/debugfs.
> 
> debugfs is a name of a binary that debugs ext{2,3,4} family of FSes.
> 
> I have to look into the build system and our Android.mks more deeply as
> IGTs output binaries should be stored elsewhere and the clash is rather
> enigmatic.
> 
> Also are we changing names of the test? I thought it was only a rewrite.

It's just a rewrite. Now that we combine those debugfs_* scripts into
one executable, maybe just the prefix would suffice? How about
debugfs_tests.c?

> 
>> +	tools \
>>  	$(NULL)
>>  
>>  # IMPORTANT: The ZZ_ tests need to be run last!
>> @@ -251,11 +253,6 @@ TESTS_scripts_M = \
>>  	$(NULL)
>>  
>>  TESTS_scripts = \
>> -	debugfs_emon_crash \
>> -	drv_debugfs_reader \
>> -	sysfs_l3_parity \
>> -	test_rte_check \
>> -	tools_test \
>>  	$(NULL)
> 
> TESTS_scripts now is only $(NULL), so you may as well just remove it
> from the `kernel_tests` variable and get rid of it completely.
> 
>>  
>>  # This target contains testcases which support automagic subtest enumeration
>> @@ -317,9 +314,7 @@ HANG = \
>>  	$(NULL)
>>  
>>  scripts = \
>> -	check_drm_clients \
>>  	ddx_intel_after_fbdev \
>> -	debugfs_wedged \
>>  	drm_lib.sh \
>>  	drm_getopt.sh \
>>  	$(NULL)
> 
> <SNIP>
> 
>> diff --git a/tests/debugfs.c b/tests/debugfs.c
>> new file mode 100644
>> index 0000000..b9ae86c
>> --- /dev/null
>> +++ b/tests/debugfs.c
>> @@ -0,0 +1,96 @@
>> +/*
>> + * Copyright © 2017 Intel Corporation
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining a
>> + * copy of this software and associated documentation files (the "Software"),
>> + * to deal in the Software without restriction, including without limitation
>> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
>> + * and/or sell copies of the Software, and to permit persons to whom the
>> + * Software is furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice (including the next
>> + * paragraph) shall be included in all copies or substantial portions of the
>> + * Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
>> + * IN THE SOFTWARE.
>> + */
>> +#ifdef HAVE_CONFIG_H
>> +#include "config.h"
>> +#endif
>> +#include "igt.h"
>> +#include "igt_sysfs.h"
>> +#include <fcntl.h>
>> +#include <sys/types.h>
>> +#include <dirent.h>
>> +
>> +static void get_sysfs_entry(int path_fd)
> 
> I was a little bit confused by the function - we are not getting
> anything from it. Just reading and discarding.
> 
> Maybe read_and_discard_sysfs_entry? A comment would also do.

read_and_discard_sysfs_entry() sounds better.

> 
>> +{
>> +	struct dirent *dirent;
>> +	DIR *dir;
>> +
>> +	dir = fdopendir(path_fd);
>> +	if (!dir)
>> +		return;
>> +
>> +	while ((dirent = readdir(dir))) {
>> +		if (!strcmp(dirent->d_name, ".") ||
>> +		    !strcmp(dirent->d_name, ".."))
>> +			continue;
>> +		if (dirent->d_type == DT_DIR) {
>> +			int sub_fd = -1;
>> +			igt_assert((sub_fd =
>> +				    openat(path_fd, dirent->d_name, O_RDONLY |
>> +					   O_DIRECTORY)) > 0);
>> +			get_sysfs_entry(sub_fd);
>> +			close(sub_fd);
>> +		} else {
>> +			char *buf = igt_sysfs_get(path_fd, dirent->d_name);
> 
> igt_sysfs_get may get us NULL.
> Shouldn't we assert on that? It's an error-worthy.

Yep.

> <SNIP>

>> +		igt_assert(asprintf(&cmd, "dmesg | grep "
>> +				    "-- '------\\[ cut here \\]----'")
>> +			   != -1);
>> +		igt_assert(igt_system_quiet(cmd) != IGT_EXIT_SUCCESS);
>> +		free(cmd);
> 
> Are we testing the dmesg here?
> 
> If not they why systeming out "dmesg | grep" instead of going through
> /dev/kmsg?

Yes. This could be improved. Thanks for the review!


More information about the Intel-gfx mailing list