radv: add radv_sc_read() helper

This is a function with timeout support for reading from the pipe
between processes used for secure compile.

Initially we hardcode the timeout to 5 seconds. We can adjust the
timeout limit in future if needed.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Timothy Arceri
2019-10-29 17:43:40 +11:00
parent 23a6827e4d
commit 28fff3efbc
2 changed files with 42 additions and 0 deletions
+39
View File
@@ -1994,6 +1994,45 @@ static int install_seccomp_filter() {
return 0;
}
/* Helper function with timeout support for reading from the pipe between
* processes used for secure compile.
*/
bool radv_sc_read(int fd, void *buf, size_t size, bool timeout)
{
fd_set fds;
struct timeval tv;
FD_ZERO(&fds);
FD_SET(fd, &fds);
while (true) {
/* We can't rely on the value of tv after calling select() so
* we must reset it on each iteration of the loop.
*/
tv.tv_sec = 5;
tv.tv_usec = 0;
int rval = select(fd + 1, &fds, NULL, NULL, timeout ? &tv : NULL);
if (rval == -1) {
/* select error */
return false;
} else if (rval) {
ssize_t bytes_read = read(fd, buf, size);
if (bytes_read < 0)
return false;
buf += bytes_read;
size -= bytes_read;
if (size == 0)
return true;
} else {
/* select timeout */
return false;
}
}
}
static void run_secure_compile_device(struct radv_device *device, unsigned process,
int *fd_secure_input, int *fd_secure_output)
{
+3
View File
@@ -1151,6 +1151,9 @@ radv_initialise_ds_surface(struct radv_device *device,
struct radv_ds_buffer_info *ds,
struct radv_image_view *iview);
bool
radv_sc_read(int fd, void *buf, size_t size, bool timeout);
/**
* Attachment state when recording a renderpass instance.
*