radv: add some infrastructure for fresh forks for each secure compile
authorTimothy Arceri <tarceri@itsqueeze.com>
Sun, 24 Nov 2019 23:00:20 +0000 (10:00 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sun, 24 Nov 2019 23:10:14 +0000 (10:10 +1100)
In the following commits we want to be able to fork an existing lightweight
fork created at device creation time. In order for the user facing process
to communicate with this new fresh fork we create some members here to hold
FIFO file descriptors and a unique id.

Here we also add a new fork enum that we use to tell the lightweight
process to create a fresh fork.

For more information on why we create a fresh fork see the following
commits.

src/amd/vulkan/radv_private.h

index e4ea4d25635f64715f212ced0e1cbcaa31ceacef..8066505e245cddb4080d66c0944c3cd2057eb607 100644 (file)
@@ -135,6 +135,7 @@ enum radv_secure_compile_type {
        RADV_SC_TYPE_COMPILE_PIPELINE_FINISHED,
        RADV_SC_TYPE_READ_DISK_CACHE,
        RADV_SC_TYPE_WRITE_DISK_CACHE,
+       RADV_SC_TYPE_FORK_DEVICE,
        RADV_SC_TYPE_DESTROY_DEVICE,
        RADV_SC_TYPE_COUNT
 };
@@ -745,10 +746,19 @@ struct radv_bo_list {
 };
 
 struct radv_secure_compile_process {
-       /* Secure process file descriptors */
+       /* Secure process file descriptors. Used to communicate between the
+        * user facing device and the idle forked device used to fork a clean
+        * process for each new pipeline compile.
+        */
        int fd_secure_input;
        int fd_secure_output;
 
+       /* FIFO file descriptors used to communicate between the user facing
+        * device and the secure process that does the actual secure compile.
+        */
+       int fd_server;
+       int fd_client;
+
        /* Secure compile process id */
        pid_t sc_pid;
 
@@ -760,6 +770,9 @@ struct radv_secure_compile_state {
        struct radv_secure_compile_process *secure_compile_processes;
        uint32_t secure_compile_thread_counter;
        mtx_t secure_compile_mutex;
+
+       /* Unique process ID used to build name for FIFO file descriptor */
+       char *uid;
 };
 
 struct radv_device {