• Leo Yan's avatar
    perf cs-etm: Generate branch sample for exception packet · 7100b12c
    Leo Yan authored
    The exception packet appears as one element with 'elem_type' ==
    OCSD_GEN_TRC_ELEM_EXCEPTION or OCSD_GEN_TRC_ELEM_EXCEPTION_RET, which is
    present for exception entry and exit respectively.  The decoder sets the
    packet fields 'packet->exc' and 'packet->exc_ret' to indicate the
    exception packets; but exception packets don't have a dedicated sample
    type and shares the same sample type CS_ETM_RANGE with normal
    instruction packets.
    
    As a result, the exception packets are taken as normal instruction
    packets and this introduces confusion in mixing different packet types.
    Furthermore, these instruction range packets will be processed for
    branch samples only when 'packet->last_instr_taken_branch' is true,
    otherwise they will be omitted, this can introduce a mess for exception
    and exception returning due to not having the complete address range
    info for context switching.
    
    To process exception packets properly, this patch introduces two new
    sample types: CS_ETM_EXCEPTION and CS_ETM_EXCEPTION_RET; these two types
    of packets will be handled by cs_etm__exception().  The function
    cs_etm__exception() forces setting the previous CS_ETM_RANGE packet flag
    'prev_packet->last_instr_taken_branch' to true, this matches well with
    the program flow when the exception is trapped from user space to kernel
    space, no matter if the most recent flow has branch taken or not; this
    is also safe for returning to user space after exception handling.
    
    After exception packets have their own sample type, the packet fields
    'packet->exc' and 'packet->exc_ret' aren't needed anymore, so remove
    them.
    Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
    Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Robert Walker <robert.walker@arm.com>
    Cc: coresight ml <coresight@lists.linaro.org>
    Cc: linux-arm-kernel@lists.infradead.org
    Link: http://lkml.kernel.org/r/1544513908-16805-9-git-send-email-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    7100b12c
cs-etm-decoder.c 16.2 KB