diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-01-15 18:32:11 +0100 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-01-15 18:32:11 +0100 |
commit | d75d69d0a9e5e77dcea469b47401cd7d25f155a3 (patch) | |
tree | 751b7f63107e7943c70662b66b9436a4f335345b /lib | |
parent | 7b14b093d45232cd2fd3a96322353eb35083c9eb (diff) |
lib/drmtest: extract mappable aperture trasher infrastructure
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/drmtest.c | 41 | ||||
-rw-r--r-- | lib/drmtest.h | 8 |
2 files changed, 49 insertions, 0 deletions
diff --git a/lib/drmtest.c b/lib/drmtest.c index 40f3ac58..521a38a2 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -289,6 +289,7 @@ uint64_t gem_mappable_aperture_size(void) return pci_dev->regions[bar].size; } +/* signal interrupt helpers */ static pid_t signal_helper = -1; long long int sig_stat; static void signal_helper_process(pid_t pid) @@ -330,3 +331,43 @@ void drmtest_stop_signal_helper(void) signal_helper = -1; } + +/* mappable aperture trasher helper */ +drm_intel_bo **trash_bos; +int num_trash_bos; + +void drmtest_init_aperture_trashers(drm_intel_bufmgr *bufmgr) +{ + int i; + + num_trash_bos = gem_mappable_aperture_size() / (1024*1024); + + trash_bos = malloc(num_trash_bos * sizeof(drm_intel_bo *)); + assert(trash_bos); + + for (i = 0; i < num_trash_bos; i++) + trash_bos[i] = drm_intel_bo_alloc(bufmgr, "trash bo", 1024*1024, 4096); +} + +void drmtest_trash_aperture(void) +{ + int i; + uint8_t *gtt_ptr; + + for (i = 0; i < num_trash_bos; i++) { + drm_intel_gem_bo_map_gtt(trash_bos[i]); + gtt_ptr = trash_bos[i]->virtual; + *gtt_ptr = 0; + drm_intel_gem_bo_unmap_gtt(trash_bos[i]); + } +} + +void drmtest_cleanup_aperture_trashers(void) +{ + int i; + + for (i = 0; i < num_trash_bos; i++) + drm_intel_bo_unreference(trash_bos[i]); + + free(trash_bos); +} diff --git a/lib/drmtest.h b/lib/drmtest.h index dc69b430..3a3bc9aa 100644 --- a/lib/drmtest.h +++ b/lib/drmtest.h @@ -32,12 +32,14 @@ #include <errno.h> #include "xf86drm.h" +#include "intel_batchbuffer.h" int drm_open_any(void); int drm_open_any_master(void); void gem_quiescent_gpu(int fd); +/* ioctl wrappers and similar stuff for bare metal testing */ void gem_set_tiling(int fd, uint32_t handle, int tiling, int stride); void gem_close(int fd, uint32_t handle); void gem_write(int fd, uint32_t handle, uint32_t offset, const void *buf, uint32_t size); @@ -50,5 +52,11 @@ void *gem_mmap(int fd, uint32_t handle, int size, int prot); uint64_t gem_aperture_size(int fd); uint64_t gem_mappable_aperture_size(void); +/* generally useful helpers */ void drmtest_fork_signal_helper(void); void drmtest_stop_signal_helper(void); + +/* helpers based upon the libdrm buffer manager */ +void drmtest_init_aperture_trashers(drm_intel_bufmgr *bufmgr); +void drmtest_trash_aperture(void); +void drmtest_cleanup_aperture_trashers(void); |