[Intel-gfx] [PATCH i-g-t] HAX: fast feedback irq affinity..

Maarten Lankhorst maarten.lankhorst at linux.intel.com
Thu Dec 14 11:49:05 UTC 2017


---
 tests/intel-ci/fast-feedback.testlist |  2 ++
 tests/pm_rpm.c                        | 62 +++++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index f71a16bcd191..e9322249dd73 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -293,3 +293,5 @@ igt at drv_module_reload@basic-reload
 igt at drv_module_reload@basic-no-display
 igt at drv_module_reload@basic-reload-inject
 igt at gvt_basic@invalid-placeholder-test
+igt at pm_rpm@irq-affinity
+igt at kms_vblank@crtc-id
diff --git a/tests/pm_rpm.c b/tests/pm_rpm.c
index fb26e384e236..943476dce3ef 100644
--- a/tests/pm_rpm.c
+++ b/tests/pm_rpm.c
@@ -1860,6 +1860,65 @@ static int opt_handler(int opt, int opt_index, void *data)
 	return 0;
 }
 
+static void irq_affinity_subtest(void)
+{
+	int fd, sysfs_fd;
+	char irq[6], irq_path[40];
+	ssize_t ret;
+
+	/* Disable irqbalance, we want to juggle this manually.. */
+	system("killall -STOP irqbalance");
+
+#define CPU "3"
+	
+	fd = open("/sys/devices/system/cpu/cpu" CPU "/online", O_WRONLY);
+	igt_require(fd >= 0);
+	igt_assert_eq(write(fd, "1\n", 2), 2);
+	close(fd);
+
+	/* Read irq number.. */
+	sysfs_fd = igt_sysfs_open(drm_fd, NULL);
+	fd = openat(sysfs_fd, "device/irq", O_RDONLY);
+	close(sysfs_fd);
+	ret = read(fd, irq, sizeof(irq));
+	igt_assert(ret > 0);
+	irq[ret - 1] = 0;
+	close(fd);
+
+	sprintf(irq_path, "/proc/irq/%s/smp_affinity_list", irq);
+	fd = open(irq_path, O_WRONLY);
+	igt_assert(fd >= 0);
+	igt_assert_eq(write(fd, CPU "\n", 2), 2);
+	close(fd);
+
+	disable_all_screens_and_wait(&ms_data);
+
+	igt_assert(igt_wait(device_in_pci_d3(), 2000, 100));
+
+	fd = open("/sys/devices/system/cpu/cpu" CPU "/online", O_WRONLY);
+	igt_assert(fd >= 0);
+	igt_assert_eq(write(fd, "0\n", 2), 2);
+	close(fd);
+
+	sprintf(irq_path, "/proc/irq/%s/smp_affinity_list", irq);
+	fd = open(irq_path, O_WRONLY);
+	igt_assert(fd >= 0);
+	igt_assert_eq(write(fd, "0\n", 2), 2);
+	close(fd);
+
+	igt_debug_wait_for_keypress("asdf");
+
+	enable_one_screen_and_wait(&ms_data);
+
+	fd = open("/sys/devices/system/cpu/cpu" CPU "/online", O_WRONLY);
+	igt_assert(fd >= 0);
+	igt_assert_eq(write(fd, "1\n", 2), 2);
+	close(fd);
+
+	system("killall -CONT irqbalance");
+}
+
+
 int main(int argc, char *argv[])
 {
 	const char *help_str =
@@ -1989,6 +2048,9 @@ int main(int argc, char *argv[])
 	igt_subtest("pm-caching")
 		pm_test_caching();
 
+	igt_subtest("irq-affinity")
+		irq_affinity_subtest();
+
 	igt_fixture
 		teardown_environment();
 
-- 
2.15.1



More information about the Intel-gfx mailing list