mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-12 10:26:12 +00:00
igt/gem_evict_everything: Simplify mlocked_evictions
igt_fork/igt_waitchildren already perform the magic required to raise errors based on the exit error code of the child, so take advantage of that and kill the overlycomplicated message passing! Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
9c6e6db03d
commit
af3e32cee2
@ -135,12 +135,9 @@ static void mlocked_evictions(int fd, struct igt_eviction_test_ops *ops,
|
|||||||
int surface_count)
|
int surface_count)
|
||||||
{
|
{
|
||||||
size_t sz, pin;
|
size_t sz, pin;
|
||||||
int result[2];
|
|
||||||
void *locked;
|
void *locked;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
intel_require_memory(surface_count, surface_size, CHECK_RAM);
|
intel_require_memory(surface_count, surface_size, CHECK_RAM);
|
||||||
igt_assert(pipe(result) == 0);
|
|
||||||
|
|
||||||
sz = surface_size*surface_count;
|
sz = surface_size*surface_count;
|
||||||
pin = intel_get_avail_ram_mb();
|
pin = intel_get_avail_ram_mb();
|
||||||
@ -163,26 +160,23 @@ static void mlocked_evictions(int fd, struct igt_eviction_test_ops *ops,
|
|||||||
|
|
||||||
igt_fork(child, 1) {
|
igt_fork(child, 1) {
|
||||||
uint32_t *bo;
|
uint32_t *bo;
|
||||||
int n;
|
int n, ret;
|
||||||
|
|
||||||
bo = malloc(surface_count*sizeof(*bo));
|
bo = malloc(surface_count*sizeof(*bo));
|
||||||
igt_assert(bo);
|
igt_assert(bo);
|
||||||
|
|
||||||
locked = malloc(pin);
|
locked = malloc(pin);
|
||||||
if (locked == NULL || mlock(locked, pin)) {
|
if (locked == NULL || mlock(locked, pin))
|
||||||
ret = ENOSPC;
|
exit(ENOSPC);
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (n = 0; n < surface_count; n++)
|
for (n = 0; n < surface_count; n++)
|
||||||
bo[n] = ops->create(fd, surface_size);
|
bo[n] = ops->create(fd, surface_size);
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
for (n = 0; n < surface_count - 2; n++) {
|
for (n = 0; n < surface_count - 2; n++) {
|
||||||
igt_permute_array(bo, surface_count, exchange_uint32_t);
|
igt_permute_array(bo, surface_count, exchange_uint32_t);
|
||||||
ret = ops->copy(fd, bo[0], bo[1], bo, surface_count-n);
|
ret = ops->copy(fd, bo[0], bo[1], bo, surface_count-n);
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
exit(ret);
|
||||||
|
|
||||||
/* Having used the surfaces (and so pulled out of
|
/* Having used the surfaces (and so pulled out of
|
||||||
* our pages into memory), start a memory hog to
|
* our pages into memory), start a memory hog to
|
||||||
@ -190,28 +184,15 @@ static void mlocked_evictions(int fd, struct igt_eviction_test_ops *ops,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
locked = malloc(surface_size);
|
locked = malloc(surface_size);
|
||||||
if (locked == NULL || mlock(locked, surface_size)) {
|
if (locked == NULL || mlock(locked, surface_size))
|
||||||
ret = ENOSPC;
|
exit(ENOSPC);
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (n = 0; n < surface_count; n++)
|
for (n = 0; n < surface_count; n++)
|
||||||
ops->close(fd, bo[n]);
|
ops->close(fd, bo[n]);
|
||||||
|
|
||||||
out:
|
|
||||||
write(result[1], &ret, sizeof(ret));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
igt_waitchildren();
|
igt_waitchildren();
|
||||||
|
|
||||||
fcntl(result[0], F_SETFL, fcntl(result[0], F_GETFL) | O_NONBLOCK);
|
|
||||||
read(result[0], &ret, sizeof(ret));
|
|
||||||
close(result[0]);
|
|
||||||
close(result[1]);
|
|
||||||
|
|
||||||
errno = ret;
|
|
||||||
igt_assert(ret == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int swapping_evictions(int fd, struct igt_eviction_test_ops *ops,
|
static int swapping_evictions(int fd, struct igt_eviction_test_ops *ops,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user