* [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd
@ 2018-09-14 15:02 Alexey Kodanev
2018-09-14 15:02 ` [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter Alexey Kodanev
2018-09-19 13:23 ` [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd Petr Vorel
0 siblings, 2 replies; 5+ messages in thread
From: Alexey Kodanev @ 2018-09-14 15:02 UTC (permalink / raw)
To: ltp
The drivers are checked with modprobe. If modprobe is not available
on the system, the checks are silently skipped.
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
v3: * Changed the docs according to the Cyril's comment
* Added curly braces in tst_check_drivers.c
* Added dry-run option to modprobe
v2: * moved tst_check_driver() from tst_test.h to tst_kernel.h
* added the new option description to the doc and comment to tst_kernel.h
* iterating over the driver list moved out from tst_check_drivers(), the
function renamed accordingly.
doc/test-writing-guidelines.txt | 11 +++++++++++
include/tst_kernel.h | 8 ++++++++
include/tst_test.h | 3 +++
lib/tst_kernel.c | 9 +++++++++
lib/tst_test.c | 9 +++++++++
testcases/lib/.gitignore | 1 +
testcases/lib/Makefile | 2 +-
testcases/lib/tst_check_drivers.c | 25 +++++++++++++++++++++++++
8 files changed, 67 insertions(+), 1 deletions(-)
create mode 100644 testcases/lib/tst_check_drivers.c
diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt
index aae2b38..78c524f 100644
--- a/doc/test-writing-guidelines.txt
+++ b/doc/test-writing-guidelines.txt
@@ -1457,6 +1457,17 @@ https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
CRC32c checksum generation is supported by LTP. In order to use it, the
test should include "tst_checksum.h" header, then can call tst_crc32c().
+2.2.26 Checking kernel for the driver support
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Some tests may need specific kernel drivers, either compiled in, or built
+as a module. If .need_drivers points to a NULL-terminated array of kernel
+module names these are all checked and the test exits with TCONF on the
+first missing driver.
+
+Since it relies on modprobe command, the check will be skipped if the command
+itself is not available on the system.
+
2.3 Writing a testcase in shell
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/include/tst_kernel.h b/include/tst_kernel.h
index 5d5c04c..88941e1 100644
--- a/include/tst_kernel.h
+++ b/include/tst_kernel.h
@@ -23,4 +23,12 @@
*/
int tst_kernel_bits(void);
+/**
+ * Checks support for the kernel driver.
+ *
+ * @param name The name of the driver.
+ * @return Returns 0 if the kernel has the driver or modprobe is missing.
+ */
+int tst_check_driver(const char *name);
+
#endif /* TST_KERNEL_H__ */
diff --git a/include/tst_test.h b/include/tst_test.h
index ea23c8b..080b017 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -172,6 +172,9 @@ struct tst_test {
/* NULL terminated array of resource file names */
const char *const *resource_files;
+
+ /* NULL terminated array of needed kernel drivers */
+ const char * const *needs_drivers;
};
/*
diff --git a/lib/tst_kernel.c b/lib/tst_kernel.c
index 42d64cb..4206e3c 100644
--- a/lib/tst_kernel.c
+++ b/lib/tst_kernel.c
@@ -45,3 +45,12 @@ int tst_kernel_bits(void)
return kernel_bits;
}
+
+int tst_check_driver(const char *name)
+{
+ const char * const argv[] = { "modprobe", "-n", name, NULL };
+ int res = tst_run_cmd_(NULL, argv, "/dev/null", "/dev/null", 1);
+
+ /* 255 - it looks like modprobe not available */
+ return (res == 255) ? 0 : res;
+}
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 1280400..117e614 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -784,6 +784,15 @@ static void do_setup(int argc, char *argv[])
if (tst_test->min_kver)
check_kver();
+ if (tst_test->needs_drivers) {
+ const char *name;
+ int i;
+
+ for (i = 0; (name = tst_test->needs_drivers[i]); ++i)
+ if (tst_check_driver(name))
+ tst_brk(TCONF, "%s driver not available", name);
+ }
+
if (tst_test->format_device)
tst_test->needs_device = 1;
diff --git a/testcases/lib/.gitignore b/testcases/lib/.gitignore
index a9034e4..d83a48e 100644
--- a/testcases/lib/.gitignore
+++ b/testcases/lib/.gitignore
@@ -1,5 +1,6 @@
/tst_sleep
/tst_random
+/tst_check_drivers
/tst_checkpoint
/tst_rod
/tst_kvcmp
diff --git a/testcases/lib/Makefile b/testcases/lib/Makefile
index 3547e16..e1dea3b 100644
--- a/testcases/lib/Makefile
+++ b/testcases/lib/Makefile
@@ -28,6 +28,6 @@ INSTALL_TARGETS := *.sh
MAKE_TARGETS := tst_sleep tst_random tst_checkpoint tst_rod tst_kvcmp\
tst_device tst_net_iface_prefix tst_net_ip_prefix tst_net_vars\
- tst_getconf tst_supported_fs
+ tst_getconf tst_supported_fs tst_check_drivers
include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/lib/tst_check_drivers.c b/testcases/lib/tst_check_drivers.c
new file mode 100644
index 0000000..e21bdab
--- /dev/null
+++ b/testcases/lib/tst_check_drivers.c
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright (c) 2018 Oracle and/or its affiliates. All Rights Reserved. */
+
+#include <stdio.h>
+#include "tst_kernel.h"
+
+int main(int argc, const char *argv[])
+{
+ const char *name;
+ int i;
+
+ if (argc < 2) {
+ fprintf(stderr, "Please provide kernel driver list\n");
+ return 1;
+ }
+
+ for (i = 1; (name = argv[i]); ++i) {
+ if (tst_check_driver(name)) {
+ fprintf(stderr, "%s", name);
+ return 1;
+ }
+ }
+
+ return 0;
+}
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter
2018-09-14 15:02 [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd Alexey Kodanev
@ 2018-09-14 15:02 ` Alexey Kodanev
2018-09-19 13:29 ` Petr Vorel
2018-09-19 13:23 ` [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd Petr Vorel
1 sibling, 1 reply; 5+ messages in thread
From: Alexey Kodanev @ 2018-09-14 15:02 UTC (permalink / raw)
To: ltp
The drivers are checked with 'tst_check_drivers' command.
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
v3: check the command exit status instead of the returned error message
v2: add a check for empty TST_NEEDS_DRIVERS
doc/test-writing-guidelines.txt | 1 +
testcases/lib/tst_test.sh | 14 ++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt
index 78c524f..f590896 100644
--- a/doc/test-writing-guidelines.txt
+++ b/doc/test-writing-guidelines.txt
@@ -1662,6 +1662,7 @@ simply by setting right '$TST_NEEDS_FOO'.
| 'TST_NEEDS_CMDS' | String with command names that has to be present for
the test (see below).
| 'TST_NEEDS_MODULE' | Test module name needed for the test (see below).
+| 'TST_NEEDS_DRIVERS'| Checks kernel drivers support for the test.
|=============================================================================
Checking for presence of commands
diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
index faf3bd5..7a41309 100644
--- a/testcases/lib/tst_test.sh
+++ b/testcases/lib/tst_test.sh
@@ -302,6 +302,18 @@ tst_check_cmds()
return 0
}
+tst_test_drivers()
+{
+ [ $# -eq 0 ] && return 0
+
+ local drv
+
+ drv="$(tst_check_drivers $@ 2>&1)"
+
+ [ $? -ne 0 ] && tst_brk TCONF "$drv driver not available"
+ return 0
+}
+
tst_is_int()
{
[ "$1" -eq "$1" ] 2>/dev/null
@@ -349,6 +361,7 @@ tst_run()
OPTS|USAGE|PARSE_ARGS|POS_ARGS);;
NEEDS_ROOT|NEEDS_TMPDIR|NEEDS_DEVICE|DEVICE);;
NEEDS_CMDS|NEEDS_MODULE|MODPATH|DATAROOT);;
+ NEEDS_DRIVERS);;
IPV6|IPVER|TEST_DATA|TEST_DATA_IFS);;
RETRY_FUNC|RETRY_FN_EXP_BACKOFF);;
*) tst_res TWARN "Reserved variable TST_$_tst_i used!";;
@@ -386,6 +399,7 @@ tst_run()
fi
tst_test_cmds $TST_NEEDS_CMDS
+ tst_test_drivers $TST_NEEDS_DRIVERS
if [ -n "$TST_MIN_KVER" ]; then
tst_kvcmp -lt "$TST_MIN_KVER" && \
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd
2018-09-14 15:02 [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd Alexey Kodanev
2018-09-14 15:02 ` [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter Alexey Kodanev
@ 2018-09-19 13:23 ` Petr Vorel
1 sibling, 0 replies; 5+ messages in thread
From: Petr Vorel @ 2018-09-19 13:23 UTC (permalink / raw)
To: ltp
Hi Alexey,
> The drivers are checked with modprobe. If modprobe is not available
> on the system, the checks are silently skipped.
> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Reviewed-by: Petr Vorel <petr.vorel@gmail.com>
> ---
> v3: * Changed the docs according to the Cyril's comment
> * Added curly braces in tst_check_drivers.c
> * Added dry-run option to modprobe
I like this change as it allows to load module with parameters later.
Kind regards,
Petr
^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter
2018-09-14 15:02 ` [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter Alexey Kodanev
@ 2018-09-19 13:29 ` Petr Vorel
2018-09-20 11:51 ` Alexey Kodanev
0 siblings, 1 reply; 5+ messages in thread
From: Petr Vorel @ 2018-09-19 13:29 UTC (permalink / raw)
To: ltp
Hi Alexey,
> The drivers are checked with 'tst_check_drivers' command.
> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Reviewed-by: Petr Vorel <petr.vorel@gmail.com>
> ---
> v3: check the command exit status instead of the returned error message
Kind regards,
Petr
^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter
2018-09-19 13:29 ` Petr Vorel
@ 2018-09-20 11:51 ` Alexey Kodanev
0 siblings, 0 replies; 5+ messages in thread
From: Alexey Kodanev @ 2018-09-20 11:51 UTC (permalink / raw)
To: ltp
On 09/19/2018 04:29 PM, Petr Vorel wrote:
> Hi Alexey,
>
>> The drivers are checked with 'tst_check_drivers' command.
>
>> Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
> Reviewed-by: Petr Vorel <petr.vorel@gmail.com>
Both patches applied, thanks for review!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-09-20 11:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-14 15:02 [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd Alexey Kodanev
2018-09-14 15:02 ` [LTP] [PATCH v3 2/2] lib/tst_test.sh: add TST_NEEDS_DRIVERS parameter Alexey Kodanev
2018-09-19 13:29 ` Petr Vorel
2018-09-20 11:51 ` Alexey Kodanev
2018-09-19 13:23 ` [LTP] [PATCH v3 1/2] lib/tst_test.c: add 'needs_drivers' option with tst_check_drivers cmd Petr Vorel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.