diff --git a/pressure-vessel/runtime.c b/pressure-vessel/runtime.c
index 777909fce9882ac158aee0704f5b5e0aadc0f100..30ee1ee216f4006b6c9b62e9bf7de473cb0ffa61 100644
--- a/pressure-vessel/runtime.c
+++ b/pressure-vessel/runtime.c
@@ -3001,6 +3001,54 @@ pv_runtime_collect_libdrm_data (PvRuntime *self,
     }
 }
 
+static gboolean
+pv_runtime_finish_libdrm_data (PvRuntime *self,
+                               FlatpakBwrap *bwrap,
+                               gboolean all_libdrm_from_provider,
+                               GHashTable *libdrm_data_in_provider,
+                               GError **error)
+{
+  g_autofree gchar *best_libdrm_data_in_provider = NULL;
+
+  if (g_hash_table_size (libdrm_data_in_provider) > 0 && !all_libdrm_from_provider)
+    {
+      /* See the explanation in the similar
+       * "any_libc_from_provider && !all_libc_from_provider" case, above */
+      g_warning ("Using libdrm.so.2 from provider system for some but not all "
+                 "architectures! Will take /usr/share/libdrm from provider.");
+    }
+
+  if (g_hash_table_size (libdrm_data_in_provider) == 1)
+    {
+      best_libdrm_data_in_provider = g_strdup (
+        pv_hash_table_get_arbitrary_key (libdrm_data_in_provider));
+    }
+  else if (g_hash_table_size (libdrm_data_in_provider) > 1)
+    {
+      g_warning ("Found more than one possible libdrm data directory from provider");
+      /* Prioritize "/usr/share/libdrm" if available. Otherwise randomly pick
+       * the first directory in the hash table */
+      if (g_hash_table_contains (libdrm_data_in_provider, "/usr/share/libdrm"))
+        best_libdrm_data_in_provider = g_strdup ("/usr/share/libdrm");
+      else
+        best_libdrm_data_in_provider = g_strdup (
+          pv_hash_table_get_arbitrary_key (libdrm_data_in_provider));
+    }
+
+  if (best_libdrm_data_in_provider != NULL)
+    {
+      return pv_runtime_take_from_provider (self, bwrap,
+                                            best_libdrm_data_in_provider,
+                                            "/usr/share/libdrm",
+                                            TAKE_FROM_PROVIDER_FLAGS_IF_CONTAINER_COMPATIBLE,
+                                            error);
+    }
+  else
+    {
+      return TRUE;
+    }
+}
+
 static gboolean
 pv_runtime_use_provider_graphics_stack (PvRuntime *self,
                                         FlatpakBwrap *bwrap,
@@ -3040,7 +3088,6 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
                                                                          g_free, NULL);
   g_autoptr(GHashTable) gconv_in_provider = g_hash_table_new_full (g_str_hash, g_str_equal,
                                                                      g_free, NULL);
-  g_autofree gchar *best_libdrm_data_in_provider = NULL;
   GHashTableIter iter;
   const gchar *gconv_path;
   g_autofree gchar *provider_in_container_namespace_guarded = NULL;
@@ -3531,40 +3578,9 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
       g_debug ("Using included gconv modules from container");
     }
 
-  if (g_hash_table_size (libdrm_data_in_provider) > 0 && !all_libdrm_from_provider)
-    {
-      /* See the explanation in the similar
-       * "any_libc_from_provider && !all_libc_from_provider" case, above */
-      g_warning ("Using libdrm.so.2 from provider system for some but not all "
-                 "architectures! Will take /usr/share/libdrm from provider.");
-    }
-
-  if (g_hash_table_size (libdrm_data_in_provider) == 1)
-    {
-      best_libdrm_data_in_provider = g_strdup (
-        pv_hash_table_get_arbitrary_key (libdrm_data_in_provider));
-    }
-  else if (g_hash_table_size (libdrm_data_in_provider) > 1)
-    {
-      g_warning ("Found more than one possible libdrm data directory from provider");
-      /* Prioritize "/usr/share/libdrm" if available. Otherwise randomly pick
-       * the first directory in the hash table */
-      if (g_hash_table_contains (libdrm_data_in_provider, "/usr/share/libdrm"))
-        best_libdrm_data_in_provider = g_strdup ("/usr/share/libdrm");
-      else
-        best_libdrm_data_in_provider = g_strdup (
-          pv_hash_table_get_arbitrary_key (libdrm_data_in_provider));
-    }
-
-  if (best_libdrm_data_in_provider != NULL)
-    {
-      if (!pv_runtime_take_from_provider (self, bwrap,
-                                          best_libdrm_data_in_provider,
-                                          "/usr/share/libdrm",
-                                          TAKE_FROM_PROVIDER_FLAGS_IF_CONTAINER_COMPATIBLE,
-                                          error))
-        return FALSE;
-    }
+  if (!pv_runtime_finish_libdrm_data (self, bwrap, all_libdrm_from_provider,
+                                      libdrm_data_in_provider, error))
+    return FALSE;
 
   g_debug ("Setting up EGL ICD JSON...");