From 5d92c92ce56c4c3b9d98936fee51129281923e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 1 Nov 2025 22:20:47 -0400 Subject: [PATCH] Revert ABI breakage "amd: Add user queue HQD count to hw_ip info" This reverts commit 56d758d321fd87b883106585b564fac92aa0793a. It broke ABI between Mesa and libdrm, causing crashes due to stack smashing. See: https://gitlab.freedesktop.org/mesa/libdrm/-/issues/121#note_3172362 Fixes: 56d758d321fd87b883106585b564fac92aa0793a Part-of: --- include/drm-uapi/amdgpu_drm.h | 2 -- src/amd/common/ac_gpu_info.c | 8 +++----- src/amd/common/ac_gpu_info.h | 1 - src/amd/common/ac_linux_drm.h | 1 - src/amd/drm-shim/amdgpu_devices.c | 8 -------- src/amd/drm-shim/amdgpu_dump_states.c | 1 - 6 files changed, 3 insertions(+), 18 deletions(-) diff --git a/include/drm-uapi/amdgpu_drm.h b/include/drm-uapi/amdgpu_drm.h index 7c070bb3f1e..da35a2e66a3 100644 --- a/include/drm-uapi/amdgpu_drm.h +++ b/include/drm-uapi/amdgpu_drm.h @@ -1489,8 +1489,6 @@ struct drm_amdgpu_info_hw_ip { __u32 available_rings; /** version info: bits 23:16 major, 15:8 minor, 7:0 revision */ __u32 ip_discovery_version; - /* Userq available slots */ - __u32 userq_num_slots; }; /* GFX metadata BO sizes and alignment info (in bytes) */ diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c index 39431c1ce87..77931a636cf 100644 --- a/src/amd/common/ac_gpu_info.c +++ b/src/amd/common/ac_gpu_info.c @@ -315,8 +315,6 @@ ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info, info->ip[ip_type].num_queues = 1; } else if (ip_info.available_rings) { info->ip[ip_type].num_queues = util_bitcount(ip_info.available_rings); - } else if (ip_info.userq_num_slots) { - info->ip[ip_type].num_queue_slots = ip_info.userq_num_slots; } else { continue; } @@ -1696,11 +1694,11 @@ void ac_print_gpu_info(const struct radeon_info *info, FILE *f) fprintf(f, " clock_crystal_freq = %i KHz\n", info->clock_crystal_freq); for (unsigned i = 0; i < AMD_NUM_IP_TYPES; i++) { - if (info->ip[i].num_queues || info->ip[i].num_queue_slots) { - fprintf(f, " IP %-7s %2u.%u \tqueues:%u \tqueue_slots:%u \talign:%u \tpad_dw:0x%x\n", + if (info->ip[i].num_queues) { + fprintf(f, " IP %-7s %2u.%u \tqueues:%u \talign:%u \tpad_dw:0x%x\n", ac_get_ip_type_string(info, i), info->ip[i].ver_major, info->ip[i].ver_minor, info->ip[i].num_queues, - info->ip[i].num_queue_slots,info->ip[i].ib_alignment, info->ip[i].ib_pad_dw_mask); + info->ip[i].ib_alignment, info->ip[i].ib_pad_dw_mask); } } diff --git a/src/amd/common/ac_gpu_info.h b/src/amd/common/ac_gpu_info.h index 91d2b11d1c3..a99defde032 100644 --- a/src/amd/common/ac_gpu_info.h +++ b/src/amd/common/ac_gpu_info.h @@ -26,7 +26,6 @@ struct amd_ip_info { uint8_t ver_minor; uint8_t ver_rev; uint8_t num_queues; - uint8_t num_queue_slots; uint8_t num_instances; uint32_t ib_alignment; uint32_t ib_pad_dw_mask; diff --git a/src/amd/common/ac_linux_drm.h b/src/amd/common/ac_linux_drm.h index 887206f4ba2..78a242cdbda 100644 --- a/src/amd/common/ac_linux_drm.h +++ b/src/amd/common/ac_linux_drm.h @@ -194,7 +194,6 @@ struct drm_amdgpu_info_hw_ip { uint32_t ib_size_alignment; uint32_t available_rings; uint32_t ip_discovery_version; - uint32_t userq_num_slots; }; struct drm_amdgpu_info_uq_fw_areas_gfx { diff --git a/src/amd/drm-shim/amdgpu_devices.c b/src/amd/drm-shim/amdgpu_devices.c index 52647062946..ae3118ffa05 100644 --- a/src/amd/drm-shim/amdgpu_devices.c +++ b/src/amd/drm-shim/amdgpu_devices.c @@ -1329,7 +1329,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0x1, .ip_discovery_version = 0xb0000, - .userq_num_slots = 2, }, .hw_ip_compute = { .hw_ip_version_major = 11, @@ -1339,7 +1338,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0xf, .ip_discovery_version = 0xb0000, - .userq_num_slots = 16, }, .fw_gfx_me = { .ver = 1486, @@ -1460,7 +1458,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0x1, .ip_discovery_version = 0xb0002, - .userq_num_slots = 0x0, }, .hw_ip_compute = { .hw_ip_version_major = 11, @@ -1470,7 +1467,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0xf, .ip_discovery_version = 0xb0002, - .userq_num_slots = 0x0, }, .fw_gfx_me = { .ver = 2390, @@ -2070,7 +2066,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0x1, .ip_discovery_version = 0xb0500, - .userq_num_slots = 2, }, .hw_ip_compute = { .hw_ip_version_major = 11, @@ -2080,7 +2075,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0xf, .ip_discovery_version = 0xb0500, - .userq_num_slots = 16, }, .fw_gfx_me = { .ver = 29, @@ -2201,7 +2195,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0x1, .ip_discovery_version = 0xc0001, - .userq_num_slots = 8, }, .hw_ip_compute = { .hw_ip_version_major = 12, @@ -2211,7 +2204,6 @@ const struct amdgpu_device amdgpu_devices[] = { .ib_size_alignment = 32, .available_rings = 0xf, .ip_discovery_version = 0xc0001, - .userq_num_slots = 8, }, .fw_gfx_me = { .ver = 2590, diff --git a/src/amd/drm-shim/amdgpu_dump_states.c b/src/amd/drm-shim/amdgpu_dump_states.c index eff2b0cc102..196020125b1 100644 --- a/src/amd/drm-shim/amdgpu_dump_states.c +++ b/src/amd/drm-shim/amdgpu_dump_states.c @@ -379,7 +379,6 @@ amdgpu_dump_hw_ips(int fd) printf(" .ib_size_alignment = %u,\n", info.ib_size_alignment); printf(" .available_rings = 0x%x,\n", info.available_rings); printf(" .ip_discovery_version = 0x%04x,\n", info.ip_discovery_version); - printf(" .userq_num_slots = 0x%x,\n", info.userq_num_slots); printf("},\n"); } }