linux/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
<<
>>
Prefs
   1/*
   2 * intel_pt_decoder.c: Intel Processor Trace support
   3 * Copyright (c) 2013-2014, Intel Corporation.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms and conditions of the GNU General Public License,
   7 * version 2, as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  12 * more details.
  13 *
  14 */
  15
  16#ifndef _GNU_SOURCE
  17#define _GNU_SOURCE
  18#endif
  19#include <stdlib.h>
  20#include <stdbool.h>
  21#include <string.h>
  22#include <errno.h>
  23#include <stdint.h>
  24#include <inttypes.h>
  25#include <linux/compiler.h>
  26
  27#include "../cache.h"
  28#include "../util.h"
  29
  30#include "intel-pt-insn-decoder.h"
  31#include "intel-pt-pkt-decoder.h"
  32#include "intel-pt-decoder.h"
  33#include "intel-pt-log.h"
  34
  35#define INTEL_PT_BLK_SIZE 1024
  36
  37#define BIT63 (((uint64_t)1 << 63))
  38
  39#define INTEL_PT_RETURN 1
  40
  41/* Maximum number of loops with no packets consumed i.e. stuck in a loop */
  42#define INTEL_PT_MAX_LOOPS 10000
  43
  44struct intel_pt_blk {
  45        struct intel_pt_blk *prev;
  46        uint64_t ip[INTEL_PT_BLK_SIZE];
  47};
  48
  49struct intel_pt_stack {
  50        struct intel_pt_blk *blk;
  51        struct intel_pt_blk *spare;
  52        int pos;
  53};
  54
  55enum intel_pt_pkt_state {
  56        INTEL_PT_STATE_NO_PSB,
  57        INTEL_PT_STATE_NO_IP,
  58        INTEL_PT_STATE_ERR_RESYNC,
  59        INTEL_PT_STATE_IN_SYNC,
  60        INTEL_PT_STATE_TNT,
  61        INTEL_PT_STATE_TIP,
  62        INTEL_PT_STATE_TIP_PGD,
  63        INTEL_PT_STATE_FUP,
  64        INTEL_PT_STATE_FUP_NO_TIP,
  65};
  66
  67static inline bool intel_pt_sample_time(enum intel_pt_pkt_state pkt_state)
  68{
  69        switch (pkt_state) {
  70        case INTEL_PT_STATE_NO_PSB:
  71        case INTEL_PT_STATE_NO_IP:
  72        case INTEL_PT_STATE_ERR_RESYNC:
  73        case INTEL_PT_STATE_IN_SYNC:
  74        case INTEL_PT_STATE_TNT:
  75                return true;
  76        case INTEL_PT_STATE_TIP:
  77        case INTEL_PT_STATE_TIP_PGD:
  78        case INTEL_PT_STATE_FUP:
  79        case INTEL_PT_STATE_FUP_NO_TIP:
  80                return false;
  81        default:
  82                return true;
  83        };
  84}
  85
  86#ifdef INTEL_PT_STRICT
  87#define INTEL_PT_STATE_ERR1     INTEL_PT_STATE_NO_PSB
  88#define INTEL_PT_STATE_ERR2     INTEL_PT_STATE_NO_PSB
  89#define INTEL_PT_STATE_ERR3     INTEL_PT_STATE_NO_PSB
  90#define INTEL_PT_STATE_ERR4     INTEL_PT_STATE_NO_PSB
  91#else
  92#define INTEL_PT_STATE_ERR1     (decoder->pkt_state)
  93#define INTEL_PT_STATE_ERR2     INTEL_PT_STATE_NO_IP
  94#define INTEL_PT_STATE_ERR3     INTEL_PT_STATE_ERR_RESYNC
  95#define INTEL_PT_STATE_ERR4     INTEL_PT_STATE_IN_SYNC
  96#endif
  97
  98struct intel_pt_decoder {
  99        int (*get_trace)(struct intel_pt_buffer *buffer, void *data);
 100        int (*walk_insn)(struct intel_pt_insn *intel_pt_insn,
 101                         uint64_t *insn_cnt_ptr, uint64_t *ip, uint64_t to_ip,
 102                         uint64_t max_insn_cnt, void *data);
 103        bool (*pgd_ip)(uint64_t ip, void *data);
 104        void *data;
 105        struct intel_pt_state state;
 106        const unsigned char *buf;
 107        size_t len;
 108        bool return_compression;
 109        bool branch_enable;
 110        bool mtc_insn;
 111        bool pge;
 112        bool have_tma;
 113        bool have_cyc;
 114        bool fixup_last_mtc;
 115        bool have_last_ip;
 116        uint64_t pos;
 117        uint64_t last_ip;
 118        uint64_t ip;
 119        uint64_t cr3;
 120        uint64_t timestamp;
 121        uint64_t tsc_timestamp;
 122        uint64_t ref_timestamp;
 123        uint64_t sample_timestamp;
 124        uint64_t ret_addr;
 125        uint64_t ctc_timestamp;
 126        uint64_t ctc_delta;
 127        uint64_t cycle_cnt;
 128        uint64_t cyc_ref_timestamp;
 129        uint32_t last_mtc;
 130        uint32_t tsc_ctc_ratio_n;
 131        uint32_t tsc_ctc_ratio_d;
 132        uint32_t tsc_ctc_mult;
 133        uint32_t tsc_slip;
 134        uint32_t ctc_rem_mask;
 135        int mtc_shift;
 136        struct intel_pt_stack stack;
 137        enum intel_pt_pkt_state pkt_state;
 138        struct intel_pt_pkt packet;
 139        struct intel_pt_pkt tnt;
 140        int pkt_step;
 141        int pkt_len;
 142        int last_packet_type;
 143        unsigned int cbr;
 144        unsigned int cbr_seen;
 145        unsigned int max_non_turbo_ratio;
 146        double max_non_turbo_ratio_fp;
 147        double cbr_cyc_to_tsc;
 148        double calc_cyc_to_tsc;
 149        bool have_calc_cyc_to_tsc;
 150        int exec_mode;
 151        unsigned int insn_bytes;
 152        uint64_t period;
 153        enum intel_pt_period_type period_type;
 154        uint64_t tot_insn_cnt;
 155        uint64_t period_insn_cnt;
 156        uint64_t period_mask;
 157        uint64_t period_ticks;
 158        uint64_t last_masked_timestamp;
 159        bool continuous_period;
 160        bool overflow;
 161        bool set_fup_tx_flags;
 162        bool set_fup_ptw;
 163        bool set_fup_mwait;
 164        bool set_fup_pwre;
 165        bool set_fup_exstop;
 166        unsigned int fup_tx_flags;
 167        unsigned int tx_flags;
 168        uint64_t fup_ptw_payload;
 169        uint64_t fup_mwait_payload;
 170        uint64_t fup_pwre_payload;
 171        uint64_t cbr_payload;
 172        uint64_t timestamp_insn_cnt;
 173        uint64_t sample_insn_cnt;
 174        uint64_t stuck_ip;
 175        int no_progress;
 176        int stuck_ip_prd;
 177        int stuck_ip_cnt;
 178        const unsigned char *next_buf;
 179        size_t next_len;
 180        unsigned char temp_buf[INTEL_PT_PKT_MAX_SZ];
 181};
 182
 183static uint64_t intel_pt_lower_power_of_2(uint64_t x)
 184{
 185        int i;
 186
 187        for (i = 0; x != 1; i++)
 188                x >>= 1;
 189
 190        return x << i;
 191}
 192
 193static void intel_pt_setup_period(struct intel_pt_decoder *decoder)
 194{
 195        if (decoder->period_type == INTEL_PT_PERIOD_TICKS) {
 196                uint64_t period;
 197
 198                period = intel_pt_lower_power_of_2(decoder->period);
 199                decoder->period_mask  = ~(period - 1);
 200                decoder->period_ticks = period;
 201        }
 202}
 203
 204static uint64_t multdiv(uint64_t t, uint32_t n, uint32_t d)
 205{
 206        if (!d)
 207                return 0;
 208        return (t / d) * n + ((t % d) * n) / d;
 209}
 210
 211struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params)
 212{
 213        struct intel_pt_decoder *decoder;
 214
 215        if (!params->get_trace || !params->walk_insn)
 216                return NULL;
 217
 218        decoder = zalloc(sizeof(struct intel_pt_decoder));
 219        if (!decoder)
 220                return NULL;
 221
 222        decoder->get_trace          = params->get_trace;
 223        decoder->walk_insn          = params->walk_insn;
 224        decoder->pgd_ip             = params->pgd_ip;
 225        decoder->data               = params->data;
 226        decoder->return_compression = params->return_compression;
 227        decoder->branch_enable      = params->branch_enable;
 228
 229        decoder->period             = params->period;
 230        decoder->period_type        = params->period_type;
 231
 232        decoder->max_non_turbo_ratio    = params->max_non_turbo_ratio;
 233        decoder->max_non_turbo_ratio_fp = params->max_non_turbo_ratio;
 234
 235        intel_pt_setup_period(decoder);
 236
 237        decoder->mtc_shift = params->mtc_period;
 238        decoder->ctc_rem_mask = (1 << decoder->mtc_shift) - 1;
 239
 240        decoder->tsc_ctc_ratio_n = params->tsc_ctc_ratio_n;
 241        decoder->tsc_ctc_ratio_d = params->tsc_ctc_ratio_d;
 242
 243        if (!decoder->tsc_ctc_ratio_n)
 244                decoder->tsc_ctc_ratio_d = 0;
 245
 246        if (decoder->tsc_ctc_ratio_d) {
 247                if (!(decoder->tsc_ctc_ratio_n % decoder->tsc_ctc_ratio_d))
 248                        decoder->tsc_ctc_mult = decoder->tsc_ctc_ratio_n /
 249                                                decoder->tsc_ctc_ratio_d;
 250
 251                /*
 252                 * Allow for timestamps appearing to backwards because a TSC
 253                 * packet has slipped past a MTC packet, so allow 2 MTC ticks
 254                 * or ...
 255                 */
 256                decoder->tsc_slip = multdiv(2 << decoder->mtc_shift,
 257                                        decoder->tsc_ctc_ratio_n,
 258                                        decoder->tsc_ctc_ratio_d);
 259        }
 260        /* ... or 0x100 paranoia */
 261        if (decoder->tsc_slip < 0x100)
 262                decoder->tsc_slip = 0x100;
 263
 264        intel_pt_log("timestamp: mtc_shift %u\n", decoder->mtc_shift);
 265        intel_pt_log("timestamp: tsc_ctc_ratio_n %u\n", decoder->tsc_ctc_ratio_n);
 266        intel_pt_log("timestamp: tsc_ctc_ratio_d %u\n", decoder->tsc_ctc_ratio_d);
 267        intel_pt_log("timestamp: tsc_ctc_mult %u\n", decoder->tsc_ctc_mult);
 268        intel_pt_log("timestamp: tsc_slip %#x\n", decoder->tsc_slip);
 269
 270        return decoder;
 271}
 272
 273static void intel_pt_pop_blk(struct intel_pt_stack *stack)
 274{
 275        struct intel_pt_blk *blk = stack->blk;
 276
 277        stack->blk = blk->prev;
 278        if (!stack->spare)
 279                stack->spare = blk;
 280        else
 281                free(blk);
 282}
 283
 284static uint64_t intel_pt_pop(struct intel_pt_stack *stack)
 285{
 286        if (!stack->pos) {
 287                if (!stack->blk)
 288                        return 0;
 289                intel_pt_pop_blk(stack);
 290                if (!stack->blk)
 291                        return 0;
 292                stack->pos = INTEL_PT_BLK_SIZE;
 293        }
 294        return stack->blk->ip[--stack->pos];
 295}
 296
 297static int intel_pt_alloc_blk(struct intel_pt_stack *stack)
 298{
 299        struct intel_pt_blk *blk;
 300
 301        if (stack->spare) {
 302                blk = stack->spare;
 303                stack->spare = NULL;
 304        } else {
 305                blk = malloc(sizeof(struct intel_pt_blk));
 306                if (!blk)
 307                        return -ENOMEM;
 308        }
 309
 310        blk->prev = stack->blk;
 311        stack->blk = blk;
 312        stack->pos = 0;
 313        return 0;
 314}
 315
 316static int intel_pt_push(struct intel_pt_stack *stack, uint64_t ip)
 317{
 318        int err;
 319
 320        if (!stack->blk || stack->pos == INTEL_PT_BLK_SIZE) {
 321                err = intel_pt_alloc_blk(stack);
 322                if (err)
 323                        return err;
 324        }
 325
 326        stack->blk->ip[stack->pos++] = ip;
 327        return 0;
 328}
 329
 330static void intel_pt_clear_stack(struct intel_pt_stack *stack)
 331{
 332        while (stack->blk)
 333                intel_pt_pop_blk(stack);
 334        stack->pos = 0;
 335}
 336
 337static void intel_pt_free_stack(struct intel_pt_stack *stack)
 338{
 339        intel_pt_clear_stack(stack);
 340        zfree(&stack->blk);
 341        zfree(&stack->spare);
 342}
 343
 344void intel_pt_decoder_free(struct intel_pt_decoder *decoder)
 345{
 346        intel_pt_free_stack(&decoder->stack);
 347        free(decoder);
 348}
 349
 350static int intel_pt_ext_err(int code)
 351{
 352        switch (code) {
 353        case -ENOMEM:
 354                return INTEL_PT_ERR_NOMEM;
 355        case -ENOSYS:
 356                return INTEL_PT_ERR_INTERN;
 357        case -EBADMSG:
 358                return INTEL_PT_ERR_BADPKT;
 359        case -ENODATA:
 360                return INTEL_PT_ERR_NODATA;
 361        case -EILSEQ:
 362                return INTEL_PT_ERR_NOINSN;
 363        case -ENOENT:
 364                return INTEL_PT_ERR_MISMAT;
 365        case -EOVERFLOW:
 366                return INTEL_PT_ERR_OVR;
 367        case -ENOSPC:
 368                return INTEL_PT_ERR_LOST;
 369        case -ELOOP:
 370                return INTEL_PT_ERR_NELOOP;
 371        default:
 372                return INTEL_PT_ERR_UNK;
 373        }
 374}
 375
 376static const char *intel_pt_err_msgs[] = {
 377        [INTEL_PT_ERR_NOMEM]  = "Memory allocation failed",
 378        [INTEL_PT_ERR_INTERN] = "Internal error",
 379        [INTEL_PT_ERR_BADPKT] = "Bad packet",
 380        [INTEL_PT_ERR_NODATA] = "No more data",
 381        [INTEL_PT_ERR_NOINSN] = "Failed to get instruction",
 382        [INTEL_PT_ERR_MISMAT] = "Trace doesn't match instruction",
 383        [INTEL_PT_ERR_OVR]    = "Overflow packet",
 384        [INTEL_PT_ERR_LOST]   = "Lost trace data",
 385        [INTEL_PT_ERR_UNK]    = "Unknown error!",
 386        [INTEL_PT_ERR_NELOOP] = "Never-ending loop",
 387};
 388
 389int intel_pt__strerror(int code, char *buf, size_t buflen)
 390{
 391        if (code < 1 || code >= INTEL_PT_ERR_MAX)
 392                code = INTEL_PT_ERR_UNK;
 393        strlcpy(buf, intel_pt_err_msgs[code], buflen);
 394        return 0;
 395}
 396
 397static uint64_t intel_pt_calc_ip(const struct intel_pt_pkt *packet,
 398                                 uint64_t last_ip)
 399{
 400        uint64_t ip;
 401
 402        switch (packet->count) {
 403        case 1:
 404                ip = (last_ip & (uint64_t)0xffffffffffff0000ULL) |
 405                     packet->payload;
 406                break;
 407        case 2:
 408                ip = (last_ip & (uint64_t)0xffffffff00000000ULL) |
 409                     packet->payload;
 410                break;
 411        case 3:
 412                ip = packet->payload;
 413                /* Sign-extend 6-byte ip */
 414                if (ip & (uint64_t)0x800000000000ULL)
 415                        ip |= (uint64_t)0xffff000000000000ULL;
 416                break;
 417        case 4:
 418                ip = (last_ip & (uint64_t)0xffff000000000000ULL) |
 419                     packet->payload;
 420                break;
 421        case 6:
 422                ip = packet->payload;
 423                break;
 424        default:
 425                return 0;
 426        }
 427
 428        return ip;
 429}
 430
 431static inline void intel_pt_set_last_ip(struct intel_pt_decoder *decoder)
 432{
 433        decoder->last_ip = intel_pt_calc_ip(&decoder->packet, decoder->last_ip);
 434        decoder->have_last_ip = true;
 435}
 436
 437static inline void intel_pt_set_ip(struct intel_pt_decoder *decoder)
 438{
 439        intel_pt_set_last_ip(decoder);
 440        decoder->ip = decoder->last_ip;
 441}
 442
 443static void intel_pt_decoder_log_packet(struct intel_pt_decoder *decoder)
 444{
 445        intel_pt_log_packet(&decoder->packet, decoder->pkt_len, decoder->pos,
 446                            decoder->buf);
 447}
 448
 449static int intel_pt_bug(struct intel_pt_decoder *decoder)
 450{
 451        intel_pt_log("ERROR: Internal error\n");
 452        decoder->pkt_state = INTEL_PT_STATE_NO_PSB;
 453        return -ENOSYS;
 454}
 455
 456static inline void intel_pt_clear_tx_flags(struct intel_pt_decoder *decoder)
 457{
 458        decoder->tx_flags = 0;
 459}
 460
 461static inline void intel_pt_update_in_tx(struct intel_pt_decoder *decoder)
 462{
 463        decoder->tx_flags = decoder->packet.payload & INTEL_PT_IN_TX;
 464}
 465
 466static int intel_pt_bad_packet(struct intel_pt_decoder *decoder)
 467{
 468        intel_pt_clear_tx_flags(decoder);
 469        decoder->have_tma = false;
 470        decoder->pkt_len = 1;
 471        decoder->pkt_step = 1;
 472        intel_pt_decoder_log_packet(decoder);
 473        if (decoder->pkt_state != INTEL_PT_STATE_NO_PSB) {
 474                intel_pt_log("ERROR: Bad packet\n");
 475                decoder->pkt_state = INTEL_PT_STATE_ERR1;
 476        }
 477        return -EBADMSG;
 478}
 479
 480static int intel_pt_get_data(struct intel_pt_decoder *decoder)
 481{
 482        struct intel_pt_buffer buffer = { .buf = 0, };
 483        int ret;
 484
 485        decoder->pkt_step = 0;
 486
 487        intel_pt_log("Getting more data\n");
 488        ret = decoder->get_trace(&buffer, decoder->data);
 489        if (ret)
 490                return ret;
 491        decoder->buf = buffer.buf;
 492        decoder->len = buffer.len;
 493        if (!decoder->len) {
 494                intel_pt_log("No more data\n");
 495                return -ENODATA;
 496        }
 497        if (!buffer.consecutive) {
 498                decoder->ip = 0;
 499                decoder->pkt_state = INTEL_PT_STATE_NO_PSB;
 500                decoder->ref_timestamp = buffer.ref_timestamp;
 501                decoder->timestamp = 0;
 502                decoder->have_tma = false;
 503                decoder->state.trace_nr = buffer.trace_nr;
 504                intel_pt_log("Reference timestamp 0x%" PRIx64 "\n",
 505                             decoder->ref_timestamp);
 506                return -ENOLINK;
 507        }
 508
 509        return 0;
 510}
 511
 512static int intel_pt_get_next_data(struct intel_pt_decoder *decoder)
 513{
 514        if (!decoder->next_buf)
 515                return intel_pt_get_data(decoder);
 516
 517        decoder->buf = decoder->next_buf;
 518        decoder->len = decoder->next_len;
 519        decoder->next_buf = 0;
 520        decoder->next_len = 0;
 521        return 0;
 522}
 523
 524static int intel_pt_get_split_packet(struct intel_pt_decoder *decoder)
 525{
 526        unsigned char *buf = decoder->temp_buf;
 527        size_t old_len, len, n;
 528        int ret;
 529
 530        old_len = decoder->len;
 531        len = decoder->len;
 532        memcpy(buf, decoder->buf, len);
 533
 534        ret = intel_pt_get_data(decoder);
 535        if (ret) {
 536                decoder->pos += old_len;
 537                return ret < 0 ? ret : -EINVAL;
 538        }
 539
 540        n = INTEL_PT_PKT_MAX_SZ - len;
 541        if (n > decoder->len)
 542                n = decoder->len;
 543        memcpy(buf + len, decoder->buf, n);
 544        len += n;
 545
 546        ret = intel_pt_get_packet(buf, len, &decoder->packet);
 547        if (ret < (int)old_len) {
 548                decoder->next_buf = decoder->buf;
 549                decoder->next_len = decoder->len;
 550                decoder->buf = buf;
 551                decoder->len = old_len;
 552                return intel_pt_bad_packet(decoder);
 553        }
 554
 555        decoder->next_buf = decoder->buf + (ret - old_len);
 556        decoder->next_len = decoder->len - (ret - old_len);
 557
 558        decoder->buf = buf;
 559        decoder->len = ret;
 560
 561        return ret;
 562}
 563
 564struct intel_pt_pkt_info {
 565        struct intel_pt_decoder   *decoder;
 566        struct intel_pt_pkt       packet;
 567        uint64_t                  pos;
 568        int                       pkt_len;
 569        int                       last_packet_type;
 570        void                      *data;
 571};
 572
 573typedef int (*intel_pt_pkt_cb_t)(struct intel_pt_pkt_info *pkt_info);
 574
 575/* Lookahead packets in current buffer */
 576static int intel_pt_pkt_lookahead(struct intel_pt_decoder *decoder,
 577                                  intel_pt_pkt_cb_t cb, void *data)
 578{
 579        struct intel_pt_pkt_info pkt_info;
 580        const unsigned char *buf = decoder->buf;
 581        size_t len = decoder->len;
 582        int ret;
 583
 584        pkt_info.decoder          = decoder;
 585        pkt_info.pos              = decoder->pos;
 586        pkt_info.pkt_len          = decoder->pkt_step;
 587        pkt_info.last_packet_type = decoder->last_packet_type;
 588        pkt_info.data             = data;
 589
 590        while (1) {
 591                do {
 592                        pkt_info.pos += pkt_info.pkt_len;
 593                        buf          += pkt_info.pkt_len;
 594                        len          -= pkt_info.pkt_len;
 595
 596                        if (!len)
 597                                return INTEL_PT_NEED_MORE_BYTES;
 598
 599                        ret = intel_pt_get_packet(buf, len, &pkt_info.packet);
 600                        if (!ret)
 601                                return INTEL_PT_NEED_MORE_BYTES;
 602                        if (ret < 0)
 603                                return ret;
 604
 605                        pkt_info.pkt_len = ret;
 606                } while (pkt_info.packet.type == INTEL_PT_PAD);
 607
 608                ret = cb(&pkt_info);
 609                if (ret)
 610                        return 0;
 611
 612                pkt_info.last_packet_type = pkt_info.packet.type;
 613        }
 614}
 615
 616struct intel_pt_calc_cyc_to_tsc_info {
 617        uint64_t        cycle_cnt;
 618        unsigned int    cbr;
 619        uint32_t        last_mtc;
 620        uint64_t        ctc_timestamp;
 621        uint64_t        ctc_delta;
 622        uint64_t        tsc_timestamp;
 623        uint64_t        timestamp;
 624        bool            have_tma;
 625        bool            fixup_last_mtc;
 626        bool            from_mtc;
 627        double          cbr_cyc_to_tsc;
 628};
 629
 630/*
 631 * MTC provides a 8-bit slice of CTC but the TMA packet only provides the lower
 632 * 16 bits of CTC. If mtc_shift > 8 then some of the MTC bits are not in the CTC
 633 * provided by the TMA packet. Fix-up the last_mtc calculated from the TMA
 634 * packet by copying the missing bits from the current MTC assuming the least
 635 * difference between the two, and that the current MTC comes after last_mtc.
 636 */
 637static void intel_pt_fixup_last_mtc(uint32_t mtc, int mtc_shift,
 638                                    uint32_t *last_mtc)
 639{
 640        uint32_t first_missing_bit = 1U << (16 - mtc_shift);
 641        uint32_t mask = ~(first_missing_bit - 1);
 642
 643        *last_mtc |= mtc & mask;
 644        if (*last_mtc >= mtc) {
 645                *last_mtc -= first_missing_bit;
 646                *last_mtc &= 0xff;
 647        }
 648}
 649
 650static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_info *pkt_info)
 651{
 652        struct intel_pt_decoder *decoder = pkt_info->decoder;
 653        struct intel_pt_calc_cyc_to_tsc_info *data = pkt_info->data;
 654        uint64_t timestamp;
 655        double cyc_to_tsc;
 656        unsigned int cbr;
 657        uint32_t mtc, mtc_delta, ctc, fc, ctc_rem;
 658
 659        switch (pkt_info->packet.type) {
 660        case INTEL_PT_TNT:
 661        case INTEL_PT_TIP_PGE:
 662        case INTEL_PT_TIP:
 663        case INTEL_PT_FUP:
 664        case INTEL_PT_PSB:
 665        case INTEL_PT_PIP:
 666        case INTEL_PT_MODE_EXEC:
 667        case INTEL_PT_MODE_TSX:
 668        case INTEL_PT_PSBEND:
 669        case INTEL_PT_PAD:
 670        case INTEL_PT_VMCS:
 671        case INTEL_PT_MNT:
 672        case INTEL_PT_PTWRITE:
 673        case INTEL_PT_PTWRITE_IP:
 674                return 0;
 675
 676        case INTEL_PT_MTC:
 677                if (!data->have_tma)
 678                        return 0;
 679
 680                mtc = pkt_info->packet.payload;
 681                if (decoder->mtc_shift > 8 && data->fixup_last_mtc) {
 682                        data->fixup_last_mtc = false;
 683                        intel_pt_fixup_last_mtc(mtc, decoder->mtc_shift,
 684                                                &data->last_mtc);
 685                }
 686                if (mtc > data->last_mtc)
 687                        mtc_delta = mtc - data->last_mtc;
 688                else
 689                        mtc_delta = mtc + 256 - data->last_mtc;
 690                data->ctc_delta += mtc_delta << decoder->mtc_shift;
 691                data->last_mtc = mtc;
 692
 693                if (decoder->tsc_ctc_mult) {
 694                        timestamp = data->ctc_timestamp +
 695                                data->ctc_delta * decoder->tsc_ctc_mult;
 696                } else {
 697                        timestamp = data->ctc_timestamp +
 698                                multdiv(data->ctc_delta,
 699                                        decoder->tsc_ctc_ratio_n,
 700                                        decoder->tsc_ctc_ratio_d);
 701                }
 702
 703                if (timestamp < data->timestamp)
 704                        return 1;
 705
 706                if (pkt_info->last_packet_type != INTEL_PT_CYC) {
 707                        data->timestamp = timestamp;
 708                        return 0;
 709                }
 710
 711                break;
 712
 713        case INTEL_PT_TSC:
 714                /*
 715                 * For now, do not support using TSC packets - refer
 716                 * intel_pt_calc_cyc_to_tsc().
 717                 */
 718                if (data->from_mtc)
 719                        return 1;
 720                timestamp = pkt_info->packet.payload |
 721                            (data->timestamp & (0xffULL << 56));
 722                if (data->from_mtc && timestamp < data->timestamp &&
 723                    data->timestamp - timestamp < decoder->tsc_slip)
 724                        return 1;
 725                if (timestamp < data->timestamp)
 726                        timestamp += (1ULL << 56);
 727                if (pkt_info->last_packet_type != INTEL_PT_CYC) {
 728                        if (data->from_mtc)
 729                                return 1;
 730                        data->tsc_timestamp = timestamp;
 731                        data->timestamp = timestamp;
 732                        return 0;
 733                }
 734                break;
 735
 736        case INTEL_PT_TMA:
 737                if (data->from_mtc)
 738                        return 1;
 739
 740                if (!decoder->tsc_ctc_ratio_d)
 741                        return 0;
 742
 743                ctc = pkt_info->packet.payload;
 744                fc = pkt_info->packet.count;
 745                ctc_rem = ctc & decoder->ctc_rem_mask;
 746
 747                data->last_mtc = (ctc >> decoder->mtc_shift) & 0xff;
 748
 749                data->ctc_timestamp = data->tsc_timestamp - fc;
 750                if (decoder->tsc_ctc_mult) {
 751                        data->ctc_timestamp -= ctc_rem * decoder->tsc_ctc_mult;
 752                } else {
 753                        data->ctc_timestamp -=
 754                                multdiv(ctc_rem, decoder->tsc_ctc_ratio_n,
 755                                        decoder->tsc_ctc_ratio_d);
 756                }
 757
 758                data->ctc_delta = 0;
 759                data->have_tma = true;
 760                data->fixup_last_mtc = true;
 761
 762                return 0;
 763
 764        case INTEL_PT_CYC:
 765                data->cycle_cnt += pkt_info->packet.payload;
 766                return 0;
 767
 768        case INTEL_PT_CBR:
 769                cbr = pkt_info->packet.payload;
 770                if (data->cbr && data->cbr != cbr)
 771                        return 1;
 772                data->cbr = cbr;
 773                data->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr;
 774                return 0;
 775
 776        case INTEL_PT_TIP_PGD:
 777        case INTEL_PT_TRACESTOP:
 778        case INTEL_PT_EXSTOP:
 779        case INTEL_PT_EXSTOP_IP:
 780        case INTEL_PT_MWAIT:
 781        case INTEL_PT_PWRE:
 782        case INTEL_PT_PWRX:
 783        case INTEL_PT_OVF:
 784        case INTEL_PT_BAD: /* Does not happen */
 785        default:
 786                return 1;
 787        }
 788
 789        if (!data->cbr && decoder->cbr) {
 790                data->cbr = decoder->cbr;
 791                data->cbr_cyc_to_tsc = decoder->cbr_cyc_to_tsc;
 792        }
 793
 794        if (!data->cycle_cnt)
 795                return 1;
 796
 797        cyc_to_tsc = (double)(timestamp - decoder->timestamp) / data->cycle_cnt;
 798
 799        if (data->cbr && cyc_to_tsc > data->cbr_cyc_to_tsc &&
 800            cyc_to_tsc / data->cbr_cyc_to_tsc > 1.25) {
 801                intel_pt_log("Timestamp: calculated %g TSC ticks per cycle too big (c.f. CBR-based value %g), pos " x64_fmt "\n",
 802                             cyc_to_tsc, data->cbr_cyc_to_tsc, pkt_info->pos);
 803                return 1;
 804        }
 805
 806        decoder->calc_cyc_to_tsc = cyc_to_tsc;
 807        decoder->have_calc_cyc_to_tsc = true;
 808
 809        if (data->cbr) {
 810                intel_pt_log("Timestamp: calculated %g TSC ticks per cycle c.f. CBR-based value %g, pos " x64_fmt "\n",
 811                             cyc_to_tsc, data->cbr_cyc_to_tsc, pkt_info->pos);
 812        } else {
 813                intel_pt_log("Timestamp: calculated %g TSC ticks per cycle c.f. unknown CBR-based value, pos " x64_fmt "\n",
 814                             cyc_to_tsc, pkt_info->pos);
 815        }
 816
 817        return 1;
 818}
 819
 820static void intel_pt_calc_cyc_to_tsc(struct intel_pt_decoder *decoder,
 821                                     bool from_mtc)
 822{
 823        struct intel_pt_calc_cyc_to_tsc_info data = {
 824                .cycle_cnt      = 0,
 825                .cbr            = 0,
 826                .last_mtc       = decoder->last_mtc,
 827                .ctc_timestamp  = decoder->ctc_timestamp,
 828                .ctc_delta      = decoder->ctc_delta,
 829                .tsc_timestamp  = decoder->tsc_timestamp,
 830                .timestamp      = decoder->timestamp,
 831                .have_tma       = decoder->have_tma,
 832                .fixup_last_mtc = decoder->fixup_last_mtc,
 833                .from_mtc       = from_mtc,
 834                .cbr_cyc_to_tsc = 0,
 835        };
 836
 837        /*
 838         * For now, do not support using TSC packets for at least the reasons:
 839         * 1) timing might have stopped
 840         * 2) TSC packets within PSB+ can slip against CYC packets
 841         */
 842        if (!from_mtc)
 843                return;
 844
 845        intel_pt_pkt_lookahead(decoder, intel_pt_calc_cyc_cb, &data);
 846}
 847
 848static int intel_pt_get_next_packet(struct intel_pt_decoder *decoder)
 849{
 850        int ret;
 851
 852        decoder->last_packet_type = decoder->packet.type;
 853
 854        do {
 855                decoder->pos += decoder->pkt_step;
 856                decoder->buf += decoder->pkt_step;
 857                decoder->len -= decoder->pkt_step;
 858
 859                if (!decoder->len) {
 860                        ret = intel_pt_get_next_data(decoder);
 861                        if (ret)
 862                                return ret;
 863                }
 864
 865                ret = intel_pt_get_packet(decoder->buf, decoder->len,
 866                                          &decoder->packet);
 867                if (ret == INTEL_PT_NEED_MORE_BYTES &&
 868                    decoder->len < INTEL_PT_PKT_MAX_SZ && !decoder->next_buf) {
 869                        ret = intel_pt_get_split_packet(decoder);
 870                        if (ret < 0)
 871                                return ret;
 872                }
 873                if (ret <= 0)
 874                        return intel_pt_bad_packet(decoder);
 875
 876                decoder->pkt_len = ret;
 877                decoder->pkt_step = ret;
 878                intel_pt_decoder_log_packet(decoder);
 879        } while (decoder->packet.type == INTEL_PT_PAD);
 880
 881        return 0;
 882}
 883
 884static uint64_t intel_pt_next_period(struct intel_pt_decoder *decoder)
 885{
 886        uint64_t timestamp, masked_timestamp;
 887
 888        timestamp = decoder->timestamp + decoder->timestamp_insn_cnt;
 889        masked_timestamp = timestamp & decoder->period_mask;
 890        if (decoder->continuous_period) {
 891                if (masked_timestamp != decoder->last_masked_timestamp)
 892                        return 1;
 893        } else {
 894                timestamp += 1;
 895                masked_timestamp = timestamp & decoder->period_mask;
 896                if (masked_timestamp != decoder->last_masked_timestamp) {
 897                        decoder->last_masked_timestamp = masked_timestamp;
 898                        decoder->continuous_period = true;
 899                }
 900        }
 901        return decoder->period_ticks - (timestamp - masked_timestamp);
 902}
 903
 904static uint64_t intel_pt_next_sample(struct intel_pt_decoder *decoder)
 905{
 906        switch (decoder->period_type) {
 907        case INTEL_PT_PERIOD_INSTRUCTIONS:
 908                return decoder->period - decoder->period_insn_cnt;
 909        case INTEL_PT_PERIOD_TICKS:
 910                return intel_pt_next_period(decoder);
 911        case INTEL_PT_PERIOD_NONE:
 912        case INTEL_PT_PERIOD_MTC:
 913        default:
 914                return 0;
 915        }
 916}
 917
 918static void intel_pt_sample_insn(struct intel_pt_decoder *decoder)
 919{
 920        uint64_t timestamp, masked_timestamp;
 921
 922        switch (decoder->period_type) {
 923        case INTEL_PT_PERIOD_INSTRUCTIONS:
 924                decoder->period_insn_cnt = 0;
 925                break;
 926        case INTEL_PT_PERIOD_TICKS:
 927                timestamp = decoder->timestamp + decoder->timestamp_insn_cnt;
 928                masked_timestamp = timestamp & decoder->period_mask;
 929                decoder->last_masked_timestamp = masked_timestamp;
 930                break;
 931        case INTEL_PT_PERIOD_NONE:
 932        case INTEL_PT_PERIOD_MTC:
 933        default:
 934                break;
 935        }
 936
 937        decoder->state.type |= INTEL_PT_INSTRUCTION;
 938}
 939
 940static int intel_pt_walk_insn(struct intel_pt_decoder *decoder,
 941                              struct intel_pt_insn *intel_pt_insn, uint64_t ip)
 942{
 943        uint64_t max_insn_cnt, insn_cnt = 0;
 944        int err;
 945
 946        if (!decoder->mtc_insn)
 947                decoder->mtc_insn = true;
 948
 949        max_insn_cnt = intel_pt_next_sample(decoder);
 950
 951        err = decoder->walk_insn(intel_pt_insn, &insn_cnt, &decoder->ip, ip,
 952                                 max_insn_cnt, decoder->data);
 953
 954        decoder->tot_insn_cnt += insn_cnt;
 955        decoder->timestamp_insn_cnt += insn_cnt;
 956        decoder->sample_insn_cnt += insn_cnt;
 957        decoder->period_insn_cnt += insn_cnt;
 958
 959        if (err) {
 960                decoder->no_progress = 0;
 961                decoder->pkt_state = INTEL_PT_STATE_ERR2;
 962                intel_pt_log_at("ERROR: Failed to get instruction",
 963                                decoder->ip);
 964                if (err == -ENOENT)
 965                        return -ENOLINK;
 966                return -EILSEQ;
 967        }
 968
 969        if (ip && decoder->ip == ip) {
 970                err = -EAGAIN;
 971                goto out;
 972        }
 973
 974        if (max_insn_cnt && insn_cnt >= max_insn_cnt)
 975                intel_pt_sample_insn(decoder);
 976
 977        if (intel_pt_insn->branch == INTEL_PT_BR_NO_BRANCH) {
 978                decoder->state.type = INTEL_PT_INSTRUCTION;
 979                decoder->state.from_ip = decoder->ip;
 980                decoder->state.to_ip = 0;
 981                decoder->ip += intel_pt_insn->length;
 982                err = INTEL_PT_RETURN;
 983                goto out;
 984        }
 985
 986        if (intel_pt_insn->op == INTEL_PT_OP_CALL) {
 987                /* Zero-length calls are excluded */
 988                if (intel_pt_insn->branch != INTEL_PT_BR_UNCONDITIONAL ||
 989                    intel_pt_insn->rel) {
 990                        err = intel_pt_push(&decoder->stack, decoder->ip +
 991                                            intel_pt_insn->length);
 992                        if (err)
 993                                goto out;
 994                }
 995        } else if (intel_pt_insn->op == INTEL_PT_OP_RET) {
 996                decoder->ret_addr = intel_pt_pop(&decoder->stack);
 997        }
 998
 999        if (intel_pt_insn->branch == INTEL_PT_BR_UNCONDITIONAL) {
1000                int cnt = decoder->no_progress++;
1001
1002                decoder->state.from_ip = decoder->ip;
1003                decoder->ip += intel_pt_insn->length +
1004                                intel_pt_insn->rel;
1005                decoder->state.to_ip = decoder->ip;
1006                err = INTEL_PT_RETURN;
1007
1008                /*
1009                 * Check for being stuck in a loop.  This can happen if a
1010                 * decoder error results in the decoder erroneously setting the
1011                 * ip to an address that is itself in an infinite loop that
1012                 * consumes no packets.  When that happens, there must be an
1013                 * unconditional branch.
1014                 */
1015                if (cnt) {
1016                        if (cnt == 1) {
1017                                decoder->stuck_ip = decoder->state.to_ip;
1018                                decoder->stuck_ip_prd = 1;
1019                                decoder->stuck_ip_cnt = 1;
1020                        } else if (cnt > INTEL_PT_MAX_LOOPS ||
1021                                   decoder->state.to_ip == decoder->stuck_ip) {
1022                                intel_pt_log_at("ERROR: Never-ending loop",
1023                                                decoder->state.to_ip);
1024                                decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
1025                                err = -ELOOP;
1026                                goto out;
1027                        } else if (!--decoder->stuck_ip_cnt) {
1028                                decoder->stuck_ip_prd += 1;
1029                                decoder->stuck_ip_cnt = decoder->stuck_ip_prd;
1030                                decoder->stuck_ip = decoder->state.to_ip;
1031                        }
1032                }
1033                goto out_no_progress;
1034        }
1035out:
1036        decoder->no_progress = 0;
1037out_no_progress:
1038        decoder->state.insn_op = intel_pt_insn->op;
1039        decoder->state.insn_len = intel_pt_insn->length;
1040        memcpy(decoder->state.insn, intel_pt_insn->buf,
1041               INTEL_PT_INSN_BUF_SZ);
1042
1043        if (decoder->tx_flags & INTEL_PT_IN_TX)
1044                decoder->state.flags |= INTEL_PT_IN_TX;
1045
1046        return err;
1047}
1048
1049static bool intel_pt_fup_event(struct intel_pt_decoder *decoder)
1050{
1051        bool ret = false;
1052
1053        if (decoder->set_fup_tx_flags) {
1054                decoder->set_fup_tx_flags = false;
1055                decoder->tx_flags = decoder->fup_tx_flags;
1056                decoder->state.type = INTEL_PT_TRANSACTION;
1057                decoder->state.from_ip = decoder->ip;
1058                decoder->state.to_ip = 0;
1059                decoder->state.flags = decoder->fup_tx_flags;
1060                return true;
1061        }
1062        if (decoder->set_fup_ptw) {
1063                decoder->set_fup_ptw = false;
1064                decoder->state.type = INTEL_PT_PTW;
1065                decoder->state.flags |= INTEL_PT_FUP_IP;
1066                decoder->state.from_ip = decoder->ip;
1067                decoder->state.to_ip = 0;
1068                decoder->state.ptw_payload = decoder->fup_ptw_payload;
1069                return true;
1070        }
1071        if (decoder->set_fup_mwait) {
1072                decoder->set_fup_mwait = false;
1073                decoder->state.type = INTEL_PT_MWAIT_OP;
1074                decoder->state.from_ip = decoder->ip;
1075                decoder->state.to_ip = 0;
1076                decoder->state.mwait_payload = decoder->fup_mwait_payload;
1077                ret = true;
1078        }
1079        if (decoder->set_fup_pwre) {
1080                decoder->set_fup_pwre = false;
1081                decoder->state.type |= INTEL_PT_PWR_ENTRY;
1082                decoder->state.type &= ~INTEL_PT_BRANCH;
1083                decoder->state.from_ip = decoder->ip;
1084                decoder->state.to_ip = 0;
1085                decoder->state.pwre_payload = decoder->fup_pwre_payload;
1086                ret = true;
1087        }
1088        if (decoder->set_fup_exstop) {
1089                decoder->set_fup_exstop = false;
1090                decoder->state.type |= INTEL_PT_EX_STOP;
1091                decoder->state.type &= ~INTEL_PT_BRANCH;
1092                decoder->state.flags |= INTEL_PT_FUP_IP;
1093                decoder->state.from_ip = decoder->ip;
1094                decoder->state.to_ip = 0;
1095                ret = true;
1096        }
1097        return ret;
1098}
1099
1100static int intel_pt_walk_fup(struct intel_pt_decoder *decoder)
1101{
1102        struct intel_pt_insn intel_pt_insn;
1103        uint64_t ip;
1104        int err;
1105
1106        ip = decoder->last_ip;
1107
1108        while (1) {
1109                err = intel_pt_walk_insn(decoder, &intel_pt_insn, ip);
1110                if (err == INTEL_PT_RETURN)
1111                        return 0;
1112                if (err == -EAGAIN) {
1113                        if (intel_pt_fup_event(decoder))
1114                                return 0;
1115                        return err;
1116                }
1117                decoder->set_fup_tx_flags = false;
1118                if (err)
1119                        return err;
1120
1121                if (intel_pt_insn.branch == INTEL_PT_BR_INDIRECT) {
1122                        intel_pt_log_at("ERROR: Unexpected indirect branch",
1123                                        decoder->ip);
1124                        decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
1125                        return -ENOENT;
1126                }
1127
1128                if (intel_pt_insn.branch == INTEL_PT_BR_CONDITIONAL) {
1129                        intel_pt_log_at("ERROR: Unexpected conditional branch",
1130                                        decoder->ip);
1131                        decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
1132                        return -ENOENT;
1133                }
1134
1135                intel_pt_bug(decoder);
1136        }
1137}
1138
1139static int intel_pt_walk_tip(struct intel_pt_decoder *decoder)
1140{
1141        struct intel_pt_insn intel_pt_insn;
1142        int err;
1143
1144        err = intel_pt_walk_insn(decoder, &intel_pt_insn, 0);
1145        if (err == INTEL_PT_RETURN &&
1146            decoder->pgd_ip &&
1147            decoder->pkt_state == INTEL_PT_STATE_TIP_PGD &&
1148            (decoder->state.type & INTEL_PT_BRANCH) &&
1149            decoder->pgd_ip(decoder->state.to_ip, decoder->data)) {
1150                /* Unconditional branch leaving filter region */
1151                decoder->no_progress = 0;
1152                decoder->pge = false;
1153                decoder->continuous_period = false;
1154                decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
1155                decoder->state.to_ip = 0;
1156                return 0;
1157        }
1158        if (err == INTEL_PT_RETURN)
1159                return 0;
1160        if (err)
1161                return err;
1162
1163        if (intel_pt_insn.branch == INTEL_PT_BR_INDIRECT) {
1164                if (decoder->pkt_state == INTEL_PT_STATE_TIP_PGD) {
1165                        decoder->pge = false;
1166                        decoder->continuous_period = false;
1167                        decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
1168                        decoder->state.from_ip = decoder->ip;
1169                        decoder->state.to_ip = 0;
1170                        if (decoder->packet.count != 0)
1171                                decoder->ip = decoder->last_ip;
1172                } else {
1173                        decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
1174                        decoder->state.from_ip = decoder->ip;
1175                        if (decoder->packet.count == 0) {
1176                                decoder->state.to_ip = 0;
1177                        } else {
1178                                decoder->state.to_ip = decoder->last_ip;
1179                                decoder->ip = decoder->last_ip;
1180                        }
1181                }
1182                return 0;
1183        }
1184
1185        if (intel_pt_insn.branch == INTEL_PT_BR_CONDITIONAL) {
1186                uint64_t to_ip = decoder->ip + intel_pt_insn.length +
1187                                 intel_pt_insn.rel;
1188
1189                if (decoder->pgd_ip &&
1190                    decoder->pkt_state == INTEL_PT_STATE_TIP_PGD &&
1191                    decoder->pgd_ip(to_ip, decoder->data)) {
1192                        /* Conditional branch leaving filter region */
1193                        decoder->pge = false;
1194                        decoder->continuous_period = false;
1195                        decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
1196                        decoder->ip = to_ip;
1197                        decoder->state.from_ip = decoder->ip;
1198                        decoder->state.to_ip = 0;
1199                        return 0;
1200                }
1201                intel_pt_log_at("ERROR: Conditional branch when expecting indirect branch",
1202                                decoder->ip);
1203                decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
1204                return -ENOENT;
1205        }
1206
1207        return intel_pt_bug(decoder);
1208}
1209
1210static int intel_pt_walk_tnt(struct intel_pt_decoder *decoder)
1211{
1212        struct intel_pt_insn intel_pt_insn;
1213        int err;
1214
1215        while (1) {
1216                err = intel_pt_walk_insn(decoder, &intel_pt_insn, 0);
1217                if (err == INTEL_PT_RETURN)
1218                        return 0;
1219                if (err)
1220                        return err;
1221
1222                if (intel_pt_insn.op == INTEL_PT_OP_RET) {
1223                        if (!decoder->return_compression) {
1224                                intel_pt_log_at("ERROR: RET when expecting conditional branch",
1225                                                decoder->ip);
1226                                decoder->pkt_state = INTEL_PT_STATE_ERR3;
1227                                return -ENOENT;
1228                        }
1229                        if (!decoder->ret_addr) {
1230                                intel_pt_log_at("ERROR: Bad RET compression (stack empty)",
1231                                                decoder->ip);
1232                                decoder->pkt_state = INTEL_PT_STATE_ERR3;
1233                                return -ENOENT;
1234                        }
1235                        if (!(decoder->tnt.payload & BIT63)) {
1236                                intel_pt_log_at("ERROR: Bad RET compression (TNT=N)",
1237                                                decoder->ip);
1238                                decoder->pkt_state = INTEL_PT_STATE_ERR3;
1239                                return -ENOENT;
1240                        }
1241                        decoder->tnt.count -= 1;
1242                        if (!decoder->tnt.count)
1243                                decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
1244                        decoder->tnt.payload <<= 1;
1245                        decoder->state.from_ip = decoder->ip;
1246                        decoder->ip = decoder->ret_addr;
1247                        decoder->state.to_ip = decoder->ip;
1248                        return 0;
1249                }
1250
1251                if (intel_pt_insn.branch == INTEL_PT_BR_INDIRECT) {
1252                        /* Handle deferred TIPs */
1253                        err = intel_pt_get_next_packet(decoder);
1254                        if (err)
1255                                return err;
1256                        if (decoder->packet.type != INTEL_PT_TIP ||
1257                            decoder->packet.count == 0) {
1258                                intel_pt_log_at("ERROR: Missing deferred TIP for indirect branch",
1259                                                decoder->ip);
1260                                decoder->pkt_state = INTEL_PT_STATE_ERR3;
1261                                decoder->pkt_step = 0;
1262                                return -ENOENT;
1263                        }
1264                        intel_pt_set_last_ip(decoder);
1265                        decoder->state.from_ip = decoder->ip;
1266                        decoder->state.to_ip = decoder->last_ip;
1267                        decoder->ip = decoder->last_ip;
1268                        return 0;
1269                }
1270
1271                if (intel_pt_insn.branch == INTEL_PT_BR_CONDITIONAL) {
1272                        decoder->tnt.count -= 1;
1273                        if (!decoder->tnt.count)
1274                                decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
1275                        if (decoder->tnt.payload & BIT63) {
1276                                decoder->tnt.payload <<= 1;
1277                                decoder->state.from_ip = decoder->ip;
1278                                decoder->ip += intel_pt_insn.length +
1279                                               intel_pt_insn.rel;
1280                                decoder->state.to_ip = decoder->ip;
1281                                return 0;
1282                        }
1283                        /* Instruction sample for a non-taken branch */
1284                        if (decoder->state.type & INTEL_PT_INSTRUCTION) {
1285                                decoder->tnt.payload <<= 1;
1286                                decoder->state.type = INTEL_PT_INSTRUCTION;
1287                                decoder->state.from_ip = decoder->ip;
1288                                decoder->state.to_ip = 0;
1289                                decoder->ip += intel_pt_insn.length;
1290                                return 0;
1291                        }
1292                        decoder->ip += intel_pt_insn.length;
1293                        if (!decoder->tnt.count)
1294                                return -EAGAIN;
1295                        decoder->tnt.payload <<= 1;
1296                        continue;
1297                }
1298
1299                return intel_pt_bug(decoder);
1300        }
1301}
1302
1303static int intel_pt_mode_tsx(struct intel_pt_decoder *decoder, bool *no_tip)
1304{
1305        unsigned int fup_tx_flags;
1306        int err;
1307
1308        fup_tx_flags = decoder->packet.payload &
1309                       (INTEL_PT_IN_TX | INTEL_PT_ABORT_TX);
1310        err = intel_pt_get_next_packet(decoder);
1311        if (err)
1312                return err;
1313        if (decoder->packet.type == INTEL_PT_FUP) {
1314                decoder->fup_tx_flags = fup_tx_flags;
1315                decoder->set_fup_tx_flags = true;
1316                if (!(decoder->fup_tx_flags & INTEL_PT_ABORT_TX))
1317                        *no_tip = true;
1318        } else {
1319                intel_pt_log_at("ERROR: Missing FUP after MODE.TSX",
1320                                decoder->pos);
1321                intel_pt_update_in_tx(decoder);
1322        }
1323        return 0;
1324}
1325
1326static void intel_pt_calc_tsc_timestamp(struct intel_pt_decoder *decoder)
1327{
1328        uint64_t timestamp;
1329
1330        decoder->have_tma = false;
1331
1332        if (decoder->ref_timestamp) {
1333                timestamp = decoder->packet.payload |
1334                            (decoder->ref_timestamp & (0xffULL << 56));
1335                if (timestamp < decoder->ref_timestamp) {
1336                        if (decoder->ref_timestamp - timestamp > (1ULL << 55))
1337                                timestamp += (1ULL << 56);
1338                } else {
1339                        if (timestamp - decoder->ref_timestamp > (1ULL << 55))
1340                                timestamp -= (1ULL << 56);
1341                }
1342                decoder->tsc_timestamp = timestamp;
1343                decoder->timestamp = timestamp;
1344                decoder->ref_timestamp = 0;
1345                decoder->timestamp_insn_cnt = 0;
1346        } else if (decoder->timestamp) {
1347                timestamp = decoder->packet.payload |
1348                            (decoder->timestamp & (0xffULL << 56));
1349                decoder->tsc_timestamp = timestamp;
1350                if (timestamp < decoder->timestamp &&
1351                    decoder->timestamp - timestamp < decoder->tsc_slip) {
1352                        intel_pt_log_to("Suppressing backwards timestamp",
1353                                        timestamp);
1354                        timestamp = decoder->timestamp;
1355                }
1356                if (timestamp < decoder->timestamp) {
1357                        intel_pt_log_to("Wraparound timestamp", timestamp);
1358                        timestamp += (1ULL << 56);
1359                        decoder->tsc_timestamp = timestamp;
1360                }
1361                decoder->timestamp = timestamp;
1362                decoder->timestamp_insn_cnt = 0;
1363        }
1364
1365        if (decoder->last_packet_type == INTEL_PT_CYC) {
1366                decoder->cyc_ref_timestamp = decoder->timestamp;
1367                decoder->cycle_cnt = 0;
1368                decoder->have_calc_cyc_to_tsc = false;
1369                intel_pt_calc_cyc_to_tsc(decoder, false);
1370        }
1371
1372        intel_pt_log_to("Setting timestamp", decoder->timestamp);
1373}
1374
1375static int intel_pt_overflow(struct intel_pt_decoder *decoder)
1376{
1377        intel_pt_log("ERROR: Buffer overflow\n");
1378        intel_pt_clear_tx_flags(decoder);
1379        decoder->have_tma = false;
1380        decoder->cbr = 0;
1381        decoder->timestamp_insn_cnt = 0;
1382        decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
1383        decoder->overflow = true;
1384        return -EOVERFLOW;
1385}
1386
1387static void intel_pt_calc_tma(struct intel_pt_decoder *decoder)
1388{
1389        uint32_t ctc = decoder->packet.payload;
1390        uint32_t fc = decoder->packet.count;
1391        uint32_t ctc_rem = ctc & decoder->ctc_rem_mask;
1392
1393        if (!decoder->tsc_ctc_ratio_d)
1394                return;
1395
1396        decoder->last_mtc = (ctc >> decoder->mtc_shift) & 0xff;
1397        decoder->ctc_timestamp = decoder->tsc_timestamp - fc;
1398        if (decoder->tsc_ctc_mult) {
1399                decoder->ctc_timestamp -= ctc_rem * decoder->tsc_ctc_mult;
1400        } else {
1401                decoder->ctc_timestamp -= multdiv(ctc_rem,
1402                                                  decoder->tsc_ctc_ratio_n,
1403                                                  decoder->tsc_ctc_ratio_d);
1404        }
1405        decoder->ctc_delta = 0;
1406        decoder->have_tma = true;
1407        decoder->fixup_last_mtc = true;
1408        intel_pt_log("CTC timestamp " x64_fmt " last MTC %#x  CTC rem %#x\n",
1409                     decoder->ctc_timestamp, decoder->last_mtc, ctc_rem);
1410}
1411
1412static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder)
1413{
1414        uint64_t timestamp;
1415        uint32_t mtc, mtc_delta;
1416
1417        if (!decoder->have_tma)
1418                return;
1419
1420        mtc = decoder->packet.payload;
1421
1422        if (decoder->mtc_shift > 8 && decoder->fixup_last_mtc) {
1423                decoder->fixup_last_mtc = false;
1424                intel_pt_fixup_last_mtc(mtc, decoder->mtc_shift,
1425                                        &decoder->last_mtc);
1426        }
1427
1428        if (mtc > decoder->last_mtc)
1429                mtc_delta = mtc - decoder->last_mtc;
1430        else
1431                mtc_delta = mtc + 256 - decoder->last_mtc;
1432
1433        decoder->ctc_delta += mtc_delta << decoder->mtc_shift;
1434
1435        if (decoder->tsc_ctc_mult) {
1436                timestamp = decoder->ctc_timestamp +
1437                            decoder->ctc_delta * decoder->tsc_ctc_mult;
1438        } else {
1439                timestamp = decoder->ctc_timestamp +
1440                            multdiv(decoder->ctc_delta,
1441                                    decoder->tsc_ctc_ratio_n,
1442                                    decoder->tsc_ctc_ratio_d);
1443        }
1444
1445        if (timestamp < decoder->timestamp)
1446                intel_pt_log("Suppressing MTC timestamp " x64_fmt " less than current timestamp " x64_fmt "\n",
1447                             timestamp, decoder->timestamp);
1448        else
1449                decoder->timestamp = timestamp;
1450
1451        decoder->timestamp_insn_cnt = 0;
1452        decoder->last_mtc = mtc;
1453
1454        if (decoder->last_packet_type == INTEL_PT_CYC) {
1455                decoder->cyc_ref_timestamp = decoder->timestamp;
1456                decoder->cycle_cnt = 0;
1457                decoder->have_calc_cyc_to_tsc = false;
1458                intel_pt_calc_cyc_to_tsc(decoder, true);
1459        }
1460}
1461
1462static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder)
1463{
1464        unsigned int cbr = decoder->packet.payload & 0xff;
1465
1466        decoder->cbr_payload = decoder->packet.payload;
1467
1468        if (decoder->cbr == cbr)
1469                return;
1470
1471        decoder->cbr = cbr;
1472        decoder->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr;
1473}
1474
1475static void intel_pt_calc_cyc_timestamp(struct intel_pt_decoder *decoder)
1476{
1477        uint64_t timestamp = decoder->cyc_ref_timestamp;
1478
1479        decoder->have_cyc = true;
1480
1481        decoder->cycle_cnt += decoder->packet.payload;
1482
1483        if (!decoder->cyc_ref_timestamp)
1484                return;
1485
1486        if (decoder->have_calc_cyc_to_tsc)
1487                timestamp += decoder->cycle_cnt * decoder->calc_cyc_to_tsc;
1488        else if (decoder->cbr)
1489                timestamp += decoder->cycle_cnt * decoder->cbr_cyc_to_tsc;
1490        else
1491                return;
1492
1493        if (timestamp < decoder->timestamp)
1494                intel_pt_log("Suppressing CYC timestamp " x64_fmt " less than current timestamp " x64_fmt "\n",
1495                             timestamp, decoder->timestamp);
1496        else
1497                decoder->timestamp = timestamp;
1498
1499        decoder->timestamp_insn_cnt = 0;
1500}
1501
1502/* Walk PSB+ packets when already in sync. */
1503static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
1504{
1505        int err;
1506
1507        while (1) {
1508                err = intel_pt_get_next_packet(decoder);
1509                if (err)
1510                        return err;
1511
1512                switch (decoder->packet.type) {
1513                case INTEL_PT_PSBEND:
1514                        return 0;
1515
1516                case INTEL_PT_TIP_PGD:
1517                case INTEL_PT_TIP_PGE:
1518                case INTEL_PT_TIP:
1519                case INTEL_PT_TNT:
1520                case INTEL_PT_TRACESTOP:
1521                case INTEL_PT_BAD:
1522                case INTEL_PT_PSB:
1523                case INTEL_PT_PTWRITE:
1524                case INTEL_PT_PTWRITE_IP:
1525                case INTEL_PT_EXSTOP:
1526                case INTEL_PT_EXSTOP_IP:
1527                case INTEL_PT_MWAIT:
1528                case INTEL_PT_PWRE:
1529                case INTEL_PT_PWRX:
1530                        decoder->have_tma = false;
1531                        intel_pt_log("ERROR: Unexpected packet\n");
1532                        return -EAGAIN;
1533
1534                case INTEL_PT_OVF:
1535                        return intel_pt_overflow(decoder);
1536
1537                case INTEL_PT_TSC:
1538                        intel_pt_calc_tsc_timestamp(decoder);
1539                        break;
1540
1541                case INTEL_PT_TMA:
1542                        intel_pt_calc_tma(decoder);
1543                        break;
1544
1545                case INTEL_PT_CBR:
1546                        intel_pt_calc_cbr(decoder);
1547                        break;
1548
1549                case INTEL_PT_MODE_EXEC:
1550                        decoder->exec_mode = decoder->packet.payload;
1551                        break;
1552
1553                case INTEL_PT_PIP:
1554                        decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
1555                        break;
1556
1557                case INTEL_PT_FUP:
1558                        decoder->pge = true;
1559                        if (decoder->packet.count)
1560                                intel_pt_set_last_ip(decoder);
1561                        break;
1562
1563                case INTEL_PT_MODE_TSX:
1564                        intel_pt_update_in_tx(decoder);
1565                        break;
1566
1567                case INTEL_PT_MTC:
1568                        intel_pt_calc_mtc_timestamp(decoder);
1569                        if (decoder->period_type == INTEL_PT_PERIOD_MTC)
1570                                decoder->state.type |= INTEL_PT_INSTRUCTION;
1571                        break;
1572
1573                case INTEL_PT_CYC:
1574                case INTEL_PT_VMCS:
1575                case INTEL_PT_MNT:
1576                case INTEL_PT_PAD:
1577                default:
1578                        break;
1579                }
1580        }
1581}
1582
1583static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
1584{
1585        int err;
1586
1587        if (decoder->tx_flags & INTEL_PT_ABORT_TX) {
1588                decoder->tx_flags = 0;
1589                decoder->state.flags &= ~INTEL_PT_IN_TX;
1590                decoder->state.flags |= INTEL_PT_ABORT_TX;
1591        } else {
1592                decoder->state.flags |= INTEL_PT_ASYNC;
1593        }
1594
1595        while (1) {
1596                err = intel_pt_get_next_packet(decoder);
1597                if (err)
1598                        return err;
1599
1600                switch (decoder->packet.type) {
1601                case INTEL_PT_TNT:
1602                case INTEL_PT_FUP:
1603                case INTEL_PT_TRACESTOP:
1604                case INTEL_PT_PSB:
1605                case INTEL_PT_TSC:
1606                case INTEL_PT_TMA:
1607                case INTEL_PT_CBR:
1608                case INTEL_PT_MODE_TSX:
1609                case INTEL_PT_BAD:
1610                case INTEL_PT_PSBEND:
1611                case INTEL_PT_PTWRITE:
1612                case INTEL_PT_PTWRITE_IP:
1613                case INTEL_PT_EXSTOP:
1614                case INTEL_PT_EXSTOP_IP:
1615                case INTEL_PT_MWAIT:
1616                case INTEL_PT_PWRE:
1617                case INTEL_PT_PWRX:
1618                        intel_pt_log("ERROR: Missing TIP after FUP\n");
1619                        decoder->pkt_state = INTEL_PT_STATE_ERR3;
1620                        decoder->pkt_step = 0;
1621                        return -ENOENT;
1622
1623                case INTEL_PT_OVF:
1624                        return intel_pt_overflow(decoder);
1625
1626                case INTEL_PT_TIP_PGD:
1627                        decoder->state.from_ip = decoder->ip;
1628                        decoder->state.to_ip = 0;
1629                        if (decoder->packet.count != 0) {
1630                                intel_pt_set_ip(decoder);
1631                                intel_pt_log("Omitting PGD ip " x64_fmt "\n",
1632                                             decoder->ip);
1633                        }
1634                        decoder->pge = false;
1635                        decoder->continuous_period = false;
1636                        return 0;
1637
1638                case INTEL_PT_TIP_PGE:
1639                        decoder->pge = true;
1640                        intel_pt_log("Omitting PGE ip " x64_fmt "\n",
1641                                     decoder->ip);
1642                        decoder->state.from_ip = 0;
1643                        if (decoder->packet.count == 0) {
1644                                decoder->state.to_ip = 0;
1645                        } else {
1646                                intel_pt_set_ip(decoder);
1647                                decoder->state.to_ip = decoder->ip;
1648                        }
1649                        return 0;
1650
1651                case INTEL_PT_TIP:
1652                        decoder->state.from_ip = decoder->ip;
1653                        if (decoder->packet.count == 0) {
1654                                decoder->state.to_ip = 0;
1655                        } else {
1656                                intel_pt_set_ip(decoder);
1657                                decoder->state.to_ip = decoder->ip;
1658                        }
1659                        return 0;
1660
1661                case INTEL_PT_PIP:
1662                        decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
1663                        break;
1664
1665                case INTEL_PT_MTC:
1666                        intel_pt_calc_mtc_timestamp(decoder);
1667                        if (decoder->period_type == INTEL_PT_PERIOD_MTC)
1668                                decoder->state.type |= INTEL_PT_INSTRUCTION;
1669                        break;
1670
1671                case INTEL_PT_CYC:
1672                        intel_pt_calc_cyc_timestamp(decoder);
1673                        break;
1674
1675                case INTEL_PT_MODE_EXEC:
1676                        decoder->exec_mode = decoder->packet.payload;
1677                        break;
1678
1679                case INTEL_PT_VMCS:
1680                case INTEL_PT_MNT:
1681                case INTEL_PT_PAD:
1682                        break;
1683
1684                default:
1685                        return intel_pt_bug(decoder);
1686                }
1687        }
1688}
1689
1690static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
1691{
1692        bool no_tip = false;
1693        int err;
1694
1695        while (1) {
1696                err = intel_pt_get_next_packet(decoder);
1697                if (err)
1698                        return err;
1699next:
1700                switch (decoder->packet.type) {
1701                case INTEL_PT_TNT:
1702                        if (!decoder->packet.count)
1703                                break;
1704                        decoder->tnt = decoder->packet;
1705                        decoder->pkt_state = INTEL_PT_STATE_TNT;
1706                        err = intel_pt_walk_tnt(decoder);
1707                        if (err == -EAGAIN)
1708                                break;
1709                        return err;
1710
1711                case INTEL_PT_TIP_PGD:
1712                        if (decoder->packet.count != 0)
1713                                intel_pt_set_last_ip(decoder);
1714                        decoder->pkt_state = INTEL_PT_STATE_TIP_PGD;
1715                        return intel_pt_walk_tip(decoder);
1716
1717                case INTEL_PT_TIP_PGE: {
1718                        decoder->pge = true;
1719                        if (decoder->packet.count == 0) {
1720                                intel_pt_log_at("Skipping zero TIP.PGE",
1721                                                decoder->pos);
1722                                break;
1723                        }
1724                        intel_pt_set_ip(decoder);
1725                        decoder->state.from_ip = 0;
1726                        decoder->state.to_ip = decoder->ip;
1727                        return 0;
1728                }
1729
1730                case INTEL_PT_OVF:
1731                        return intel_pt_overflow(decoder);
1732
1733                case INTEL_PT_TIP:
1734                        if (decoder->packet.count != 0)
1735                                intel_pt_set_last_ip(decoder);
1736                        decoder->pkt_state = INTEL_PT_STATE_TIP;
1737                        return intel_pt_walk_tip(decoder);
1738
1739                case INTEL_PT_FUP:
1740                        if (decoder->packet.count == 0) {
1741                                intel_pt_log_at("Skipping zero FUP",
1742                                                decoder->pos);
1743                                no_tip = false;
1744                                break;
1745                        }
1746                        intel_pt_set_last_ip(decoder);
1747                        if (!decoder->branch_enable) {
1748                                decoder->ip = decoder->last_ip;
1749                                if (intel_pt_fup_event(decoder))
1750                                        return 0;
1751                                no_tip = false;
1752                                break;
1753                        }
1754                        if (decoder->set_fup_mwait)
1755                                no_tip = true;
1756                        err = intel_pt_walk_fup(decoder);
1757                        if (err != -EAGAIN) {
1758                                if (err)
1759                                        return err;
1760                                if (no_tip)
1761                                        decoder->pkt_state =
1762                                                INTEL_PT_STATE_FUP_NO_TIP;
1763                                else
1764                                        decoder->pkt_state = INTEL_PT_STATE_FUP;
1765                                return 0;
1766                        }
1767                        if (no_tip) {
1768                                no_tip = false;
1769                                break;
1770                        }
1771                        return intel_pt_walk_fup_tip(decoder);
1772
1773                case INTEL_PT_TRACESTOP:
1774                        decoder->pge = false;
1775                        decoder->continuous_period = false;
1776                        intel_pt_clear_tx_flags(decoder);
1777                        decoder->have_tma = false;
1778                        break;
1779
1780                case INTEL_PT_PSB:
1781                        decoder->last_ip = 0;
1782                        decoder->have_last_ip = true;
1783                        intel_pt_clear_stack(&decoder->stack);
1784                        err = intel_pt_walk_psbend(decoder);
1785                        if (err == -EAGAIN)
1786                                goto next;
1787                        if (err)
1788                                return err;
1789                        break;
1790
1791                case INTEL_PT_PIP:
1792                        decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
1793                        break;
1794
1795                case INTEL_PT_MTC:
1796                        intel_pt_calc_mtc_timestamp(decoder);
1797                        if (decoder->period_type != INTEL_PT_PERIOD_MTC)
1798                                break;
1799                        /*
1800                         * Ensure that there has been an instruction since the
1801                         * last MTC.
1802                         */
1803                        if (!decoder->mtc_insn)
1804                                break;
1805                        decoder->mtc_insn = false;
1806                        /* Ensure that there is a timestamp */
1807                        if (!decoder->timestamp)
1808                                break;
1809                        decoder->state.type = INTEL_PT_INSTRUCTION;
1810                        decoder->state.from_ip = decoder->ip;
1811                        decoder->state.to_ip = 0;
1812                        decoder->mtc_insn = false;
1813                        return 0;
1814
1815                case INTEL_PT_TSC:
1816                        intel_pt_calc_tsc_timestamp(decoder);
1817                        break;
1818
1819                case INTEL_PT_TMA:
1820                        intel_pt_calc_tma(decoder);
1821                        break;
1822
1823                case INTEL_PT_CYC:
1824                        intel_pt_calc_cyc_timestamp(decoder);
1825                        break;
1826
1827                case INTEL_PT_CBR:
1828                        intel_pt_calc_cbr(decoder);
1829                        if (!decoder->branch_enable &&
1830                            decoder->cbr != decoder->cbr_seen) {
1831                                decoder->cbr_seen = decoder->cbr;
1832                                decoder->state.type = INTEL_PT_CBR_CHG;
1833                                decoder->state.from_ip = decoder->ip;
1834                                decoder->state.to_ip = 0;
1835                                decoder->state.cbr_payload =
1836                                                        decoder->packet.payload;
1837                                return 0;
1838                        }
1839                        break;
1840
1841                case INTEL_PT_MODE_EXEC:
1842                        decoder->exec_mode = decoder->packet.payload;
1843                        break;
1844
1845                case INTEL_PT_MODE_TSX:
1846                        /* MODE_TSX need not be followed by FUP */
1847                        if (!decoder->pge) {
1848                                intel_pt_update_in_tx(decoder);
1849                                break;
1850                        }
1851                        err = intel_pt_mode_tsx(decoder, &no_tip);
1852                        if (err)
1853                                return err;
1854                        goto next;
1855
1856                case INTEL_PT_BAD: /* Does not happen */
1857                        return intel_pt_bug(decoder);
1858
1859                case INTEL_PT_PSBEND:
1860                case INTEL_PT_VMCS:
1861                case INTEL_PT_MNT:
1862                case INTEL_PT_PAD:
1863                        break;
1864
1865                case INTEL_PT_PTWRITE_IP:
1866                        decoder->fup_ptw_payload = decoder->packet.payload;
1867                        err = intel_pt_get_next_packet(decoder);
1868                        if (err)
1869                                return err;
1870                        if (decoder->packet.type == INTEL_PT_FUP) {
1871                                decoder->set_fup_ptw = true;
1872                                no_tip = true;
1873                        } else {
1874                                intel_pt_log_at("ERROR: Missing FUP after PTWRITE",
1875                                                decoder->pos);
1876                        }
1877                        goto next;
1878
1879                case INTEL_PT_PTWRITE:
1880                        decoder->state.type = INTEL_PT_PTW;
1881                        decoder->state.from_ip = decoder->ip;
1882                        decoder->state.to_ip = 0;
1883                        decoder->state.ptw_payload = decoder->packet.payload;
1884                        return 0;
1885
1886                case INTEL_PT_MWAIT:
1887                        decoder->fup_mwait_payload = decoder->packet.payload;
1888                        decoder->set_fup_mwait = true;
1889                        break;
1890
1891                case INTEL_PT_PWRE:
1892                        if (decoder->set_fup_mwait) {
1893                                decoder->fup_pwre_payload =
1894                                                        decoder->packet.payload;
1895                                decoder->set_fup_pwre = true;
1896                                break;
1897                        }
1898                        decoder->state.type = INTEL_PT_PWR_ENTRY;
1899                        decoder->state.from_ip = decoder->ip;
1900                        decoder->state.to_ip = 0;
1901                        decoder->state.pwrx_payload = decoder->packet.payload;
1902                        return 0;
1903
1904                case INTEL_PT_EXSTOP_IP:
1905                        err = intel_pt_get_next_packet(decoder);
1906                        if (err)
1907                                return err;
1908                        if (decoder->packet.type == INTEL_PT_FUP) {
1909                                decoder->set_fup_exstop = true;
1910                                no_tip = true;
1911                        } else {
1912                                intel_pt_log_at("ERROR: Missing FUP after EXSTOP",
1913                                                decoder->pos);
1914                        }
1915                        goto next;
1916
1917                case INTEL_PT_EXSTOP:
1918                        decoder->state.type = INTEL_PT_EX_STOP;
1919                        decoder->state.from_ip = decoder->ip;
1920                        decoder->state.to_ip = 0;
1921                        return 0;
1922
1923                case INTEL_PT_PWRX:
1924                        decoder->state.type = INTEL_PT_PWR_EXIT;
1925                        decoder->state.from_ip = decoder->ip;
1926                        decoder->state.to_ip = 0;
1927                        decoder->state.pwrx_payload = decoder->packet.payload;
1928                        return 0;
1929
1930                default:
1931                        return intel_pt_bug(decoder);
1932                }
1933        }
1934}
1935
1936static inline bool intel_pt_have_ip(struct intel_pt_decoder *decoder)
1937{
1938        return decoder->packet.count &&
1939               (decoder->have_last_ip || decoder->packet.count == 3 ||
1940                decoder->packet.count == 6);
1941}
1942
1943/* Walk PSB+ packets to get in sync. */
1944static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
1945{
1946        int err;
1947
1948        while (1) {
1949                err = intel_pt_get_next_packet(decoder);
1950                if (err)
1951                        return err;
1952
1953                switch (decoder->packet.type) {
1954                case INTEL_PT_TIP_PGD:
1955                        decoder->continuous_period = false;
1956                        __fallthrough;
1957                case INTEL_PT_TIP_PGE:
1958                case INTEL_PT_TIP:
1959                case INTEL_PT_PTWRITE:
1960                case INTEL_PT_PTWRITE_IP:
1961                case INTEL_PT_EXSTOP:
1962                case INTEL_PT_EXSTOP_IP:
1963                case INTEL_PT_MWAIT:
1964                case INTEL_PT_PWRE:
1965                case INTEL_PT_PWRX:
1966                        intel_pt_log("ERROR: Unexpected packet\n");
1967                        return -ENOENT;
1968
1969                case INTEL_PT_FUP:
1970                        decoder->pge = true;
1971                        if (intel_pt_have_ip(decoder)) {
1972                                uint64_t current_ip = decoder->ip;
1973
1974                                intel_pt_set_ip(decoder);
1975                                if (current_ip)
1976                                        intel_pt_log_to("Setting IP",
1977                                                        decoder->ip);
1978                        }
1979                        break;
1980
1981                case INTEL_PT_MTC:
1982                        intel_pt_calc_mtc_timestamp(decoder);
1983                        break;
1984
1985                case INTEL_PT_TSC:
1986                        intel_pt_calc_tsc_timestamp(decoder);
1987                        break;
1988
1989                case INTEL_PT_TMA:
1990                        intel_pt_calc_tma(decoder);
1991                        break;
1992
1993                case INTEL_PT_CYC:
1994                        intel_pt_calc_cyc_timestamp(decoder);
1995                        break;
1996
1997                case INTEL_PT_CBR:
1998                        intel_pt_calc_cbr(decoder);
1999                        break;
2000
2001                case INTEL_PT_PIP:
2002                        decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
2003                        break;
2004
2005                case INTEL_PT_MODE_EXEC:
2006                        decoder->exec_mode = decoder->packet.payload;
2007                        break;
2008
2009                case INTEL_PT_MODE_TSX:
2010                        intel_pt_update_in_tx(decoder);
2011                        break;
2012
2013                case INTEL_PT_TRACESTOP:
2014                        decoder->pge = false;
2015                        decoder->continuous_period = false;
2016                        intel_pt_clear_tx_flags(decoder);
2017                        __fallthrough;
2018
2019                case INTEL_PT_TNT:
2020                        decoder->have_tma = false;
2021                        intel_pt_log("ERROR: Unexpected packet\n");
2022                        if (decoder->ip)
2023                                decoder->pkt_state = INTEL_PT_STATE_ERR4;
2024                        else
2025                                decoder->pkt_state = INTEL_PT_STATE_ERR3;
2026                        return -ENOENT;
2027
2028                case INTEL_PT_BAD: /* Does not happen */
2029                        return intel_pt_bug(decoder);
2030
2031                case INTEL_PT_OVF:
2032                        return intel_pt_overflow(decoder);
2033
2034                case INTEL_PT_PSBEND:
2035                        return 0;
2036
2037                case INTEL_PT_PSB:
2038                case INTEL_PT_VMCS:
2039                case INTEL_PT_MNT:
2040                case INTEL_PT_PAD:
2041                default:
2042                        break;
2043                }
2044        }
2045}
2046
2047static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
2048{
2049        int err;
2050
2051        while (1) {
2052                err = intel_pt_get_next_packet(decoder);
2053                if (err)
2054                        return err;
2055
2056                switch (decoder->packet.type) {
2057                case INTEL_PT_TIP_PGD:
2058                        decoder->continuous_period = false;
2059                        __fallthrough;
2060                case INTEL_PT_TIP_PGE:
2061                case INTEL_PT_TIP:
2062                        decoder->pge = decoder->packet.type != INTEL_PT_TIP_PGD;
2063                        if (intel_pt_have_ip(decoder))
2064                                intel_pt_set_ip(decoder);
2065                        if (decoder->ip)
2066                                return 0;
2067                        break;
2068
2069                case INTEL_PT_FUP:
2070                        if (intel_pt_have_ip(decoder))
2071                                intel_pt_set_ip(decoder);
2072                        if (decoder->ip)
2073                                return 0;
2074                        break;
2075
2076                case INTEL_PT_MTC:
2077                        intel_pt_calc_mtc_timestamp(decoder);
2078                        break;
2079
2080                case INTEL_PT_TSC:
2081                        intel_pt_calc_tsc_timestamp(decoder);
2082                        break;
2083
2084                case INTEL_PT_TMA:
2085                        intel_pt_calc_tma(decoder);
2086                        break;
2087
2088                case INTEL_PT_CYC:
2089                        intel_pt_calc_cyc_timestamp(decoder);
2090                        break;
2091
2092                case INTEL_PT_CBR:
2093                        intel_pt_calc_cbr(decoder);
2094                        break;
2095
2096                case INTEL_PT_PIP:
2097                        decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
2098                        break;
2099
2100                case INTEL_PT_MODE_EXEC:
2101                        decoder->exec_mode = decoder->packet.payload;
2102                        break;
2103
2104                case INTEL_PT_MODE_TSX:
2105                        intel_pt_update_in_tx(decoder);
2106                        break;
2107
2108                case INTEL_PT_OVF:
2109                        return intel_pt_overflow(decoder);
2110
2111                case INTEL_PT_BAD: /* Does not happen */
2112                        return intel_pt_bug(decoder);
2113
2114                case INTEL_PT_TRACESTOP:
2115                        decoder->pge = false;
2116                        decoder->continuous_period = false;
2117                        intel_pt_clear_tx_flags(decoder);
2118                        decoder->have_tma = false;
2119                        break;
2120
2121                case INTEL_PT_PSB:
2122                        decoder->last_ip = 0;
2123                        decoder->have_last_ip = true;
2124                        intel_pt_clear_stack(&decoder->stack);
2125                        err = intel_pt_walk_psb(decoder);
2126                        if (err)
2127                                return err;
2128                        if (decoder->ip) {
2129                                /* Do not have a sample */
2130                                decoder->state.type = 0;
2131                                return 0;
2132                        }
2133                        break;
2134
2135                case INTEL_PT_TNT:
2136                case INTEL_PT_PSBEND:
2137                case INTEL_PT_VMCS:
2138                case INTEL_PT_MNT:
2139                case INTEL_PT_PAD:
2140                case INTEL_PT_PTWRITE:
2141                case INTEL_PT_PTWRITE_IP:
2142                case INTEL_PT_EXSTOP:
2143                case INTEL_PT_EXSTOP_IP:
2144                case INTEL_PT_MWAIT:
2145                case INTEL_PT_PWRE:
2146                case INTEL_PT_PWRX:
2147                default:
2148                        break;
2149                }
2150        }
2151}
2152
2153static int intel_pt_sync_ip(struct intel_pt_decoder *decoder)
2154{
2155        int err;
2156
2157        decoder->set_fup_tx_flags = false;
2158        decoder->set_fup_ptw = false;
2159        decoder->set_fup_mwait = false;
2160        decoder->set_fup_pwre = false;
2161        decoder->set_fup_exstop = false;
2162
2163        if (!decoder->branch_enable) {
2164                decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
2165                decoder->overflow = false;
2166                decoder->state.type = 0; /* Do not have a sample */
2167                return 0;
2168        }
2169
2170        intel_pt_log("Scanning for full IP\n");
2171        err = intel_pt_walk_to_ip(decoder);
2172        if (err)
2173                return err;
2174
2175        decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
2176        decoder->overflow = false;
2177
2178        decoder->state.from_ip = 0;
2179        decoder->state.to_ip = decoder->ip;
2180        intel_pt_log_to("Setting IP", decoder->ip);
2181
2182        return 0;
2183}
2184
2185static int intel_pt_part_psb(struct intel_pt_decoder *decoder)
2186{
2187        const unsigned char *end = decoder->buf + decoder->len;
2188        size_t i;
2189
2190        for (i = INTEL_PT_PSB_LEN - 1; i; i--) {
2191                if (i > decoder->len)
2192                        continue;
2193                if (!memcmp(end - i, INTEL_PT_PSB_STR, i))
2194                        return i;
2195        }
2196        return 0;
2197}
2198
2199static int intel_pt_rest_psb(struct intel_pt_decoder *decoder, int part_psb)
2200{
2201        size_t rest_psb = INTEL_PT_PSB_LEN - part_psb;
2202        const char *psb = INTEL_PT_PSB_STR;
2203
2204        if (rest_psb > decoder->len ||
2205            memcmp(decoder->buf, psb + part_psb, rest_psb))
2206                return 0;
2207
2208        return rest_psb;
2209}
2210
2211static int intel_pt_get_split_psb(struct intel_pt_decoder *decoder,
2212                                  int part_psb)
2213{
2214        int rest_psb, ret;
2215
2216        decoder->pos += decoder->len;
2217        decoder->len = 0;
2218
2219        ret = intel_pt_get_next_data(decoder);
2220        if (ret)
2221                return ret;
2222
2223        rest_psb = intel_pt_rest_psb(decoder, part_psb);
2224        if (!rest_psb)
2225                return 0;
2226
2227        decoder->pos -= part_psb;
2228        decoder->next_buf = decoder->buf + rest_psb;
2229        decoder->next_len = decoder->len - rest_psb;
2230        memcpy(decoder->temp_buf, INTEL_PT_PSB_STR, INTEL_PT_PSB_LEN);
2231        decoder->buf = decoder->temp_buf;
2232        decoder->len = INTEL_PT_PSB_LEN;
2233
2234        return 0;
2235}
2236
2237static int intel_pt_scan_for_psb(struct intel_pt_decoder *decoder)
2238{
2239        unsigned char *next;
2240        int ret;
2241
2242        intel_pt_log("Scanning for PSB\n");
2243        while (1) {
2244                if (!decoder->len) {
2245                        ret = intel_pt_get_next_data(decoder);
2246                        if (ret)
2247                                return ret;
2248                }
2249
2250                next = memmem(decoder->buf, decoder->len, INTEL_PT_PSB_STR,
2251                              INTEL_PT_PSB_LEN);
2252                if (!next) {
2253                        int part_psb;
2254
2255                        part_psb = intel_pt_part_psb(decoder);
2256                        if (part_psb) {
2257                                ret = intel_pt_get_split_psb(decoder, part_psb);
2258                                if (ret)
2259                                        return ret;
2260                        } else {
2261                                decoder->pos += decoder->len;
2262                                decoder->len = 0;
2263                        }
2264                        continue;
2265                }
2266
2267                decoder->pkt_step = next - decoder->buf;
2268                return intel_pt_get_next_packet(decoder);
2269        }
2270}
2271
2272static int intel_pt_sync(struct intel_pt_decoder *decoder)
2273{
2274        int err;
2275
2276        decoder->pge = false;
2277        decoder->continuous_period = false;
2278        decoder->have_last_ip = false;
2279        decoder->last_ip = 0;
2280        decoder->ip = 0;
2281        intel_pt_clear_stack(&decoder->stack);
2282
2283        err = intel_pt_scan_for_psb(decoder);
2284        if (err)
2285                return err;
2286
2287        decoder->have_last_ip = true;
2288        decoder->pkt_state = INTEL_PT_STATE_NO_IP;
2289
2290        err = intel_pt_walk_psb(decoder);
2291        if (err)
2292                return err;
2293
2294        if (decoder->ip) {
2295                decoder->state.type = 0; /* Do not have a sample */
2296                decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
2297        } else {
2298                return intel_pt_sync_ip(decoder);
2299        }
2300
2301        return 0;
2302}
2303
2304static uint64_t intel_pt_est_timestamp(struct intel_pt_decoder *decoder)
2305{
2306        uint64_t est = decoder->sample_insn_cnt << 1;
2307
2308        if (!decoder->cbr || !decoder->max_non_turbo_ratio)
2309                goto out;
2310
2311        est *= decoder->max_non_turbo_ratio;
2312        est /= decoder->cbr;
2313out:
2314        return decoder->sample_timestamp + est;
2315}
2316
2317const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
2318{
2319        int err;
2320
2321        do {
2322                decoder->state.type = INTEL_PT_BRANCH;
2323                decoder->state.flags = 0;
2324
2325                switch (decoder->pkt_state) {
2326                case INTEL_PT_STATE_NO_PSB:
2327                        err = intel_pt_sync(decoder);
2328                        break;
2329                case INTEL_PT_STATE_NO_IP:
2330                        decoder->have_last_ip = false;
2331                        decoder->last_ip = 0;
2332                        decoder->ip = 0;
2333                        __fallthrough;
2334                case INTEL_PT_STATE_ERR_RESYNC:
2335                        err = intel_pt_sync_ip(decoder);
2336                        break;
2337                case INTEL_PT_STATE_IN_SYNC:
2338                        err = intel_pt_walk_trace(decoder);
2339                        break;
2340                case INTEL_PT_STATE_TNT:
2341                        err = intel_pt_walk_tnt(decoder);
2342                        if (err == -EAGAIN)
2343                                err = intel_pt_walk_trace(decoder);
2344                        break;
2345                case INTEL_PT_STATE_TIP:
2346                case INTEL_PT_STATE_TIP_PGD:
2347                        err = intel_pt_walk_tip(decoder);
2348                        break;
2349                case INTEL_PT_STATE_FUP:
2350                        decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
2351                        err = intel_pt_walk_fup(decoder);
2352                        if (err == -EAGAIN)
2353                                err = intel_pt_walk_fup_tip(decoder);
2354                        else if (!err)
2355                                decoder->pkt_state = INTEL_PT_STATE_FUP;
2356                        break;
2357                case INTEL_PT_STATE_FUP_NO_TIP:
2358                        decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
2359                        err = intel_pt_walk_fup(decoder);
2360                        if (err == -EAGAIN)
2361                                err = intel_pt_walk_trace(decoder);
2362                        break;
2363                default:
2364                        err = intel_pt_bug(decoder);
2365                        break;
2366                }
2367        } while (err == -ENOLINK);
2368
2369        if (err) {
2370                decoder->state.err = intel_pt_ext_err(err);
2371                decoder->state.from_ip = decoder->ip;
2372                decoder->sample_timestamp = decoder->timestamp;
2373                decoder->sample_insn_cnt = decoder->timestamp_insn_cnt;
2374        } else {
2375                decoder->state.err = 0;
2376                if (decoder->cbr != decoder->cbr_seen && decoder->state.type) {
2377                        decoder->cbr_seen = decoder->cbr;
2378                        decoder->state.type |= INTEL_PT_CBR_CHG;
2379                        decoder->state.cbr_payload = decoder->cbr_payload;
2380                }
2381                if (intel_pt_sample_time(decoder->pkt_state)) {
2382                        decoder->sample_timestamp = decoder->timestamp;
2383                        decoder->sample_insn_cnt = decoder->timestamp_insn_cnt;
2384                }
2385        }
2386
2387        decoder->state.timestamp = decoder->sample_timestamp;
2388        decoder->state.est_timestamp = intel_pt_est_timestamp(decoder);
2389        decoder->state.cr3 = decoder->cr3;
2390        decoder->state.tot_insn_cnt = decoder->tot_insn_cnt;
2391
2392        return &decoder->state;
2393}
2394
2395/**
2396 * intel_pt_next_psb - move buffer pointer to the start of the next PSB packet.
2397 * @buf: pointer to buffer pointer
2398 * @len: size of buffer
2399 *
2400 * Updates the buffer pointer to point to the start of the next PSB packet if
2401 * there is one, otherwise the buffer pointer is unchanged.  If @buf is updated,
2402 * @len is adjusted accordingly.
2403 *
2404 * Return: %true if a PSB packet is found, %false otherwise.
2405 */
2406static bool intel_pt_next_psb(unsigned char **buf, size_t *len)
2407{
2408        unsigned char *next;
2409
2410        next = memmem(*buf, *len, INTEL_PT_PSB_STR, INTEL_PT_PSB_LEN);
2411        if (next) {
2412                *len -= next - *buf;
2413                *buf = next;
2414                return true;
2415        }
2416        return false;
2417}
2418
2419/**
2420 * intel_pt_step_psb - move buffer pointer to the start of the following PSB
2421 *                     packet.
2422 * @buf: pointer to buffer pointer
2423 * @len: size of buffer
2424 *
2425 * Updates the buffer pointer to point to the start of the following PSB packet
2426 * (skipping the PSB at @buf itself) if there is one, otherwise the buffer
2427 * pointer is unchanged.  If @buf is updated, @len is adjusted accordingly.
2428 *
2429 * Return: %true if a PSB packet is found, %false otherwise.
2430 */
2431static bool intel_pt_step_psb(unsigned char **buf, size_t *len)
2432{
2433        unsigned char *next;
2434
2435        if (!*len)
2436                return false;
2437
2438        next = memmem(*buf + 1, *len - 1, INTEL_PT_PSB_STR, INTEL_PT_PSB_LEN);
2439        if (next) {
2440                *len -= next - *buf;
2441                *buf = next;
2442                return true;
2443        }
2444        return false;
2445}
2446
2447/**
2448 * intel_pt_last_psb - find the last PSB packet in a buffer.
2449 * @buf: buffer
2450 * @len: size of buffer
2451 *
2452 * This function finds the last PSB in a buffer.
2453 *
2454 * Return: A pointer to the last PSB in @buf if found, %NULL otherwise.
2455 */
2456static unsigned char *intel_pt_last_psb(unsigned char *buf, size_t len)
2457{
2458        const char *n = INTEL_PT_PSB_STR;
2459        unsigned char *p;
2460        size_t k;
2461
2462        if (len < INTEL_PT_PSB_LEN)
2463                return NULL;
2464
2465        k = len - INTEL_PT_PSB_LEN + 1;
2466        while (1) {
2467                p = memrchr(buf, n[0], k);
2468                if (!p)
2469                        return NULL;
2470                if (!memcmp(p + 1, n + 1, INTEL_PT_PSB_LEN - 1))
2471                        return p;
2472                k = p - buf;
2473                if (!k)
2474                        return NULL;
2475        }
2476}
2477
2478/**
2479 * intel_pt_next_tsc - find and return next TSC.
2480 * @buf: buffer
2481 * @len: size of buffer
2482 * @tsc: TSC value returned
2483 * @rem: returns remaining size when TSC is found
2484 *
2485 * Find a TSC packet in @buf and return the TSC value.  This function assumes
2486 * that @buf starts at a PSB and that PSB+ will contain TSC and so stops if a
2487 * PSBEND packet is found.
2488 *
2489 * Return: %true if TSC is found, false otherwise.
2490 */
2491static bool intel_pt_next_tsc(unsigned char *buf, size_t len, uint64_t *tsc,
2492                              size_t *rem)
2493{
2494        struct intel_pt_pkt packet;
2495        int ret;
2496
2497        while (len) {
2498                ret = intel_pt_get_packet(buf, len, &packet);
2499                if (ret <= 0)
2500                        return false;
2501                if (packet.type == INTEL_PT_TSC) {
2502                        *tsc = packet.payload;
2503                        *rem = len;
2504                        return true;
2505                }
2506                if (packet.type == INTEL_PT_PSBEND)
2507                        return false;
2508                buf += ret;
2509                len -= ret;
2510        }
2511        return false;
2512}
2513
2514/**
2515 * intel_pt_tsc_cmp - compare 7-byte TSCs.
2516 * @tsc1: first TSC to compare
2517 * @tsc2: second TSC to compare
2518 *
2519 * This function compares 7-byte TSC values allowing for the possibility that
2520 * TSC wrapped around.  Generally it is not possible to know if TSC has wrapped
2521 * around so for that purpose this function assumes the absolute difference is
2522 * less than half the maximum difference.
2523 *
2524 * Return: %-1 if @tsc1 is before @tsc2, %0 if @tsc1 == @tsc2, %1 if @tsc1 is
2525 * after @tsc2.
2526 */
2527static int intel_pt_tsc_cmp(uint64_t tsc1, uint64_t tsc2)
2528{
2529        const uint64_t halfway = (1ULL << 55);
2530
2531        if (tsc1 == tsc2)
2532                return 0;
2533
2534        if (tsc1 < tsc2) {
2535                if (tsc2 - tsc1 < halfway)
2536                        return -1;
2537                else
2538                        return 1;
2539        } else {
2540                if (tsc1 - tsc2 < halfway)
2541                        return 1;
2542                else
2543                        return -1;
2544        }
2545}
2546
2547/**
2548 * intel_pt_find_overlap_tsc - determine start of non-overlapped trace data
2549 *                             using TSC.
2550 * @buf_a: first buffer
2551 * @len_a: size of first buffer
2552 * @buf_b: second buffer
2553 * @len_b: size of second buffer
2554 * @consecutive: returns true if there is data in buf_b that is consecutive
2555 *               to buf_a
2556 *
2557 * If the trace contains TSC we can look at the last TSC of @buf_a and the
2558 * first TSC of @buf_b in order to determine if the buffers overlap, and then
2559 * walk forward in @buf_b until a later TSC is found.  A precondition is that
2560 * @buf_a and @buf_b are positioned at a PSB.
2561 *
2562 * Return: A pointer into @buf_b from where non-overlapped data starts, or
2563 * @buf_b + @len_b if there is no non-overlapped data.
2564 */
2565static unsigned char *intel_pt_find_overlap_tsc(unsigned char *buf_a,
2566                                                size_t len_a,
2567                                                unsigned char *buf_b,
2568                                                size_t len_b, bool *consecutive)
2569{
2570        uint64_t tsc_a, tsc_b;
2571        unsigned char *p;
2572        size_t len, rem_a, rem_b;
2573
2574        p = intel_pt_last_psb(buf_a, len_a);
2575        if (!p)
2576                return buf_b; /* No PSB in buf_a => no overlap */
2577
2578        len = len_a - (p - buf_a);
2579        if (!intel_pt_next_tsc(p, len, &tsc_a, &rem_a)) {
2580                /* The last PSB+ in buf_a is incomplete, so go back one more */
2581                len_a -= len;
2582                p = intel_pt_last_psb(buf_a, len_a);
2583                if (!p)
2584                        return buf_b; /* No full PSB+ => assume no overlap */
2585                len = len_a - (p - buf_a);
2586                if (!intel_pt_next_tsc(p, len, &tsc_a, &rem_a))
2587                        return buf_b; /* No TSC in buf_a => assume no overlap */
2588        }
2589
2590        while (1) {
2591                /* Ignore PSB+ with no TSC */
2592                if (intel_pt_next_tsc(buf_b, len_b, &tsc_b, &rem_b)) {
2593                        int cmp = intel_pt_tsc_cmp(tsc_a, tsc_b);
2594
2595                        /* Same TSC, so buffers are consecutive */
2596                        if (!cmp && rem_b >= rem_a) {
2597                                *consecutive = true;
2598                                return buf_b + len_b - (rem_b - rem_a);
2599                        }
2600                        if (cmp < 0)
2601                                return buf_b; /* tsc_a < tsc_b => no overlap */
2602                }
2603
2604                if (!intel_pt_step_psb(&buf_b, &len_b))
2605                        return buf_b + len_b; /* No PSB in buf_b => no data */
2606        }
2607}
2608
2609/**
2610 * intel_pt_find_overlap - determine start of non-overlapped trace data.
2611 * @buf_a: first buffer
2612 * @len_a: size of first buffer
2613 * @buf_b: second buffer
2614 * @len_b: size of second buffer
2615 * @have_tsc: can use TSC packets to detect overlap
2616 * @consecutive: returns true if there is data in buf_b that is consecutive
2617 *               to buf_a
2618 *
2619 * When trace samples or snapshots are recorded there is the possibility that
2620 * the data overlaps.  Note that, for the purposes of decoding, data is only
2621 * useful if it begins with a PSB packet.
2622 *
2623 * Return: A pointer into @buf_b from where non-overlapped data starts, or
2624 * @buf_b + @len_b if there is no non-overlapped data.
2625 */
2626unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a,
2627                                     unsigned char *buf_b, size_t len_b,
2628                                     bool have_tsc, bool *consecutive)
2629{
2630        unsigned char *found;
2631
2632        /* Buffer 'b' must start at PSB so throw away everything before that */
2633        if (!intel_pt_next_psb(&buf_b, &len_b))
2634                return buf_b + len_b; /* No PSB */
2635
2636        if (!intel_pt_next_psb(&buf_a, &len_a))
2637                return buf_b; /* No overlap */
2638
2639        if (have_tsc) {
2640                found = intel_pt_find_overlap_tsc(buf_a, len_a, buf_b, len_b,
2641                                                  consecutive);
2642                if (found)
2643                        return found;
2644        }
2645
2646        /*
2647         * Buffer 'b' cannot end within buffer 'a' so, for comparison purposes,
2648         * we can ignore the first part of buffer 'a'.
2649         */
2650        while (len_b < len_a) {
2651                if (!intel_pt_step_psb(&buf_a, &len_a))
2652                        return buf_b; /* No overlap */
2653        }
2654
2655        /* Now len_b >= len_a */
2656        while (1) {
2657                /* Potential overlap so check the bytes */
2658                found = memmem(buf_a, len_a, buf_b, len_a);
2659                if (found) {
2660                        *consecutive = true;
2661                        return buf_b + len_a;
2662                }
2663
2664                /* Try again at next PSB in buffer 'a' */
2665                if (!intel_pt_step_psb(&buf_a, &len_a))
2666                        return buf_b; /* No overlap */
2667        }
2668}
2669