aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-05-06 21:15:53 +0200
committerMarek Olšák <[email protected]>2017-05-06 21:17:52 +0200
commit314657dc11db651268ce5a0c9713337ddc68fe31 (patch)
tree8f0d578e485ca37628d3e4963eb46daa21e39442 /src/gallium/drivers
parentb0d01bd303971931f038e95f73f4c610d1b79941 (diff)
Revert "radeonsi: constify a bunch of the perfcounter structs."
This reverts commit 7088b655e8828bb960f528dd33132de27c505b8f. It breaks performance counters. If you use them with this commit, they hang the machine hard. Sysrq and ssh don't work.
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/radeon/r600_perfcounter.c2
-rw-r--r--src/gallium/drivers/radeon/r600_query.h4
-rw-r--r--src/gallium/drivers/radeonsi/si_perfcounter.c92
3 files changed, 52 insertions, 46 deletions
diff --git a/src/gallium/drivers/radeon/r600_perfcounter.c b/src/gallium/drivers/radeon/r600_perfcounter.c
index d76aa7be277..48f609bcb41 100644
--- a/src/gallium/drivers/radeon/r600_perfcounter.c
+++ b/src/gallium/drivers/radeon/r600_perfcounter.c
@@ -603,7 +603,7 @@ void r600_perfcounters_add_block(struct r600_common_screen *rscreen,
struct r600_perfcounters *pc,
const char *name, unsigned flags,
unsigned counters, unsigned selectors,
- unsigned instances, const void *data)
+ unsigned instances, void *data)
{
struct r600_perfcounter_block *block = &pc->blocks[pc->num_blocks];
diff --git a/src/gallium/drivers/radeon/r600_query.h b/src/gallium/drivers/radeon/r600_query.h
index 834dde1330f..05aceb72839 100644
--- a/src/gallium/drivers/radeon/r600_query.h
+++ b/src/gallium/drivers/radeon/r600_query.h
@@ -243,7 +243,7 @@ struct r600_perfcounter_block {
char *selector_names;
unsigned selector_name_stride;
- const void *data;
+ void *data;
};
struct r600_perfcounters {
@@ -301,7 +301,7 @@ void r600_perfcounters_add_block(struct r600_common_screen *,
struct r600_perfcounters *,
const char *name, unsigned flags,
unsigned counters, unsigned selectors,
- unsigned instances, const void *data);
+ unsigned instances, void *data);
void r600_perfcounters_do_destroy(struct r600_perfcounters *);
void r600_query_hw_reset_buffers(struct r600_common_context *rctx,
struct r600_query_hw *query);
diff --git a/src/gallium/drivers/radeonsi/si_perfcounter.c b/src/gallium/drivers/radeonsi/si_perfcounter.c
index ad7b9b7ae4b..41dd52edb11 100644
--- a/src/gallium/drivers/radeonsi/si_perfcounter.c
+++ b/src/gallium/drivers/radeonsi/si_perfcounter.c
@@ -60,22 +60,22 @@ enum si_pc_reg_layout {
};
struct si_pc_block_base {
- char name[8];
+ const char *name;
unsigned num_counters;
unsigned flags;
unsigned select_or;
unsigned select0;
unsigned counter0_lo;
- unsigned select[4];
- unsigned counters[4];
+ unsigned *select;
+ unsigned *counters;
unsigned num_multi;
unsigned num_prelude;
unsigned layout;
};
struct si_pc_block {
- const struct si_pc_block_base *b;
+ struct si_pc_block_base *b;
unsigned selectors;
unsigned instances;
};
@@ -98,7 +98,7 @@ static const unsigned si_pc_shader_type_bits[] = {
S_036780_CS_EN(1),
};
-static const struct si_pc_block_base cik_CB = {
+static struct si_pc_block_base cik_CB = {
.name = "CB",
.num_counters = 4,
.flags = R600_PC_BLOCK_SE | R600_PC_BLOCK_INSTANCE_GROUPS,
@@ -110,19 +110,22 @@ static const struct si_pc_block_base cik_CB = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_CPC = {
+static unsigned cik_CPC_select[] = {
+ R_036024_CPC_PERFCOUNTER0_SELECT,
+ R_036010_CPC_PERFCOUNTER0_SELECT1,
+ R_03600C_CPC_PERFCOUNTER1_SELECT,
+};
+static struct si_pc_block_base cik_CPC = {
.name = "CPC",
.num_counters = 2,
- .select = { R_036024_CPC_PERFCOUNTER0_SELECT,
- R_036010_CPC_PERFCOUNTER0_SELECT1,
- R_03600C_CPC_PERFCOUNTER1_SELECT },
+ .select = cik_CPC_select,
.counter0_lo = R_034018_CPC_PERFCOUNTER0_LO,
.num_multi = 1,
.layout = SI_PC_MULTI_CUSTOM | SI_PC_REG_REVERSE,
};
-static const struct si_pc_block_base cik_CPF = {
+static struct si_pc_block_base cik_CPF = {
.name = "CPF",
.num_counters = 2,
@@ -132,7 +135,7 @@ static const struct si_pc_block_base cik_CPF = {
.layout = SI_PC_MULTI_ALTERNATE | SI_PC_REG_REVERSE,
};
-static const struct si_pc_block_base cik_CPG = {
+static struct si_pc_block_base cik_CPG = {
.name = "CPG",
.num_counters = 2,
@@ -142,7 +145,7 @@ static const struct si_pc_block_base cik_CPG = {
.layout = SI_PC_MULTI_ALTERNATE | SI_PC_REG_REVERSE,
};
-static const struct si_pc_block_base cik_DB = {
+static struct si_pc_block_base cik_DB = {
.name = "DB",
.num_counters = 4,
.flags = R600_PC_BLOCK_SE | R600_PC_BLOCK_INSTANCE_GROUPS,
@@ -153,7 +156,7 @@ static const struct si_pc_block_base cik_DB = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_GDS = {
+static struct si_pc_block_base cik_GDS = {
.name = "GDS",
.num_counters = 4,
@@ -163,16 +166,19 @@ static const struct si_pc_block_base cik_GDS = {
.layout = SI_PC_MULTI_TAIL,
};
-static const struct si_pc_block_base cik_GRBM = {
+static unsigned cik_GRBM_counters[] = {
+ R_034100_GRBM_PERFCOUNTER0_LO,
+ R_03410C_GRBM_PERFCOUNTER1_LO,
+};
+static struct si_pc_block_base cik_GRBM = {
.name = "GRBM",
.num_counters = 2,
.select0 = R_036100_GRBM_PERFCOUNTER0_SELECT,
- .counters = { R_034100_GRBM_PERFCOUNTER0_LO,
- R_03410C_GRBM_PERFCOUNTER1_LO },
+ .counters = cik_GRBM_counters,
};
-static const struct si_pc_block_base cik_GRBMSE = {
+static struct si_pc_block_base cik_GRBMSE = {
.name = "GRBMSE",
.num_counters = 4,
@@ -180,7 +186,7 @@ static const struct si_pc_block_base cik_GRBMSE = {
.counter0_lo = R_034114_GRBM_SE0_PERFCOUNTER_LO,
};
-static const struct si_pc_block_base cik_IA = {
+static struct si_pc_block_base cik_IA = {
.name = "IA",
.num_counters = 4,
@@ -190,7 +196,7 @@ static const struct si_pc_block_base cik_IA = {
.layout = SI_PC_MULTI_TAIL,
};
-static const struct si_pc_block_base cik_PA_SC = {
+static struct si_pc_block_base cik_PA_SC = {
.name = "PA_SC",
.num_counters = 8,
.flags = R600_PC_BLOCK_SE,
@@ -202,7 +208,7 @@ static const struct si_pc_block_base cik_PA_SC = {
};
/* According to docs, PA_SU counters are only 48 bits wide. */
-static const struct si_pc_block_base cik_PA_SU = {
+static struct si_pc_block_base cik_PA_SU = {
.name = "PA_SU",
.num_counters = 4,
.flags = R600_PC_BLOCK_SE,
@@ -213,7 +219,7 @@ static const struct si_pc_block_base cik_PA_SU = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_SPI = {
+static struct si_pc_block_base cik_SPI = {
.name = "SPI",
.num_counters = 6,
.flags = R600_PC_BLOCK_SE,
@@ -224,7 +230,7 @@ static const struct si_pc_block_base cik_SPI = {
.layout = SI_PC_MULTI_BLOCK,
};
-static const struct si_pc_block_base cik_SQ = {
+static struct si_pc_block_base cik_SQ = {
.name = "SQ",
.num_counters = 16,
.flags = R600_PC_BLOCK_SE | R600_PC_BLOCK_SHADER,
@@ -236,7 +242,7 @@ static const struct si_pc_block_base cik_SQ = {
.counter0_lo = R_034700_SQ_PERFCOUNTER0_LO,
};
-static const struct si_pc_block_base cik_SX = {
+static struct si_pc_block_base cik_SX = {
.name = "SX",
.num_counters = 4,
.flags = R600_PC_BLOCK_SE,
@@ -247,7 +253,7 @@ static const struct si_pc_block_base cik_SX = {
.layout = SI_PC_MULTI_TAIL,
};
-static const struct si_pc_block_base cik_TA = {
+static struct si_pc_block_base cik_TA = {
.name = "TA",
.num_counters = 2,
.flags = R600_PC_BLOCK_SE | R600_PC_BLOCK_INSTANCE_GROUPS | R600_PC_BLOCK_SHADER_WINDOWED,
@@ -258,7 +264,7 @@ static const struct si_pc_block_base cik_TA = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_TD = {
+static struct si_pc_block_base cik_TD = {
.name = "TD",
.num_counters = 2,
.flags = R600_PC_BLOCK_SE | R600_PC_BLOCK_INSTANCE_GROUPS | R600_PC_BLOCK_SHADER_WINDOWED,
@@ -269,7 +275,7 @@ static const struct si_pc_block_base cik_TD = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_TCA = {
+static struct si_pc_block_base cik_TCA = {
.name = "TCA",
.num_counters = 4,
.flags = R600_PC_BLOCK_INSTANCE_GROUPS,
@@ -280,7 +286,7 @@ static const struct si_pc_block_base cik_TCA = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_TCC = {
+static struct si_pc_block_base cik_TCC = {
.name = "TCC",
.num_counters = 4,
.flags = R600_PC_BLOCK_INSTANCE_GROUPS,
@@ -291,7 +297,7 @@ static const struct si_pc_block_base cik_TCC = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_TCP = {
+static struct si_pc_block_base cik_TCP = {
.name = "TCP",
.num_counters = 4,
.flags = R600_PC_BLOCK_SE | R600_PC_BLOCK_INSTANCE_GROUPS | R600_PC_BLOCK_SHADER_WINDOWED,
@@ -302,7 +308,7 @@ static const struct si_pc_block_base cik_TCP = {
.layout = SI_PC_MULTI_ALTERNATE,
};
-static const struct si_pc_block_base cik_VGT = (const struct si_pc_block_base) {
+static struct si_pc_block_base cik_VGT = {
.name = "VGT",
.num_counters = 4,
.flags = R600_PC_BLOCK_SE,
@@ -313,7 +319,7 @@ static const struct si_pc_block_base cik_VGT = (const struct si_pc_block_base) {
.layout = SI_PC_MULTI_TAIL,
};
-static const struct si_pc_block_base cik_WD = {
+static struct si_pc_block_base cik_WD = {
.name = "WD",
.num_counters = 4,
@@ -321,14 +327,14 @@ static const struct si_pc_block_base cik_WD = {
.counter0_lo = R_034200_WD_PERFCOUNTER0_LO,
};
-static const struct si_pc_block_base cik_MC = {
+static struct si_pc_block_base cik_MC = {
.name = "MC",
.num_counters = 4,
.layout = SI_PC_FAKE,
};
-static const struct si_pc_block_base cik_SRBM = {
+static struct si_pc_block_base cik_SRBM = {
.name = "SRBM",
.num_counters = 2,
@@ -343,7 +349,7 @@ static const struct si_pc_block_base cik_SRBM = {
* blindly once it believes it has identified the hardware, so the order of
* blocks here matters.
*/
-static const struct si_pc_block groups_CIK[] = {
+static struct si_pc_block groups_CIK[] = {
{ &cik_CB, 226, 4 },
{ &cik_CPF, 17 },
{ &cik_DB, 257, 4 },
@@ -370,7 +376,7 @@ static const struct si_pc_block groups_CIK[] = {
};
-static const struct si_pc_block groups_VI[] = {
+static struct si_pc_block groups_VI[] = {
{ &cik_CB, 396, 4 },
{ &cik_CPF, 19 },
{ &cik_DB, 257, 4 },
@@ -401,8 +407,8 @@ static void si_pc_get_size(struct r600_perfcounter_block *group,
unsigned count, unsigned *selectors,
unsigned *num_select_dw, unsigned *num_read_dw)
{
- const struct si_pc_block *sigroup = (const struct si_pc_block *)group->data;
- const struct si_pc_block_base *regs = sigroup->b;
+ struct si_pc_block *sigroup = (struct si_pc_block *)group->data;
+ struct si_pc_block_base *regs = sigroup->b;
unsigned layout_multi = regs->layout & SI_PC_MULTI_MASK;
if (regs->layout & SI_PC_FAKE) {
@@ -461,8 +467,8 @@ static void si_pc_emit_select(struct r600_common_context *ctx,
struct r600_perfcounter_block *group,
unsigned count, unsigned *selectors)
{
- const struct si_pc_block *sigroup = (const struct si_pc_block *)group->data;
- const struct si_pc_block_base *regs = sigroup->b;
+ struct si_pc_block *sigroup = (struct si_pc_block *)group->data;
+ struct si_pc_block_base *regs = sigroup->b;
struct radeon_winsys_cs *cs = ctx->gfx.cs;
unsigned idx;
unsigned layout_multi = regs->layout & SI_PC_MULTI_MASK;
@@ -515,7 +521,7 @@ static void si_pc_emit_select(struct r600_common_context *ctx,
for (idx = 0; idx < select1_count; ++idx)
radeon_emit(cs, 0);
} else if (layout_multi == SI_PC_MULTI_CUSTOM) {
- const unsigned *reg = regs->select;
+ unsigned *reg = regs->select;
for (idx = 0; idx < count; ++idx) {
radeon_set_uconfig_reg(cs, *reg++, selectors[idx] | regs->select_or);
if (idx < regs->num_multi)
@@ -602,8 +608,8 @@ static void si_pc_emit_read(struct r600_common_context *ctx,
unsigned count, unsigned *selectors,
struct r600_resource *buffer, uint64_t va)
{
- const struct si_pc_block *sigroup = (const struct si_pc_block *)group->data;
- const struct si_pc_block_base *regs = sigroup->b;
+ struct si_pc_block *sigroup = (struct si_pc_block *)group->data;
+ struct si_pc_block_base *regs = sigroup->b;
struct radeon_winsys_cs *cs = ctx->gfx.cs;
unsigned idx;
unsigned reg = regs->counter0_lo;
@@ -652,7 +658,7 @@ static void si_pc_cleanup(struct r600_common_screen *rscreen)
void si_init_perfcounters(struct si_screen *screen)
{
struct r600_perfcounters *pc;
- const struct si_pc_block *blocks;
+ struct si_pc_block *blocks;
unsigned num_blocks;
unsigned i;
@@ -704,7 +710,7 @@ void si_init_perfcounters(struct si_screen *screen)
goto error;
for (i = 0; i < num_blocks; ++i) {
- const struct si_pc_block *block = &blocks[i];
+ struct si_pc_block *block = &blocks[i];
unsigned instances = block->instances;
if (!strcmp(block->b->name, "IA")) {