tu/kgsl: Fix file descriptor double close
authorAlexey Nurmukhametov <alex@nurmukhametov.ru>
Wed, 23 Jun 2021 16:38:06 +0000 (19:38 +0300)
committerMarge Bot <eric+marge@anholt.net>
Thu, 24 Jun 2021 18:16:15 +0000 (18:16 +0000)
tu_kgsl.c: tu_enumerate_devices closed fd previously closed by
tu_physical_device_init function.

Move out the fd closing from tu_physical_device_init function because
they do not belong to it.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11561>

src/freedreno/vulkan/tu_device.c
src/freedreno/vulkan/tu_drm.c

index 5d4ae2b..abf68b9 100644 (file)
@@ -215,12 +215,12 @@ tu_physical_device_init(struct tu_physical_device *device,
    default:
       result = vk_startup_errorf(instance, VK_ERROR_INITIALIZATION_FAILED,
                                  "device %s is unsupported", device->name);
-      goto fail_fds;
+      return result;
    }
    if (tu_device_get_cache_uuid(device->gpu_id, device->cache_uuid)) {
       result = vk_startup_errorf(instance, VK_ERROR_INITIALIZATION_FAILED,
                                  "cannot generate UUID");
-      goto fail_fds;
+      return result;
    }
 
    /* The gpu id is already embedded in the uuid so we just pass "tu"
@@ -246,25 +246,18 @@ tu_physical_device_init(struct tu_physical_device *device,
                                     &supported_extensions,
                                     &dispatch_table);
    if (result != VK_SUCCESS)
-      goto fail_fds;
+      return result;
 
 #if TU_HAS_SURFACE
    result = tu_wsi_init(device);
    if (result != VK_SUCCESS) {
       vk_startup_errorf(instance, result, "WSI init failure");
-      goto fail_vk_pd_init;
+      vk_physical_device_finish(&device->vk);
+      return result;
    }
 #endif
 
    return VK_SUCCESS;
-
-fail_vk_pd_init:
-   vk_physical_device_finish(&device->vk);
-fail_fds:
-   close(device->local_fd);
-   if (device->master_fd != -1)
-      close(device->master_fd);
-   return result;
 }
 
 static void
index 0c6454e..f4c0e59 100644 (file)
@@ -467,7 +467,9 @@ tu_drm_device_init(struct tu_physical_device *device,
    device->heap.used = 0u;
    device->heap.flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT;
 
-   return tu_physical_device_init(device, instance);
+   result = tu_physical_device_init(device, instance);
+   if (result == VK_SUCCESS)
+       return result;
 
 fail:
    close(fd);