lib: consolidate pipe crc exit handler

No need to sprinkle this all over:
- exit handlers will only be registered once
- they're always called when exiting, so no need to explictly call
  them.

This allows us to hide all the pipe crc cleanup in the library.

Cc: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Daniel Vetter
2013-10-31 16:09:46 +01:00
parent 43def94f32
commit 0369fe19b8
4 changed files with 30 additions and 41 deletions
+30 -26
View File
@@ -177,6 +177,34 @@ static bool igt_pipe_crc_do_start(igt_pipe_crc_t *pipe_crc)
return true;
}
static void igt_pipe_crc_pipe_off(int fd, enum pipe pipe)
{
char buf[32];
sprintf(buf, "pipe %c none", pipe_name(pipe));
write(fd, buf, strlen(buf));
}
static void igt_pipe_crc_reset(void)
{
igt_debugfs_t debugfs;
int fd;
igt_debugfs_init(&debugfs);
fd = igt_debugfs_open(&debugfs, "i915_display_crc_ctl", O_WRONLY);
igt_pipe_crc_pipe_off(fd, PIPE_A);
igt_pipe_crc_pipe_off(fd, PIPE_B);
igt_pipe_crc_pipe_off(fd, PIPE_C);
close(fd);
}
static void pipe_crc_exit_handler(int sig)
{
igt_pipe_crc_reset();
}
igt_pipe_crc_t *
igt_pipe_crc_new(igt_debugfs_t *debugfs, int drm_fd, enum pipe pipe,
enum intel_pipe_crc_source source)
@@ -184,6 +212,8 @@ igt_pipe_crc_new(igt_debugfs_t *debugfs, int drm_fd, enum pipe pipe,
igt_pipe_crc_t *pipe_crc;
char buf[128];
do_or_die(igt_install_exit_handler(pipe_crc_exit_handler));
pipe_crc = calloc(1, sizeof(struct _igt_pipe_crc));
pipe_crc->ctl_fd = igt_debugfs_open(debugfs,
@@ -211,32 +241,6 @@ igt_pipe_crc_new(igt_debugfs_t *debugfs, int drm_fd, enum pipe pipe,
return pipe_crc;
}
static void igt_pipe_crc_pipe_off(int fd, enum pipe pipe)
{
char buf[32];
sprintf(buf, "pipe %c none", pipe_name(pipe));
write(fd, buf, strlen(buf));
}
/*
* Turn off everything
*/
void igt_pipe_crc_reset(void)
{
igt_debugfs_t debugfs;
int fd;
igt_debugfs_init(&debugfs);
fd = igt_debugfs_open(&debugfs, "i915_display_crc_ctl", O_WRONLY);
igt_pipe_crc_pipe_off(fd, PIPE_A);
igt_pipe_crc_pipe_off(fd, PIPE_B);
igt_pipe_crc_pipe_off(fd, PIPE_C);
close(fd);
}
void igt_pipe_crc_free(igt_pipe_crc_t *pipe_crc)
{
if (!pipe_crc)
-1
View File
@@ -73,7 +73,6 @@ char *igt_crc_to_string(igt_crc_t *crc);
igt_pipe_crc_t *
igt_pipe_crc_new(igt_debugfs_t *debugfs, int drm_fd, enum pipe pipe,
enum intel_pipe_crc_source source);
void igt_pipe_crc_reset(void);
void igt_pipe_crc_free(igt_pipe_crc_t *pipe_crc);
bool igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc);
void igt_pipe_crc_stop(igt_pipe_crc_t *pipe_crc);