Module: Mesa
Branch: main
Commit: c4283e32e3e8d96987358620aa43483a79eea08b
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c4283e32e3e8d96987358620aa43483a79eea08b

Author: Mike Blumenkrantz <michael.blumenkra...@gmail.com>
Date:   Thu Oct 26 15:50:06 2023 -0400

radv: correctly return oom from the device when failing to create a cs

cc: mesa-stable

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

---

 src/amd/vulkan/radv_cmd_buffer.c       | 4 ++--
 src/amd/vulkan/radv_cp_reg_shadowing.c | 4 ++--
 src/amd/vulkan/radv_queue.c            | 6 ++++--
 src/amd/vulkan/radv_shader.c           | 2 +-
 4 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 7315cf12eb9..d8a0ab5caf3 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -355,7 +355,7 @@ radv_create_cmd_buffer(struct vk_command_pool *pool, struct 
vk_command_buffer **
    cmd_buffer->cs = device->ws->cs_create(device->ws, ring, 
cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
    if (!cmd_buffer->cs) {
       radv_destroy_cmd_buffer(&cmd_buffer->vk);
-      return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
+      return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY);
    }
 
    vk_object_base_init(&device->vk, &cmd_buffer->meta_push_descriptors.base, 
VK_OBJECT_TYPE_DESCRIPTOR_SET);
@@ -698,7 +698,7 @@ radv_gang_init(struct radv_cmd_buffer *cmd_buffer)
       device->ws->cs_create(device->ws, AMD_IP_COMPUTE, cmd_buffer->vk.level 
== VK_COMMAND_BUFFER_LEVEL_SECONDARY);
 
    if (!ace_cs) {
-      vk_command_buffer_set_error(&cmd_buffer->vk, 
VK_ERROR_OUT_OF_HOST_MEMORY);
+      vk_command_buffer_set_error(&cmd_buffer->vk, 
VK_ERROR_OUT_OF_DEVICE_MEMORY);
       return false;
    }
 
diff --git a/src/amd/vulkan/radv_cp_reg_shadowing.c 
b/src/amd/vulkan/radv_cp_reg_shadowing.c
index 9f19c68fec9..f846bf51b33 100644
--- a/src/amd/vulkan/radv_cp_reg_shadowing.c
+++ b/src/amd/vulkan/radv_cp_reg_shadowing.c
@@ -44,7 +44,7 @@ radv_create_shadow_regs_preamble(const struct radv_device 
*device, struct radv_q
 
    struct radeon_cmdbuf *cs = ws->cs_create(ws, AMD_IP_GFX, false);
    if (!cs)
-      return VK_ERROR_OUT_OF_HOST_MEMORY;
+      return VK_ERROR_OUT_OF_DEVICE_MEMORY;
 
    radeon_check_space(ws, cs, 256);
 
@@ -131,7 +131,7 @@ radv_init_shadowed_regs_buffer_state(const struct 
radv_device *device, struct ra
 
    cs = ws->cs_create(ws, AMD_IP_GFX, false);
    if (!cs)
-      return VK_ERROR_OUT_OF_HOST_MEMORY;
+      return VK_ERROR_OUT_OF_DEVICE_MEMORY;
 
    radeon_check_space(ws, cs, 768);
 
diff --git a/src/amd/vulkan/radv_queue.c b/src/amd/vulkan/radv_queue.c
index 3160824d461..abdfae500fe 100644
--- a/src/amd/vulkan/radv_queue.c
+++ b/src/amd/vulkan/radv_queue.c
@@ -996,7 +996,7 @@ radv_update_preamble_cs(struct radv_queue_state *queue, 
struct radv_device *devi
       struct radeon_cmdbuf *cs = NULL;
       cs = ws->cs_create(ws, 
radv_queue_family_to_ring(device->physical_device, queue->qf), false);
       if (!cs) {
-         result = VK_ERROR_OUT_OF_HOST_MEMORY;
+         result = VK_ERROR_OUT_OF_DEVICE_MEMORY;
          goto fail;
       }
 
@@ -1263,8 +1263,10 @@ radv_create_gang_wait_preambles_postambles(struct 
radv_queue *queue)
    struct radeon_cmdbuf *ace_pre_cs = ws->cs_create(ws, AMD_IP_COMPUTE, false);
    struct radeon_cmdbuf *ace_post_cs = ws->cs_create(ws, AMD_IP_COMPUTE, 
false);
 
-   if (!leader_pre_cs || !leader_post_cs || !ace_pre_cs || !ace_post_cs)
+   if (!leader_pre_cs || !leader_post_cs || !ace_pre_cs || !ace_post_cs) {
+      r = VK_ERROR_OUT_OF_DEVICE_MEMORY;
       goto fail;
+   }
 
    radeon_check_space(ws, leader_pre_cs, 256);
    radeon_check_space(ws, leader_post_cs, 256);
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 19944d3d63e..ddaacee1b58 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -1405,7 +1405,7 @@ radv_init_shader_upload_queue(struct radv_device *device)
       struct radv_shader_dma_submission *submission = calloc(1, sizeof(struct 
radv_shader_dma_submission));
       submission->cs = ws->cs_create(ws, AMD_IP_SDMA, false);
       if (!submission->cs)
-         return VK_ERROR_OUT_OF_HOST_MEMORY;
+         return VK_ERROR_OUT_OF_DEVICE_MEMORY;
       list_addtail(&submission->list, &device->shader_dma_submissions);
    }
 

Reply via email to