summaryrefslogtreecommitdiff
path: root/tests/drm_mm.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-12-01 21:49:43 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2016-12-01 21:49:43 +0000
commit7a06e13ba1e3b2ac79699e835fde9652eac6f71f (patch)
tree37e2657c7efa25b883efcdb2af3a8ad3646ea68f /tests/drm_mm.c
parentf4361523cb35b95417eda3a0957d312127204c34 (diff)
lib/igt_kmod: Adopt igt_kselftests()
Extract the automagic kselftest runner from tests/drm_mm.c to the new lib/igt_kmod.c Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/drm_mm.c')
-rw-r--r--tests/drm_mm.c97
1 files changed, 1 insertions, 96 deletions
diff --git a/tests/drm_mm.c b/tests/drm_mm.c
index b95fcb34..dbd0cc28 100644
--- a/tests/drm_mm.c
+++ b/tests/drm_mm.c
@@ -22,105 +22,10 @@
*/
#include "igt.h"
-#include <libkmod.h>
+#include "igt_kmod.h"
IGT_TEST_DESCRIPTION("Basic sanity check of DRM's range manager (struct drm_mm)");
-static void squelch(void *data, int priority,
- const char *file, int line, const char *fn,
- const char *format, va_list args)
-{
-}
-
-static void kmsg_dump(int fd)
-{
- FILE *file;
-
- file = NULL;
- if (fd != -1)
- file = fdopen(fd, "r");
- if (file) {
- size_t len = 0;
- char *line = NULL;
-
- while (getline(&line, &len, file) != -1) {
- char *start = strchr(line, ':');
- if (start)
- igt_warn("%s", start + 2);
- }
-
- free(line);
- fclose(file);
- } else {
- igt_warn("Unable to retrieve kernel log (from /dev/kmsg)\n");
- }
-}
-
-static void igt_kselftests(const char *module_name)
-{
- struct kmod_ctx *ctx;
- struct kmod_module *kmod;
- struct kmod_list *d, *pre;
- int err, kmsg = -1;
-
- ctx = kmod_new(NULL, NULL);
- igt_assert(ctx != NULL);
-
- kmod_set_log_fn(ctx, squelch, NULL);
-
- igt_require(kmod_module_new_from_name(ctx, module_name, &kmod) == 0);
- igt_fixture {
- err = kmod_module_remove_module(kmod, KMOD_REMOVE_FORCE);
- igt_require(err == 0 || err == -ENOENT);
-
- kmsg = open("/dev/kmsg", O_RDONLY | O_NONBLOCK);
- }
-
- pre = NULL;
- if (kmod_module_get_info(kmod, &pre)) {
- kmod_list_foreach(d, pre) {
- const char *key, *val;
- char *option, *colon;
-
- key = kmod_module_info_get_key(d);
- if (strcmp(key, "parmtype"))
- continue;
-
- val = kmod_module_info_get_value(d);
- if (!val || strncmp(val, "subtest__", 9))
- continue;
-
- option = strdup(val);
- colon = strchr(option, ':');
- *colon = '\0';
-
- igt_subtest_f("%s", option + 9) {
- lseek(kmsg, 0, SEEK_END);
- strcpy(colon, "=1");
-
- err = 0;
- if (kmod_module_insert_module(kmod, 0, option))
- err = -errno;
- kmod_module_remove_module(kmod, 0);
- if (err)
- kmsg_dump(kmsg);
-
- errno = 0;
- igt_assert_f(err == 0,
- "kselftest \"%s %s\" failed: %s [%d]\n",
- module_name, option,
- strerror(-err), -err);
- }
- }
- kmod_module_info_free_list(pre);
- }
-
- igt_fixture {
- close(kmsg);
- kmod_module_remove_module(kmod, KMOD_REMOVE_FORCE);
- }
-}
-
igt_main
{
igt_kselftests("test-drm_mm");