Pulled out "global" library stuff into lib/gem_stress.c.

It is not thread-safe.

Cc: Daniel Vetter <[email protected]>
Signed-off-by: Ben Widawsky <[email protected]>
---
 lib/Makefile.am    |    1 +
 lib/gem_stress.c   |  238 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/gem_stress.h   |    4 +
 tests/gem_stress.c |  208 +---------------------------------------------
 4 files changed, 245 insertions(+), 206 deletions(-)
 create mode 100644 lib/gem_stress.c

diff --git a/lib/Makefile.am b/lib/Makefile.am
index 6e6463a..0d7aa9b 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -26,5 +26,6 @@ libintel_tools_la_SOURCES =   \
        gem_stress_i830.c       \
        gen6_render.h           \
        gem_stress_gen6.c       \
+       gem_stress.c            \
        intel_reg_map.c
 
diff --git a/lib/gem_stress.c b/lib/gem_stress.c
new file mode 100644
index 0000000..676e9fd
--- /dev/null
+++ b/lib/gem_stress.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright © 2012 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Ben Widawsky <[email protected]>
+ *    Daniel Vetter <[email protected]>
+ *
+ */
+
+#include "gem_stress.h"
+
+void sanitize_tiles_per_buf(void)
+{
+       if (options.tiles_per_buf > options.scratch_buf_size / 
TILE_BYTES(options.tile_size))
+               options.tiles_per_buf = options.scratch_buf_size / 
TILE_BYTES(options.tile_size);
+}
+
+
+void
+sanitize_stride(struct scratch_buf *buf)
+{
+
+       if (buf_height(buf) > options.max_dimension)
+               buf->stride = options.scratch_buf_size / options.max_dimension;
+
+       if (buf_height(buf) < options.tile_size)
+               buf->stride = options.scratch_buf_size / options.tile_size;
+
+       if (buf_width(buf) < options.tile_size)
+               buf->stride = options.tile_size * sizeof(uint32_t);
+
+       assert(buf->stride <= 8192);
+       assert(buf_width(buf) <= options.max_dimension);
+       assert(buf_height(buf) <= options.max_dimension);
+
+       assert(buf_width(buf) >= options.tile_size);
+       assert(buf_height(buf) >= options.tile_size);
+
+}
+
+void
+init_buffer(struct scratch_buf *buf, unsigned size)
+{
+       buf->bo = drm_intel_bo_alloc(bufmgr, "tiled bo", size, 4096);
+       assert(buf->bo);
+       buf->tiling = I915_TILING_NONE;
+       buf->stride = 4096;
+
+       sanitize_stride(buf); \
+
+       if (options.no_hw)
+               buf->data = malloc(size);
+       else {
+               if (options.use_cpu_maps)
+                       drm_intel_bo_map(buf->bo, 1);
+               else
+                       drm_intel_gem_bo_map_gtt(buf->bo);
+               buf->data = buf->bo->virtual;
+       }
+
+       buf->num_tiles = options.tiles_per_buf;
+}
+
+void parse_options(int argc, char **argv, int _devid)
+{
+       int c, tmp;
+       int option_index = 0;
+       static struct option long_options[] = {
+               {"no-hw", 0, 0, 'd'},
+               {"buf-size", 1, 0, 's'},
+               {"gpu-busy-load", 1, 0, 'g'},
+               {"no-signals", 0, 0, 'S'},
+               {"buffer-count", 1, 0, 'c'},
+               {"trace-tile", 1, 0, 't'},
+               {"disable-blt", 0, 0, 'b'},
+               {"disable-render", 0, 0, 'r'},
+               {"untiled", 0, 0, 'u'},
+               {"x-tiled", 0, 0, 'x'},
+               {"use-cpu-maps", 0, 0, 'm'},
+               {"rounds", 1, 0, 'o'},
+               {"no-fail", 0, 0, 'f'},
+               {"tiles-per-buf", 0, 0, 'p'},
+#define DUCTAPE 0xdead0001
+               {"remove-duct-tape", 0, 0, DUCTAPE},
+#define TILESZ 0xdead0002
+               {"tile-size", 1, 0, TILESZ},
+#define CHCK_RENDER 0xdead0003
+               {"check-render-cpyfn", 0, 0, CHCK_RENDER},
+       };
+
+       options.scratch_buf_size = 256*4096;
+       options.no_hw = 0;
+       options.use_signal_helper = 1;
+       options.gpu_busy_load = 0;
+       options.num_buffers = 0;
+       options.trace_tile = -1;
+       options.use_render = 1;
+       options.use_blt = 1;
+       options.forced_tiling = -1;
+       options.use_cpu_maps = 0;
+       options.total_rounds = 512;
+       options.fail = 1;
+       options.ducttape = 1;
+       options.tile_size = 16;
+       options.tiles_per_buf = options.scratch_buf_size / 
TILE_BYTES(options.tile_size);
+       options.check_render_cpyfn = 0;
+
+       while((c = getopt_long(argc, argv, "ds:g:c:t:rbuxmo:fp:",
+                              long_options, &option_index)) != -1) {
+               switch(c) {
+               case 'd':
+                       options.no_hw = 1;
+                       printf("no-hw debug mode\n");
+                       break;
+               case 'S':
+                       options.use_signal_helper = 0;
+                       printf("disabling that pesky nuisance who keeps 
interrupting us\n");
+                       break;
+               case 's':
+                       tmp = atoi(optarg);
+                       if (tmp < options.tile_size*8192)
+                               printf("scratch buffer size needs to be at 
least %i\n",
+                                      options.tile_size*8192);
+                       else if (tmp & (tmp - 1)) {
+                               printf("scratch buffer size needs to be a 
power-of-two\n");
+                       } else {
+                               printf("fixed scratch buffer size to %u\n", 
tmp);
+                               options.scratch_buf_size = tmp;
+                               sanitize_tiles_per_buf();
+                       }
+                       break;
+               case 'g':
+                       tmp = atoi(optarg);
+                       if (tmp < 0 || tmp > 10)
+                               printf("gpu busy load needs to be bigger than 0 
and smaller than 10\n");
+                       else {
+                               printf("gpu busy load factor set to %i\n", tmp);
+                       }
+                       break;
+               case 'c':
+                       options.num_buffers = atoi(optarg);
+                       printf("buffer count set to %i\n", options.num_buffers);
+                       break;
+               case 't':
+                       options.trace_tile = atoi(optarg);
+                       printf("tracing tile %i\n", options.trace_tile);
+                       break;
+               case 'r':
+                       options.use_render = 0;
+                       printf("disabling render copy\n");
+                       break;
+               case 'b':
+                       options.use_blt = 0;
+                       printf("disabling blt copy\n");
+                       break;
+               case 'u':
+                       options.forced_tiling = I915_TILING_NONE;
+                       printf("disabling tiling\n");
+                       break;
+               case 'x':
+                       if (options.use_cpu_maps) {
+                               printf("tiling not possible with cpu maps\n");
+                       } else {
+                               options.forced_tiling = I915_TILING_X;
+                               printf("using only X-tiling\n");
+                       }
+                       break;
+               case 'm':
+                       options.use_cpu_maps = 1;
+                       options.forced_tiling = I915_TILING_NONE;
+                       printf("disabling tiling\n");
+                       break;
+               case 'o':
+                       options.total_rounds = atoi(optarg);
+                       printf("total rounds %i\n", options.total_rounds);
+                       break;
+               case 'f':
+                       options.fail = 0;
+                       printf("not failing when detecting errors\n");
+                       break;
+               case 'p':
+                       options.tiles_per_buf = atoi(optarg);
+                       printf("tiles per buffer %i\n", options.tiles_per_buf);
+                       break;
+               case DUCTAPE:
+                       options.ducttape = 0;
+                       printf("applying duct-tape\n");
+                       break;
+               case TILESZ:
+                       options.tile_size = atoi(optarg);
+                       sanitize_tiles_per_buf();
+                       printf("til size %i\n", options.tile_size);
+                       break;
+               case CHCK_RENDER:
+                       options.check_render_cpyfn = 1;
+                       printf("checking render copy function\n");
+                       break;
+               default:
+                       printf("unkown command options\n");
+                       break;
+               }
+       }
+
+       if (optind < argc)
+               printf("unkown command options\n");
+
+       /* actually 32767, according to docs, but that kills our nice pot 
calculations. */
+       options.max_dimension = 16*1024;
+       if (options.use_render) {
+               if (IS_GEN2(_devid) || IS_GEN3(_devid))
+                       options.max_dimension = 2048;
+               else
+                       options.max_dimension = 8192;
+       }
+       printf("Limiting buffer to %dx%d\n",
+              options.max_dimension, options.max_dimension);
+}
+
+
diff --git a/lib/gem_stress.h b/lib/gem_stress.h
index 0db2229..adc9502 100644
--- a/lib/gem_stress.h
+++ b/lib/gem_stress.h
@@ -62,6 +62,10 @@ extern int fence_storm;
 #define TILE_BYTES(size)       ((size)*(size)*sizeof(uint32_t))
 
 void keep_gpu_busy(void);
+void sanitize_tiles_per_buf(void);
+void sanitize_stride(struct scratch_buf *buf);
+void init_buffer(struct scratch_buf *buf, unsigned size);
+void parse_options(int argc, char **argv, int devid);
 
 static inline void emit_vertex_2s(int16_t x, int16_t y)
 {
diff --git a/tests/gem_stress.c b/tests/gem_stress.c
index 8338705..57b863e 100644
--- a/tests/gem_stress.c
+++ b/tests/gem_stress.c
@@ -418,49 +418,6 @@ static void fan_in_and_check(void)
        }
 }
 
-static void sanitize_stride(struct scratch_buf *buf)
-{
-
-       if (buf_height(buf) > options.max_dimension)
-               buf->stride = options.scratch_buf_size / options.max_dimension;
-
-       if (buf_height(buf) < options.tile_size)
-               buf->stride = options.scratch_buf_size / options.tile_size;
-
-       if (buf_width(buf) < options.tile_size)
-               buf->stride = options.tile_size * sizeof(uint32_t);
-
-       assert(buf->stride <= 8192);
-       assert(buf_width(buf) <= options.max_dimension);
-       assert(buf_height(buf) <= options.max_dimension);
-
-       assert(buf_width(buf) >= options.tile_size);
-       assert(buf_height(buf) >= options.tile_size);
-
-}
-
-static void init_buffer(struct scratch_buf *buf, unsigned size)
-{
-       buf->bo = drm_intel_bo_alloc(bufmgr, "tiled bo", size, 4096);
-       assert(buf->bo);
-       buf->tiling = I915_TILING_NONE;
-       buf->stride = 4096;
-
-       sanitize_stride(buf);
-
-       if (options.no_hw)
-               buf->data = malloc(size);
-       else {
-               if (options.use_cpu_maps)
-                       drm_intel_bo_map(buf->bo, 1);
-               else
-                       drm_intel_gem_bo_map_gtt(buf->bo);
-               buf->data = buf->bo->virtual;
-       }
-
-       buf->num_tiles = options.tiles_per_buf;
-}
-
 static void permute_array(void *array, unsigned size,
                          void (*exchange_func)(void *array, unsigned i, 
unsigned j))
 {
@@ -611,168 +568,6 @@ static int get_num_fences(void)
        return val - 2;
 }
 
-static void sanitize_tiles_per_buf(void)
-{
-       if (options.tiles_per_buf > options.scratch_buf_size / 
TILE_BYTES(options.tile_size))
-               options.tiles_per_buf = options.scratch_buf_size / 
TILE_BYTES(options.tile_size);
-}
-
-static void parse_options(int argc, char **argv)
-{
-       int c, tmp;
-       int option_index = 0;
-       static struct option long_options[] = {
-               {"no-hw", 0, 0, 'd'},
-               {"buf-size", 1, 0, 's'},
-               {"gpu-busy-load", 1, 0, 'g'},
-               {"no-signals", 0, 0, 'S'},
-               {"buffer-count", 1, 0, 'c'},
-               {"trace-tile", 1, 0, 't'},
-               {"disable-blt", 0, 0, 'b'},
-               {"disable-render", 0, 0, 'r'},
-               {"untiled", 0, 0, 'u'},
-               {"x-tiled", 0, 0, 'x'},
-               {"use-cpu-maps", 0, 0, 'm'},
-               {"rounds", 1, 0, 'o'},
-               {"no-fail", 0, 0, 'f'},
-               {"tiles-per-buf", 0, 0, 'p'},
-#define DUCTAPE 0xdead0001
-               {"remove-duct-tape", 0, 0, DUCTAPE},
-#define TILESZ 0xdead0002
-               {"tile-size", 1, 0, TILESZ},
-#define CHCK_RENDER 0xdead0003
-               {"check-render-cpyfn", 0, 0, CHCK_RENDER},
-       };
-
-       options.scratch_buf_size = 256*4096;
-       options.no_hw = 0;
-       options.use_signal_helper = 1;
-       options.gpu_busy_load = 0;
-       options.num_buffers = 0;
-       options.trace_tile = -1;
-       options.use_render = 1;
-       options.use_blt = 1;
-       options.forced_tiling = -1;
-       options.use_cpu_maps = 0;
-       options.total_rounds = 512;
-       options.fail = 1;
-       options.ducttape = 1;
-       options.tile_size = 16;
-       options.tiles_per_buf = options.scratch_buf_size / 
TILE_BYTES(options.tile_size);
-       options.check_render_cpyfn = 0;
-
-       while((c = getopt_long(argc, argv, "ds:g:c:t:rbuxmo:fp:",
-                              long_options, &option_index)) != -1) {
-               switch(c) {
-               case 'd':
-                       options.no_hw = 1;
-                       printf("no-hw debug mode\n");
-                       break;
-               case 'S':
-                       options.use_signal_helper = 0;
-                       printf("disabling that pesky nuisance who keeps 
interrupting us\n");
-                       break;
-               case 's':
-                       tmp = atoi(optarg);
-                       if (tmp < options.tile_size*8192)
-                               printf("scratch buffer size needs to be at 
least %i\n",
-                                      options.tile_size*8192);
-                       else if (tmp & (tmp - 1)) {
-                               printf("scratch buffer size needs to be a 
power-of-two\n");
-                       } else {
-                               printf("fixed scratch buffer size to %u\n", 
tmp);
-                               options.scratch_buf_size = tmp;
-                               sanitize_tiles_per_buf();
-                       }
-                       break;
-               case 'g':
-                       tmp = atoi(optarg);
-                       if (tmp < 0 || tmp > 10)
-                               printf("gpu busy load needs to be bigger than 0 
and smaller than 10\n");
-                       else {
-                               printf("gpu busy load factor set to %i\n", tmp);
-                               gpu_busy_load = options.gpu_busy_load = tmp;
-                       }
-                       break;
-               case 'c':
-                       options.num_buffers = atoi(optarg);
-                       printf("buffer count set to %i\n", options.num_buffers);
-                       break;
-               case 't':
-                       options.trace_tile = atoi(optarg);
-                       printf("tracing tile %i\n", options.trace_tile);
-                       break;
-               case 'r':
-                       options.use_render = 0;
-                       printf("disabling render copy\n");
-                       break;
-               case 'b':
-                       options.use_blt = 0;
-                       printf("disabling blt copy\n");
-                       break;
-               case 'u':
-                       options.forced_tiling = I915_TILING_NONE;
-                       printf("disabling tiling\n");
-                       break;
-               case 'x':
-                       if (options.use_cpu_maps) {
-                               printf("tiling not possible with cpu maps\n");
-                       } else {
-                               options.forced_tiling = I915_TILING_X;
-                               printf("using only X-tiling\n");
-                       }
-                       break;
-               case 'm':
-                       options.use_cpu_maps = 1;
-                       options.forced_tiling = I915_TILING_NONE;
-                       printf("disabling tiling\n");
-                       break;
-               case 'o':
-                       options.total_rounds = atoi(optarg);
-                       printf("total rounds %i\n", options.total_rounds);
-                       break;
-               case 'f':
-                       options.fail = 0;
-                       printf("not failing when detecting errors\n");
-                       break;
-               case 'p':
-                       options.tiles_per_buf = atoi(optarg);
-                       printf("tiles per buffer %i\n", options.tiles_per_buf);
-                       break;
-               case DUCTAPE:
-                       options.ducttape = 0;
-                       printf("applying duct-tape\n");
-                       break;
-               case TILESZ:
-                       options.tile_size = atoi(optarg);
-                       sanitize_tiles_per_buf();
-                       printf("til size %i\n", options.tile_size);
-                       break;
-               case CHCK_RENDER:
-                       options.check_render_cpyfn = 1;
-                       printf("checking render copy function\n");
-                       break;
-               default:
-                       printf("unkown command options\n");
-                       break;
-               }
-       }
-
-       if (optind < argc)
-               printf("unkown command options\n");
-
-       /* actually 32767, according to docs, but that kills our nice pot 
calculations. */
-       options.max_dimension = 16*1024;
-       if (options.use_render) {
-               if (IS_GEN2(devid) || IS_GEN3(devid))
-                       options.max_dimension = 2048;
-               else
-                       options.max_dimension = 8192;
-       }
-       printf("Limiting buffer to %dx%d\n",
-              options.max_dimension, options.max_dimension);
-}
-
 static void init(void)
 {
        int i;
@@ -862,7 +657,8 @@ int main(int argc, char **argv)
        drm_fd = drm_open_any();
        devid = intel_get_drm_devid(drm_fd);
 
-       parse_options(argc, argv);
+       parse_options(argc, argv, devid);
+       gpu_busy_load = options.gpu_busy_load;
 
        /* start our little helper early before too may allocations occur */
        if (options.use_signal_helper)
-- 
1.7.8.3

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to