perf intel-pt: Re-factor TIP cases in intel_pt_walk_to_ip
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 20 May 2019 11:37:16 +0000 (14:37 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 5 Jun 2019 12:47:56 +0000 (09:47 -0300)
To make it easier to add new code for different TIP cases, separate each
case.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/20190520113728.14389-11-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c

index a2384a3149904bbf07c1406251785a9913a3132c..99773445872dfaa69de8d109aeae9e4eeb544903 100644 (file)
@@ -2128,18 +2128,29 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
                switch (decoder->packet.type) {
                case INTEL_PT_TIP_PGD:
                        decoder->continuous_period = false;
-                       __fallthrough;
+                       decoder->pge = false;
+                       if (intel_pt_have_ip(decoder))
+                               intel_pt_set_ip(decoder);
+                       if (!decoder->ip)
+                               break;
+                       decoder->state.type |= INTEL_PT_TRACE_END;
+                       return 0;
+
                case INTEL_PT_TIP_PGE:
+                       decoder->pge = true;
+                       if (intel_pt_have_ip(decoder))
+                               intel_pt_set_ip(decoder);
+                       if (!decoder->ip)
+                               break;
+                       decoder->state.type |= INTEL_PT_TRACE_BEGIN;
+                       return 0;
+
                case INTEL_PT_TIP:
-                       decoder->pge = decoder->packet.type != INTEL_PT_TIP_PGD;
+                       decoder->pge = true;
                        if (intel_pt_have_ip(decoder))
                                intel_pt_set_ip(decoder);
                        if (!decoder->ip)
                                break;
-                       if (decoder->packet.type == INTEL_PT_TIP_PGE)
-                               decoder->state.type |= INTEL_PT_TRACE_BEGIN;
-                       if (decoder->packet.type == INTEL_PT_TIP_PGD)
-                               decoder->state.type |= INTEL_PT_TRACE_END;
                        return 0;
 
                case INTEL_PT_FUP: