[Intel-gfx] [PATCH 2/4] lib: Add igt_drop_caches_set()

Mateo Lozano, Oscar oscar.mateo at intel.com
Mon Nov 4 18:22:16 CET 2013


> > This is basically a "drop cache" interface to the igt_debugfs
> > facilities. Also, update existing users.
> >
> > Signed-off-by: Oscar Mateo <oscar.mateo at intel.com>
> > Cc: Damien Lespiau <damien.lespiau at intel.com>
> > ---
> >  lib/igt_debugfs.c             |   28 ++++++++++++++++++++++++++++
> >  lib/igt_debugfs.h             |   15 +++++++++++++++
> >  tests/gem_persistent_relocs.c |   15 ++++-----------
> >  tests/gem_reloc_vs_gpu.c      |   15 ++++-----------
> >  4 files changed, 51 insertions(+), 22 deletions(-)
> >
> > diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c index
> > 0319eff..fc274fd 100644
> > --- a/lib/igt_debugfs.c
> > +++ b/lib/igt_debugfs.c
> > @@ -316,3 +316,31 @@ igt_pipe_crc_get_crcs(igt_pipe_crc_t *pipe_crc,
> > int n_crcs,
> >
> >  	*out_crcs = crcs;
> >  }
> > +
> > +/*
> > + * Drop caches
> > + */
> > +
> > +int igt_drop_caches_set(uint64_t val) {
> > +	igt_debugfs_t debugfs;
> > +	int fd;
> > +	char data[19];
> > +	size_t nbytes;
> > +	int ret = -1;
> > +
> > +	sprintf(data, "0x%" PRIx64, val);
> > +
> > +	igt_debugfs_init(&debugfs);
> > +	fd = igt_debugfs_open(&debugfs, "i915_gem_drop_caches",
> O_WRONLY);
> > +
> > +	if (fd >= 0)
> > +	{
> > +		nbytes = write(fd, data, strlen(data) + 1);
> > +		if (nbytes == strlen(data) + 1)
> > +			ret = 0;
> > +		close(fd);
> > +	}
> > +
> > +	return ret;
> > +}
> 
> Just a quick style nitpick on igt helpers: If no one cares about the return value
> then it's simpler to just sprinkle igt_asserts into the helper and make the
> function never fail. I'll bikeshed that in a patch on top of your series.
> -Daniel

Well, I left the return value so that the user could decide whether or not to assert (e.g. gem_reloc_vs_gpu probably wants to assert, but if we end up adding a call to igt_drop_caches_set() inside gem_quiescent_gpu() and we assert, then we are virtually making *all* tests depend on i915_gem_drop_caches being available...). You know better than anyone if what I just said makes sense, so I´ll leave the ultimate decision to you :)

> > diff --git a/lib/igt_debugfs.h b/lib/igt_debugfs.h index
> > c2810ee..02f4afa 100644
> > --- a/lib/igt_debugfs.h
> > +++ b/lib/igt_debugfs.h
> > @@ -79,4 +79,19 @@ void igt_pipe_crc_stop(igt_pipe_crc_t *pipe_crc);
> > void igt_pipe_crc_get_crcs(igt_pipe_crc_t *pipe_crc, int n_crcs,
> >  			   igt_crc_t **out_crcs);
> >
> > +/*
> > + * Drop caches
> > + */
> > +
> > +#define DROP_UNBOUND 0x1
> > +#define DROP_BOUND 0x2
> > +#define DROP_RETIRE 0x4
> > +#define DROP_ACTIVE 0x8
> > +#define DROP_ALL (DROP_UNBOUND | \
> > +		  DROP_BOUND | \
> > +		  DROP_RETIRE | \
> > +		  DROP_ACTIVE)
> > +
> > +int igt_drop_caches_set(uint64_t val);
> > +
> >  #endif /* __IGT_DEBUGFS_H__ */
> > diff --git a/tests/gem_persistent_relocs.c
> > b/tests/gem_persistent_relocs.c index 34d8492..863f464 100644
> > --- a/tests/gem_persistent_relocs.c
> > +++ b/tests/gem_persistent_relocs.c
> > @@ -42,6 +42,7 @@
> >  #include "intel_bufmgr.h"
> >  #include "intel_batchbuffer.h"
> >  #include "intel_gpu_tools.h"
> > +#include "igt_debugfs.h"
> >
> >  /*
> >   * Testcase: Persistent relocations as used by uxa/libva @@ -287,21
> > +288,13 @@ static void do_forked_test(int fd, unsigned flags)
> >  	struct igt_helper_process thrasher = {};
> >
> >  	if (flags & (THRASH | THRASH_INACTIVE)) {
> > -		char fname[FILENAME_MAX];
> > -		int drop_caches_fd;
> > -		const char *data = (flags & THRASH_INACTIVE) ? "0x7" : "0xf";
> > -
> > -		snprintf(fname, FILENAME_MAX, "%s/%i/%s",
> > -			 "/sys/kernel/debug/dri", drm_get_card(),
> > -			 "i915_gem_drop_caches");
> > -
> > -		drop_caches_fd = open(fname, O_WRONLY);
> > -		igt_require(drop_caches_fd >= 0);
> > +		uint64_t val = (flags & THRASH_INACTIVE) ?
> > +				(DROP_RETIRE | DROP_BOUND |
> DROP_UNBOUND) : DROP_ALL;
> >
> >  		igt_fork_helper(&thrasher) {
> >  			while (1) {
> >  				usleep(1000);
> > -				igt_assert(write(drop_caches_fd, data,
> strlen(data) + 1) == strlen(data) + 1);
> > +				do_or_die(igt_drop_caches_set(val));
> >  			}
> >  		}
> >  	}
> > diff --git a/tests/gem_reloc_vs_gpu.c b/tests/gem_reloc_vs_gpu.c index
> > bbfdc3a..9508b1c 100644
> > --- a/tests/gem_reloc_vs_gpu.c
> > +++ b/tests/gem_reloc_vs_gpu.c
> > @@ -42,6 +42,7 @@
> >  #include "intel_bufmgr.h"
> >  #include "intel_batchbuffer.h"
> >  #include "intel_gpu_tools.h"
> > +#include "igt_debugfs.h"
> >
> >  /*
> >   * Testcase: Kernel relocations vs. gpu races @@ -282,21 +283,13 @@
> > static void do_forked_test(int fd, unsigned flags)
> >  	struct igt_helper_process thrasher = {};
> >
> >  	if (flags & (THRASH | THRASH_INACTIVE)) {
> > -		char fname[FILENAME_MAX];
> > -		int drop_caches_fd;
> > -		const char *data = (flags & THRASH_INACTIVE) ? "0x7" : "0xf";
> > -
> > -		snprintf(fname, FILENAME_MAX, "%s/%i/%s",
> > -			 "/sys/kernel/debug/dri", drm_get_card(),
> > -			 "i915_gem_drop_caches");
> > -
> > -		drop_caches_fd = open(fname, O_WRONLY);
> > -		igt_require(drop_caches_fd >= 0);
> > +		uint64_t val = (flags & THRASH_INACTIVE) ?
> > +				(DROP_RETIRE | DROP_BOUND |
> DROP_UNBOUND) : DROP_ALL;
> >
> >  		igt_fork_helper(&thrasher) {
> >  			while (1) {
> >  				usleep(1000);
> > -				igt_assert(write(drop_caches_fd, data,
> strlen(data) + 1) == strlen(data) + 1);
> > +				do_or_die(igt_drop_caches_set(val));
> >  			}
> >  		}
> >  	}
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch



More information about the Intel-gfx mailing list