[PATCH] perf cs-etm: Mute enumeration value warning
James Clark
james.clark at linaro.org
Wed Oct 22 08:48:52 PDT 2025
On 22/10/2025 3:28 pm, Leo Yan wrote:
> When the OpenCSD library introduces a new enumeration value (for example,
> in the v1.7.1 release), the perf build fails with an error:
>
> util/cs-etm-decoder/cs-etm-decoder.c:600:10: error: enumeration value 'OCSD_GEN_TRC_ELEM_ITMTRACE' not explicitly handled in switch [-Werror, -Wswitch-enum]
> 600 | switch (elem->elem_type) {
> | ^~~~~~~~~~~~~~~
> 1 error generated.
>
> Convert to if-else sentences to mute the enumeration value warning,
> which can avoid build failures whenever the lib is updated.
>
> No functional change.
>
> Suggested-by: Suzuki K Poulose <suzuki.poulose at arm.com>
> Signed-off-by: Leo Yan <leo.yan at arm.com>
Reviewed-by: James Clark <james.clark at linaro.org>
> ---
> .../perf/util/cs-etm-decoder/cs-etm-decoder.c | 44 +++++--------------
> 1 file changed, 11 insertions(+), 33 deletions(-)
>
> diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> index b85a8837bddc..3050fe212666 100644
> --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
> @@ -588,6 +588,7 @@ static ocsd_datapath_resp_t cs_etm_decoder__gen_trace_elem_printer(
> const ocsd_generic_trace_elem *elem)
> {
> ocsd_datapath_resp_t resp = OCSD_RESP_CONT;
> + ocsd_gen_trc_elem_t type;
> struct cs_etm_decoder *decoder = (struct cs_etm_decoder *) context;
> struct cs_etm_queue *etmq = decoder->data;
> struct cs_etm_packet_queue *packet_queue;
> @@ -597,52 +598,29 @@ static ocsd_datapath_resp_t cs_etm_decoder__gen_trace_elem_printer(
> if (!packet_queue)
> return OCSD_RESP_FATAL_SYS_ERR;
>
> - switch (elem->elem_type) {
> - case OCSD_GEN_TRC_ELEM_UNKNOWN:
> - break;
> - case OCSD_GEN_TRC_ELEM_EO_TRACE:
> - case OCSD_GEN_TRC_ELEM_NO_SYNC:
> - case OCSD_GEN_TRC_ELEM_TRACE_ON:
> + type = elem->elem_type;
> +
> + if (type == OCSD_GEN_TRC_ELEM_EO_TRACE ||
> + type == OCSD_GEN_TRC_ELEM_NO_SYNC ||
> + type == OCSD_GEN_TRC_ELEM_TRACE_ON)
> resp = cs_etm_decoder__buffer_discontinuity(etmq, packet_queue,
> trace_chan_id);
> - break;
> - case OCSD_GEN_TRC_ELEM_INSTR_RANGE:
> + else if (type == OCSD_GEN_TRC_ELEM_INSTR_RANGE)
> resp = cs_etm_decoder__buffer_range(etmq, packet_queue, elem,
> trace_chan_id);
> - break;
> - case OCSD_GEN_TRC_ELEM_EXCEPTION:
> + else if (type == OCSD_GEN_TRC_ELEM_EXCEPTION)
> resp = cs_etm_decoder__buffer_exception(etmq, packet_queue, elem,
> trace_chan_id);
> - break;
> - case OCSD_GEN_TRC_ELEM_EXCEPTION_RET:
> + else if (type == OCSD_GEN_TRC_ELEM_EXCEPTION_RET)
> resp = cs_etm_decoder__buffer_exception_ret(etmq, packet_queue,
> trace_chan_id);
> - break;
> - case OCSD_GEN_TRC_ELEM_TIMESTAMP:
> + else if (type == OCSD_GEN_TRC_ELEM_TIMESTAMP)
> resp = cs_etm_decoder__do_hard_timestamp(etmq, elem,
> trace_chan_id,
> indx);
> - break;
> - case OCSD_GEN_TRC_ELEM_PE_CONTEXT:
> + else if (type == OCSD_GEN_TRC_ELEM_PE_CONTEXT)
> resp = cs_etm_decoder__set_tid(etmq, packet_queue,
> elem, trace_chan_id);
> - break;
> - /* Unused packet types */
> - case OCSD_GEN_TRC_ELEM_I_RANGE_NOPATH:
> - case OCSD_GEN_TRC_ELEM_ADDR_NACC:
> - case OCSD_GEN_TRC_ELEM_CYCLE_COUNT:
> - case OCSD_GEN_TRC_ELEM_ADDR_UNKNOWN:
> - case OCSD_GEN_TRC_ELEM_EVENT:
> - case OCSD_GEN_TRC_ELEM_SWTRACE:
> - case OCSD_GEN_TRC_ELEM_CUSTOM:
> - case OCSD_GEN_TRC_ELEM_SYNC_MARKER:
> - case OCSD_GEN_TRC_ELEM_MEMTRANS:
> -#if (OCSD_VER_NUM >= 0x010400)
> - case OCSD_GEN_TRC_ELEM_INSTRUMENTATION:
> -#endif
> - default:
> - break;
> - }
>
> return resp;
> }
More information about the linux-arm-kernel
mailing list