From 7ea2983b119a13f535a9a01fbfd28a05eb3014f2 Mon Sep 17 00:00:00 2001 From: Xiong Zhang Date: Fri, 19 Jul 2013 18:42:51 +0800 Subject: [PATCH] lib/drmtest: add drmtest_disable/enable_prefault() function V2: add exit handler to enable prefault (Daniel) Signed-off-by: Xiong Zhang --- lib/drmtest.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/drmtest.h | 3 +++ 2 files changed, 53 insertions(+) diff --git a/lib/drmtest.c b/lib/drmtest.c index a9a7498..49742b7 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -1605,3 +1605,53 @@ void kmstest_free_connector_config(struct kmstest_connector_config *config) drmModeFreeEncoder(config->encoder); drmModeFreeConnector(config->connector); } + +#define PREFAULT_DEBUGFS "/sys/module/i915/parameters/prefault_disable" +static int drmtest_prefault_control(bool enable) +{ + char *name = PREFAULT_DEBUGFS; + int fd; + char buf[2] = {'Y', 'N'}; + int index; + int result = 0; + + fd = open(name, O_RDWR); + if (fd == -1) { + fprintf(stderr, "Couldn't open prefault_debugfs.%s\n", + strerror(errno)); + return -1; + } + + if (enable) + index = 1; + else + index = 0; + + if (write(fd, &buf[index], 1) != 1) { + fprintf(stderr, "write prefault_debugfs error.%s\n", + strerror(errno)); + result = -1; + } + + close(fd); + + return result; +} + +static void enable_prefault_at_exit(int sig) +{ + drmtest_enable_prefault(); +} + +int drmtest_disable_prefault(void) +{ + drmtest_install_exit_handler(enable_prefault_at_exit); + + return drmtest_prefault_control(false); +} + +int drmtest_enable_prefault(void) +{ + return drmtest_prefault_control(true); +} + diff --git a/lib/drmtest.h b/lib/drmtest.h index c31fed1..1a1d1d9 100644 --- a/lib/drmtest.h +++ b/lib/drmtest.h @@ -180,3 +180,6 @@ void drmtest_enable_exit_handler(void); void drmtest_disable_exit_handler(void); int drmtest_set_vt_graphics_mode(void); + +int drmtest_disable_prefault(void); +int drmtest_enable_prefault(void); -- 2.7.4