diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c index 0eada6c0c9e..c070f72b412 100644 --- a/src/amd/vulkan/radv_debug.c +++ b/src/amd/vulkan/radv_debug.c @@ -1065,7 +1065,7 @@ radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_i break; case RADV_DEVICE_FAULT_CHUNK_GPU_INFO: radv_dump_device_name(device, f); - ac_print_gpu_info(f, &pdev->info, pdev->local_fd); + ac_print_gpu_info(f, &pdev->info, device->ws->get_fd(device->ws)); break; case RADV_DEVICE_FAULT_CHUNK_DMESG: radv_dump_dmesg(f); diff --git a/src/amd/vulkan/radv_physical_device.c b/src/amd/vulkan/radv_physical_device.c index 657635223d0..a69c6cee929 100644 --- a/src/amd/vulkan/radv_physical_device.c +++ b/src/amd/vulkan/radv_physical_device.c @@ -2521,6 +2521,10 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm if (drm_device) { result = radv_amdgpu_winsys_create(fd, instance->debug_flags, instance->perftest_flags, is_virtio, &pdev->ws); + /* Close the fd immediately because libdrm dups it internally. */ + close(fd); + fd = -1; + if (result != VK_SUCCESS) { result = vk_errorf(instance, result, "failed to initialize winsys"); goto fail_base; @@ -2562,7 +2566,6 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm } pdev->master_fd = master_fd; - pdev->local_fd = fd; pdev->use_llvm = instance->debug_flags & RADV_DEBUG_LLVM; #if !AMD_LLVM_AVAILABLE @@ -2718,7 +2721,7 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm radv_get_physical_device_properties(pdev); if ((instance->debug_flags & RADV_DEBUG_INFO)) - ac_print_gpu_info(stdout, &pdev->info, pdev->local_fd); + ac_print_gpu_info(stdout, &pdev->info, pdev->ws->get_fd(pdev->ws)); radv_init_physical_device_decoder(pdev); radv_init_physical_device_encoder(pdev); @@ -2832,8 +2835,6 @@ radv_physical_device_destroy(struct vk_physical_device *vk_device) pdev->ws->destroy(pdev->ws); disk_cache_destroy(pdev->vk.disk_cache); disk_cache_destroy(pdev->disk_cache_meta); - if (pdev->local_fd != -1) - close(pdev->local_fd); if (pdev->master_fd != -1) close(pdev->master_fd); vk_physical_device_finish(&pdev->vk); diff --git a/src/amd/vulkan/radv_physical_device.h b/src/amd/vulkan/radv_physical_device.h index e444ff4c0ba..61b77273615 100644 --- a/src/amd/vulkan/radv_physical_device.h +++ b/src/amd/vulkan/radv_physical_device.h @@ -79,7 +79,6 @@ struct radv_physical_device { struct ac_addrlib *addrlib; - int local_fd; int master_fd; struct wsi_device wsi_device; diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 78a88981ba8..cbaa7217257 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -109,7 +109,7 @@ radv_init_wsi(struct radv_physical_device *pdev) pdev->wsi_device.supports_protected[i] = radv_tmz_enabled(pdev); } - wsi_device_setup_syncobj_fd(&pdev->wsi_device, pdev->local_fd); + wsi_device_setup_syncobj_fd(&pdev->wsi_device, pdev->ws->get_fd(pdev->ws)); pdev->vk.wsi_device = &pdev->wsi_device; diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c index f70b5866855..481065ab413 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c @@ -300,7 +300,7 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags, ws->info.is_virtio = is_virtio; enum ac_query_gpu_info_result info_result = - ac_query_gpu_info(fd, ws->dev, &ws->info, true, !(debug_flags & RADV_DEBUG_NO_CACHE_COMPAT)); + ac_query_gpu_info(ws->fd, ws->dev, &ws->info, true, !(debug_flags & RADV_DEBUG_NO_CACHE_COMPAT)); if (info_result != AC_QUERY_GPU_INFO_SUCCESS) { result = info_result == AC_QUERY_GPU_INFO_FAIL ? VK_ERROR_INITIALIZATION_FAILED : VK_ERROR_INCOMPATIBLE_DRIVER; goto winsys_fail;