mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-22 15:26:21 +00:00
igt/gem_ringfill: Use igt_sigiter to focus the interruptible testing
Use the igt_sigiter interface to repeat the ringfill testing for as much as is required to exercise all potential injection sites. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
e85613b47c
commit
87cad37c78
@ -34,6 +34,14 @@
|
|||||||
#include "igt.h"
|
#include "igt.h"
|
||||||
#include "igt_gt.h"
|
#include "igt_gt.h"
|
||||||
|
|
||||||
|
#define INTERRUPTIBLE 0x1
|
||||||
|
#define HANG 0x2
|
||||||
|
#define CHILD 0x8
|
||||||
|
#define FORKED 0x8
|
||||||
|
#define BOMB 0x10
|
||||||
|
#define SUSPEND 0x20
|
||||||
|
#define HIBERNATE 0x40
|
||||||
|
|
||||||
static void check_bo(int fd, uint32_t handle)
|
static void check_bo(int fd, uint32_t handle)
|
||||||
{
|
{
|
||||||
uint32_t *map;
|
uint32_t *map;
|
||||||
@ -47,10 +55,10 @@ static void check_bo(int fd, uint32_t handle)
|
|||||||
munmap(map, 4096);
|
munmap(map, 4096);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_ring(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
static void fill_ring(int fd,
|
||||||
|
struct drm_i915_gem_execbuffer2 *execbuf,
|
||||||
|
unsigned flags)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
/* The ring we've been using is 128k, and each rendering op
|
/* The ring we've been using is 128k, and each rendering op
|
||||||
* will use at least 8 dwords:
|
* will use at least 8 dwords:
|
||||||
*
|
*
|
||||||
@ -67,18 +75,12 @@ static void fill_ring(int fd, struct drm_i915_gem_execbuffer2 *execbuf)
|
|||||||
* doing this, we aren't likely to with this test.
|
* doing this, we aren't likely to with this test.
|
||||||
*/
|
*/
|
||||||
igt_debug("Executing execbuf %d times\n", 128*1024/(8*4));
|
igt_debug("Executing execbuf %d times\n", 128*1024/(8*4));
|
||||||
for (i = 0; i < 128*1024 / (8 * 4); i++)
|
igt_interruptible(flags & INTERRUPTIBLE) {
|
||||||
gem_execbuf(fd, execbuf);
|
for (int i = 0; i < 128*1024 / (8 * 4); i++)
|
||||||
|
gem_execbuf(fd, execbuf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define INTERRUPTIBLE 0x1
|
|
||||||
#define HANG 0x2
|
|
||||||
#define CHILD 0x8
|
|
||||||
#define FORKED 0x8
|
|
||||||
#define BOMB 0x10
|
|
||||||
#define SUSPEND 0x20
|
|
||||||
#define HIBERNATE 0x40
|
|
||||||
|
|
||||||
static void run_test(int fd, unsigned ring, unsigned flags)
|
static void run_test(int fd, unsigned ring, unsigned flags)
|
||||||
{
|
{
|
||||||
const int gen = intel_gen(intel_get_drm_devid(fd));
|
const int gen = intel_gen(intel_get_drm_devid(fd));
|
||||||
@ -157,22 +159,19 @@ static void run_test(int fd, unsigned ring, unsigned flags)
|
|||||||
if (flags & HANG)
|
if (flags & HANG)
|
||||||
hang = igt_hang_ring(fd, ring & ~(3<<13));
|
hang = igt_hang_ring(fd, ring & ~(3<<13));
|
||||||
|
|
||||||
if (flags & INTERRUPTIBLE)
|
|
||||||
igt_fork_signal_helper();
|
|
||||||
|
|
||||||
if (flags & (CHILD | FORKED | BOMB)) {
|
if (flags & (CHILD | FORKED | BOMB)) {
|
||||||
int nchild;
|
int nchild;
|
||||||
|
|
||||||
if (flags & CHILD)
|
if (flags & FORKED)
|
||||||
nchild = 1;
|
|
||||||
else if (flags & FORKED)
|
|
||||||
nchild = sysconf(_SC_NPROCESSORS_ONLN);
|
nchild = sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
else
|
else if (flags & BOMB)
|
||||||
nchild = 8*sysconf(_SC_NPROCESSORS_ONLN);
|
nchild = 8*sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
|
else
|
||||||
|
nchild = 1;
|
||||||
|
|
||||||
igt_debug("Forking %d children\n", nchild);
|
igt_debug("Forking %d children\n", nchild);
|
||||||
igt_fork(child, nchild)
|
igt_fork(child, nchild)
|
||||||
fill_ring(fd, &execbuf);
|
fill_ring(fd, &execbuf, flags);
|
||||||
|
|
||||||
if (flags & SUSPEND)
|
if (flags & SUSPEND)
|
||||||
igt_system_suspend_autoresume();
|
igt_system_suspend_autoresume();
|
||||||
@ -182,10 +181,7 @@ static void run_test(int fd, unsigned ring, unsigned flags)
|
|||||||
|
|
||||||
igt_waitchildren();
|
igt_waitchildren();
|
||||||
} else
|
} else
|
||||||
fill_ring(fd, &execbuf);
|
fill_ring(fd, &execbuf, flags);
|
||||||
|
|
||||||
if (flags & INTERRUPTIBLE)
|
|
||||||
igt_stop_signal_helper();
|
|
||||||
|
|
||||||
if (flags & HANG)
|
if (flags & HANG)
|
||||||
igt_post_hang_ring(fd, hang);
|
igt_post_hang_ring(fd, hang);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user