mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-10 17:36:11 +00:00
igt/gem_exec_suspend: Check with both cached/uncached objects
Keep an eye on domain tracking for both cached/uncached objects across suspend. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
697c3f5550
commit
d8842d385c
@ -30,13 +30,15 @@
|
|||||||
#include "igt.h"
|
#include "igt.h"
|
||||||
#include "igt_gt.h"
|
#include "igt_gt.h"
|
||||||
|
|
||||||
enum mode {
|
#define NOSLEEP 0
|
||||||
NOSLEEP = 0,
|
#define SUSPEND 1
|
||||||
SUSPEND,
|
#define HIBERNATE 2
|
||||||
HIBERNATE,
|
#define mode(x) ((x) & 0xff)
|
||||||
};
|
|
||||||
|
|
||||||
static void run_test(int fd, unsigned ring, enum mode mode);
|
#define UNCACHED (0<<8)
|
||||||
|
#define CACHED (1<<8)
|
||||||
|
|
||||||
|
static void run_test(int fd, unsigned ring, unsigned flags);
|
||||||
|
|
||||||
static void check_bo(int fd, uint32_t handle)
|
static void check_bo(int fd, uint32_t handle)
|
||||||
{
|
{
|
||||||
@ -51,15 +53,15 @@ static void check_bo(int fd, uint32_t handle)
|
|||||||
munmap(map, 4096);
|
munmap(map, 4096);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_all(int fd)
|
static void test_all(int fd, unsigned flags)
|
||||||
{
|
{
|
||||||
unsigned engine;
|
unsigned engine;
|
||||||
|
|
||||||
for_each_engine(fd, engine)
|
for_each_engine(fd, engine)
|
||||||
run_test(fd, engine, NOSLEEP);
|
run_test(fd, engine, flags & ~0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void run_test(int fd, unsigned ring, enum mode mode)
|
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));
|
||||||
const uint32_t bbe = MI_BATCH_BUFFER_END;
|
const uint32_t bbe = MI_BATCH_BUFFER_END;
|
||||||
@ -72,8 +74,8 @@ static void run_test(int fd, unsigned ring, enum mode mode)
|
|||||||
"MI_STORE_DATA broken on gen6 bsd\n");
|
"MI_STORE_DATA broken on gen6 bsd\n");
|
||||||
|
|
||||||
/* Before suspending, check normal operation */
|
/* Before suspending, check normal operation */
|
||||||
if (mode != NOSLEEP)
|
if (mode(flags) != NOSLEEP)
|
||||||
test_all(fd);
|
test_all(fd, flags);
|
||||||
|
|
||||||
gem_quiescent_gpu(fd);
|
gem_quiescent_gpu(fd);
|
||||||
|
|
||||||
@ -86,6 +88,7 @@ static void run_test(int fd, unsigned ring, enum mode mode)
|
|||||||
|
|
||||||
memset(obj, 0, sizeof(obj));
|
memset(obj, 0, sizeof(obj));
|
||||||
obj[0].handle = gem_create(fd, 4096);
|
obj[0].handle = gem_create(fd, 4096);
|
||||||
|
gem_set_caching(fd, obj[0].handle, !!(flags & CACHED));
|
||||||
obj[0].flags |= EXEC_OBJECT_WRITE;
|
obj[0].flags |= EXEC_OBJECT_WRITE;
|
||||||
obj[1].handle = gem_create(fd, 4096);
|
obj[1].handle = gem_create(fd, 4096);
|
||||||
gem_write(fd, obj[1].handle, 0, &bbe, sizeof(bbe));
|
gem_write(fd, obj[1].handle, 0, &bbe, sizeof(bbe));
|
||||||
@ -134,7 +137,7 @@ static void run_test(int fd, unsigned ring, enum mode mode)
|
|||||||
gem_close(fd, obj[1].handle);
|
gem_close(fd, obj[1].handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode(flags)) {
|
||||||
case NOSLEEP:
|
case NOSLEEP:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -153,15 +156,15 @@ static void run_test(int fd, unsigned ring, enum mode mode)
|
|||||||
gem_quiescent_gpu(fd);
|
gem_quiescent_gpu(fd);
|
||||||
|
|
||||||
/* After resume, make sure it still works */
|
/* After resume, make sure it still works */
|
||||||
if (mode != NOSLEEP)
|
if (mode(flags) != NOSLEEP)
|
||||||
test_all(fd);
|
test_all(fd, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
igt_main
|
igt_main
|
||||||
{
|
{
|
||||||
const struct {
|
const struct {
|
||||||
const char *suffix;
|
const char *suffix;
|
||||||
enum mode mode;
|
unsigned mode;
|
||||||
} modes[] = {
|
} modes[] = {
|
||||||
{ "", NOSLEEP },
|
{ "", NOSLEEP },
|
||||||
{ "-S3", SUSPEND },
|
{ "-S3", SUSPEND },
|
||||||
@ -176,8 +179,12 @@ igt_main
|
|||||||
|
|
||||||
for (e = intel_execution_engines; e->name; e++) {
|
for (e = intel_execution_engines; e->name; e++) {
|
||||||
for (m = modes; m->suffix; m++) {
|
for (m = modes; m->suffix; m++) {
|
||||||
igt_subtest_f("%s%s", e->name, m->suffix)
|
igt_subtest_f("%s-uncached%s", e->name, m->suffix)
|
||||||
run_test(fd, e->exec_id | e->flags, m->mode);
|
run_test(fd, e->exec_id | e->flags,
|
||||||
|
m->mode | UNCACHED);
|
||||||
|
igt_subtest_f("%s-cached%s", e->name, m->suffix)
|
||||||
|
run_test(fd, e->exec_id | e->flags,
|
||||||
|
m->mode | CACHED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user