diff --git a/pressure-vessel/runtime.c b/pressure-vessel/runtime.c
index 17c4fc3711dec0cd46d12b5e962d69ce6aa91f1e..777909fce9882ac158aee0704f5b5e0aadc0f100 100644
--- a/pressure-vessel/runtime.c
+++ b/pressure-vessel/runtime.c
@@ -2948,6 +2948,59 @@ pv_runtime_collect_libc_family (PvRuntime *self,
   return TRUE;
 }
 
+static void
+pv_runtime_collect_libdrm_data (PvRuntime *self,
+                                RuntimeArchitecture *arch,
+                                const char *libdrm,
+                                const char *provider_in_container_namespace_guarded,
+                                GHashTable *libdrm_data_in_provider)
+{
+  g_autofree char *target = NULL;
+  target = glnx_readlinkat_malloc (-1, libdrm, NULL, NULL);
+
+  if (target != NULL)
+    {
+      g_autofree gchar *dir = NULL;
+      g_autofree gchar *lib_multiarch = NULL;
+      g_autofree gchar *libdrm_dir_in_provider = NULL;
+
+      dir = g_path_get_dirname (target);
+
+      lib_multiarch = g_build_filename ("/lib", arch->details->tuple, NULL);
+      if (g_str_has_suffix (dir, lib_multiarch))
+        dir[strlen (dir) - strlen (lib_multiarch)] = '\0';
+      else if (g_str_has_suffix (dir, "/lib64"))
+        dir[strlen (dir) - strlen ("/lib64")] = '\0';
+      else if (g_str_has_suffix (dir, "/lib32"))
+        dir[strlen (dir) - strlen ("/lib32")] = '\0';
+      else if (g_str_has_suffix (dir, "/lib"))
+        dir[strlen (dir) - strlen ("/lib")] = '\0';
+
+      if (g_str_has_prefix (dir, provider_in_container_namespace_guarded))
+        memmove (dir,
+                 dir + strlen (self->provider_in_container_namespace),
+                 strlen (dir) - strlen (self->provider_in_container_namespace) + 1);
+
+      libdrm_dir_in_provider = g_build_filename (dir, "share", "libdrm", NULL);
+
+      if (_srt_file_test_in_sysroot (self->provider_in_current_namespace,
+                                     -1,
+                                     libdrm_dir_in_provider,
+                                     G_FILE_TEST_IS_DIR))
+        {
+          g_hash_table_add (libdrm_data_in_provider,
+                            g_steal_pointer (&libdrm_dir_in_provider));
+        }
+      else
+        {
+          g_debug ("We were expecting to have the libdrm directory "
+                   "in the provider to be located in "
+                   "\"%s/share/libdrm\", but instead it is missing",
+                   dir);
+        }
+    }
+}
+
 static gboolean
 pv_runtime_use_provider_graphics_stack (PvRuntime *self,
                                         FlatpakBwrap *bwrap,
@@ -3301,50 +3354,9 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
            * the absolute path of libdrm.so.2 */
           if (g_file_test (libdrm, G_FILE_TEST_IS_SYMLINK))
             {
-              g_autofree char *target = NULL;
-              target = glnx_readlinkat_malloc (-1, libdrm, NULL, NULL);
-
-              if (target != NULL)
-                {
-                  g_autofree gchar *dir = NULL;
-                  g_autofree gchar *lib_multiarch = NULL;
-                  g_autofree gchar *libdrm_dir_in_provider = NULL;
-
-                  dir = g_path_get_dirname (target);
-
-                  lib_multiarch = g_build_filename ("/lib", arch->details->tuple, NULL);
-                  if (g_str_has_suffix (dir, lib_multiarch))
-                    dir[strlen (dir) - strlen (lib_multiarch)] = '\0';
-                  else if (g_str_has_suffix (dir, "/lib64"))
-                    dir[strlen (dir) - strlen ("/lib64")] = '\0';
-                  else if (g_str_has_suffix (dir, "/lib32"))
-                    dir[strlen (dir) - strlen ("/lib32")] = '\0';
-                  else if (g_str_has_suffix (dir, "/lib"))
-                    dir[strlen (dir) - strlen ("/lib")] = '\0';
-
-                  if (g_str_has_prefix (dir, provider_in_container_namespace_guarded))
-                    memmove (dir,
-                             dir + strlen (self->provider_in_container_namespace),
-                             strlen (dir) - strlen (self->provider_in_container_namespace) + 1);
-
-                  libdrm_dir_in_provider = g_build_filename (dir, "share", "libdrm", NULL);
-
-                  if (_srt_file_test_in_sysroot (self->provider_in_current_namespace,
-                                                 -1,
-                                                 libdrm_dir_in_provider,
-                                                 G_FILE_TEST_IS_DIR))
-                    {
-                      g_hash_table_add (libdrm_data_in_provider,
-                                        g_steal_pointer (&libdrm_dir_in_provider));
-                    }
-                  else
-                    {
-                      g_debug ("We were expecting to have the libdrm directory "
-                               "in the provider to be located in "
-                               "\"%s/share/libdrm\", but instead it is missing",
-                               dir);
-                    }
-                }
+              pv_runtime_collect_libdrm_data (self, arch, libdrm,
+                                              provider_in_container_namespace_guarded,
+                                              libdrm_data_in_provider);
             }
           else
             {