summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/drmtest.c41
-rw-r--r--lib/drmtest.h8
-rw-r--r--tests/gem_partial_pwrite_pread.c40
3 files changed, 55 insertions, 34 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);
diff --git a/tests/gem_partial_pwrite_pread.c b/tests/gem_partial_pwrite_pread.c
index e00167fc..6280e986 100644
--- a/tests/gem_partial_pwrite_pread.c
+++ b/tests/gem_partial_pwrite_pread.c
@@ -56,39 +56,9 @@ drm_intel_bo *scratch_bo;
drm_intel_bo *staging_bo;
#define BO_SIZE (4*4096)
uint32_t devid;
+uint64_t mappable_gtt_limit;
int fd;
-drm_intel_bo *trash_bos[10000];
-int num_trash_bos;
-
-static void
-init_aperture_trashers(void)
-{
- int i;
-
- if (intel_gen(devid) >= 6)
- num_trash_bos = 512;
- else
- num_trash_bos = 256;
-
- for (i = 0; i < num_trash_bos; i++)
- trash_bos[i] = drm_intel_bo_alloc(bufmgr, "trash bo", 1024*1024, 4096);
-}
-
-static void
-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]);
- }
-}
-
static void
copy_bo(drm_intel_bo *src, drm_intel_bo *dst)
{
@@ -124,9 +94,9 @@ blt_bo_fill(drm_intel_bo *tmp_bo, drm_intel_bo *bo, int val)
drm_intel_gem_bo_unmap_gtt(tmp_bo);
- if (bo->offset < num_trash_bos*1024*1024 &&
+ if (bo->offset < mappable_gtt_limit &&
(IS_G33(devid) || intel_gen(devid) >= 4))
- trash_aperture();
+ drmtest_trash_aperture();
copy_bo(tmp_bo, bo);
}
@@ -151,7 +121,8 @@ int main(int argc, char **argv)
scratch_bo = drm_intel_bo_alloc(bufmgr, "scratch bo", BO_SIZE, 4096);
staging_bo = drm_intel_bo_alloc(bufmgr, "staging bo", BO_SIZE, 4096);
- init_aperture_trashers();
+ drmtest_init_aperture_trashers(bufmgr);
+ mappable_gtt_limit = gem_mappable_aperture_size();
printf("checking partial reads\n");
for (i = 0; i < 1000; i++) {
@@ -276,6 +247,7 @@ int main(int argc, char **argv)
drm_intel_gem_bo_unmap_gtt(staging_bo);
}
+ drmtest_cleanup_aperture_trashers();
drm_intel_bufmgr_destroy(bufmgr);
close(fd);