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

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)

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);

View File

@ -206,11 +206,6 @@ static void test_read_crc(data_t *data, int pipe, unsigned flags)
}
static void exit_handler(int sig)
{
igt_pipe_crc_reset();
}
int main(int argc, char **argv)
{
data_t data = {0, };
@ -226,7 +221,6 @@ int main(int argc, char **argv)
data.drm_fd = drm_open_any();
do_or_die(igt_set_vt_graphics_mode());
do_or_die(igt_install_exit_handler(exit_handler));
display_init(&data);
@ -262,7 +256,6 @@ int main(int argc, char **argv)
}
igt_fixture {
igt_pipe_crc_reset();
display_fini(&data);
fclose(data.ctl);
}

View File

@ -304,11 +304,6 @@ static void run_test(data_t *data, enum cursor_type cursor_type, bool onscreen)
igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
}
static void exit_handler(int sig)
{
igt_pipe_crc_reset();
}
static void create_cursor_fb(data_t *data,
enum cursor_type cursor_type,
double r, double g, double b, double a)
@ -340,7 +335,6 @@ int main(int argc, char **argv)
data.drm_fd = drm_open_any();
do_or_die(igt_set_vt_graphics_mode());
do_or_die(igt_install_exit_handler(exit_handler));
igt_debugfs_init(&data.debugfs);
data.ctl = igt_debugfs_fopen(&data.debugfs,
@ -378,7 +372,6 @@ int main(int argc, char **argv)
run_test(&data, BLACK_INVISIBLE, false);
igt_fixture {
igt_pipe_crc_reset();
display_fini(&data);
fclose(data.ctl);
}