radeonsi: fix segfault in descriptor dumping
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -666,6 +666,24 @@ static void si_dump_descriptor_list(struct si_screen *screen,
|
|||||||
if (!desc->list)
|
if (!desc->list)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* In some cases, the caller doesn't know how many elements are really
|
||||||
|
* uploaded. Reduce num_elements to fit in the range of active slots. */
|
||||||
|
unsigned active_range_dw_begin =
|
||||||
|
desc->first_active_slot * desc->element_dw_size;
|
||||||
|
unsigned active_range_dw_end =
|
||||||
|
active_range_dw_begin + desc->num_active_slots * desc->element_dw_size;
|
||||||
|
|
||||||
|
while (num_elements > 0) {
|
||||||
|
int i = slot_remap(num_elements - 1);
|
||||||
|
unsigned dw_begin = i * element_dw_size;
|
||||||
|
unsigned dw_end = dw_begin + element_dw_size;
|
||||||
|
|
||||||
|
if (dw_begin >= active_range_dw_begin && dw_end <= active_range_dw_end)
|
||||||
|
break;
|
||||||
|
|
||||||
|
num_elements--;
|
||||||
|
}
|
||||||
|
|
||||||
struct si_log_chunk_desc_list *chunk =
|
struct si_log_chunk_desc_list *chunk =
|
||||||
CALLOC_VARIANT_LENGTH_STRUCT(si_log_chunk_desc_list,
|
CALLOC_VARIANT_LENGTH_STRUCT(si_log_chunk_desc_list,
|
||||||
4 * element_dw_size * num_elements);
|
4 * element_dw_size * num_elements);
|
||||||
|
Reference in New Issue
Block a user