intel-pt-decoder.c (113690B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * intel_pt_decoder.c: Intel Processor Trace support 4 * Copyright (c) 2013-2014, Intel Corporation. 5 */ 6 7#ifndef _GNU_SOURCE 8#define _GNU_SOURCE 9#endif 10#include <stdlib.h> 11#include <stdbool.h> 12#include <string.h> 13#include <errno.h> 14#include <stdint.h> 15#include <inttypes.h> 16#include <linux/compiler.h> 17#include <linux/string.h> 18#include <linux/zalloc.h> 19 20#include "../auxtrace.h" 21 22#include "intel-pt-insn-decoder.h" 23#include "intel-pt-pkt-decoder.h" 24#include "intel-pt-decoder.h" 25#include "intel-pt-log.h" 26 27#define BITULL(x) (1ULL << (x)) 28 29/* IA32_RTIT_CTL MSR bits */ 30#define INTEL_PT_CYC_ENABLE BITULL(1) 31#define INTEL_PT_CYC_THRESHOLD (BITULL(22) | BITULL(21) | BITULL(20) | BITULL(19)) 32#define INTEL_PT_CYC_THRESHOLD_SHIFT 19 33 34#define INTEL_PT_BLK_SIZE 1024 35 36#define BIT63 (((uint64_t)1 << 63)) 37 38#define SEVEN_BYTES 0xffffffffffffffULL 39 40#define NO_VMCS 0xffffffffffULL 41 42#define INTEL_PT_RETURN 1 43 44/* 45 * Default maximum number of loops with no packets consumed i.e. stuck in a 46 * loop. 47 */ 48#define INTEL_PT_MAX_LOOPS 100000 49 50struct intel_pt_blk { 51 struct intel_pt_blk *prev; 52 uint64_t ip[INTEL_PT_BLK_SIZE]; 53}; 54 55struct intel_pt_stack { 56 struct intel_pt_blk *blk; 57 struct intel_pt_blk *spare; 58 int pos; 59}; 60 61enum intel_pt_p_once { 62 INTEL_PT_PRT_ONCE_UNK_VMCS, 63 INTEL_PT_PRT_ONCE_ERANGE, 64}; 65 66enum intel_pt_pkt_state { 67 INTEL_PT_STATE_NO_PSB, 68 INTEL_PT_STATE_NO_IP, 69 INTEL_PT_STATE_ERR_RESYNC, 70 INTEL_PT_STATE_IN_SYNC, 71 INTEL_PT_STATE_TNT_CONT, 72 INTEL_PT_STATE_TNT, 73 INTEL_PT_STATE_TIP, 74 INTEL_PT_STATE_TIP_PGD, 75 INTEL_PT_STATE_FUP, 76 INTEL_PT_STATE_FUP_NO_TIP, 77 INTEL_PT_STATE_FUP_IN_PSB, 78 INTEL_PT_STATE_RESAMPLE, 79 INTEL_PT_STATE_VM_TIME_CORRELATION, 80}; 81 82static inline bool intel_pt_sample_time(enum intel_pt_pkt_state pkt_state) 83{ 84 switch (pkt_state) { 85 case INTEL_PT_STATE_NO_PSB: 86 case INTEL_PT_STATE_NO_IP: 87 case INTEL_PT_STATE_ERR_RESYNC: 88 case INTEL_PT_STATE_IN_SYNC: 89 case INTEL_PT_STATE_TNT_CONT: 90 case INTEL_PT_STATE_RESAMPLE: 91 case INTEL_PT_STATE_VM_TIME_CORRELATION: 92 return true; 93 case INTEL_PT_STATE_TNT: 94 case INTEL_PT_STATE_TIP: 95 case INTEL_PT_STATE_TIP_PGD: 96 case INTEL_PT_STATE_FUP: 97 case INTEL_PT_STATE_FUP_NO_TIP: 98 case INTEL_PT_STATE_FUP_IN_PSB: 99 return false; 100 default: 101 return true; 102 }; 103} 104 105#ifdef INTEL_PT_STRICT 106#define INTEL_PT_STATE_ERR1 INTEL_PT_STATE_NO_PSB 107#define INTEL_PT_STATE_ERR2 INTEL_PT_STATE_NO_PSB 108#define INTEL_PT_STATE_ERR3 INTEL_PT_STATE_NO_PSB 109#define INTEL_PT_STATE_ERR4 INTEL_PT_STATE_NO_PSB 110#else 111#define INTEL_PT_STATE_ERR1 (decoder->pkt_state) 112#define INTEL_PT_STATE_ERR2 INTEL_PT_STATE_NO_IP 113#define INTEL_PT_STATE_ERR3 INTEL_PT_STATE_ERR_RESYNC 114#define INTEL_PT_STATE_ERR4 INTEL_PT_STATE_IN_SYNC 115#endif 116 117struct intel_pt_decoder { 118 int (*get_trace)(struct intel_pt_buffer *buffer, void *data); 119 int (*walk_insn)(struct intel_pt_insn *intel_pt_insn, 120 uint64_t *insn_cnt_ptr, uint64_t *ip, uint64_t to_ip, 121 uint64_t max_insn_cnt, void *data); 122 bool (*pgd_ip)(uint64_t ip, void *data); 123 int (*lookahead)(void *data, intel_pt_lookahead_cb_t cb, void *cb_data); 124 struct intel_pt_vmcs_info *(*findnew_vmcs_info)(void *data, uint64_t vmcs); 125 void *data; 126 struct intel_pt_state state; 127 const unsigned char *buf; 128 size_t len; 129 bool return_compression; 130 bool branch_enable; 131 bool mtc_insn; 132 bool pge; 133 bool have_tma; 134 bool have_cyc; 135 bool fixup_last_mtc; 136 bool have_last_ip; 137 bool in_psb; 138 bool hop; 139 bool leap; 140 bool emulated_ptwrite; 141 bool vm_time_correlation; 142 bool vm_tm_corr_dry_run; 143 bool vm_tm_corr_reliable; 144 bool vm_tm_corr_same_buf; 145 bool vm_tm_corr_continuous; 146 bool nr; 147 bool next_nr; 148 bool iflag; 149 bool next_iflag; 150 enum intel_pt_param_flags flags; 151 uint64_t pos; 152 uint64_t last_ip; 153 uint64_t ip; 154 uint64_t pip_payload; 155 uint64_t timestamp; 156 uint64_t tsc_timestamp; 157 uint64_t ref_timestamp; 158 uint64_t buf_timestamp; 159 uint64_t sample_timestamp; 160 uint64_t ret_addr; 161 uint64_t ctc_timestamp; 162 uint64_t ctc_delta; 163 uint64_t cycle_cnt; 164 uint64_t cyc_ref_timestamp; 165 uint64_t first_timestamp; 166 uint64_t last_reliable_timestamp; 167 uint64_t vmcs; 168 uint64_t print_once; 169 uint64_t last_ctc; 170 uint32_t last_mtc; 171 uint32_t tsc_ctc_ratio_n; 172 uint32_t tsc_ctc_ratio_d; 173 uint32_t tsc_ctc_mult; 174 uint32_t tsc_slip; 175 uint32_t ctc_rem_mask; 176 int mtc_shift; 177 struct intel_pt_stack stack; 178 enum intel_pt_pkt_state pkt_state; 179 enum intel_pt_pkt_ctx pkt_ctx; 180 enum intel_pt_pkt_ctx prev_pkt_ctx; 181 enum intel_pt_blk_type blk_type; 182 int blk_type_pos; 183 struct intel_pt_pkt packet; 184 struct intel_pt_pkt tnt; 185 int pkt_step; 186 int pkt_len; 187 int last_packet_type; 188 unsigned int cbr; 189 unsigned int cbr_seen; 190 unsigned int max_non_turbo_ratio; 191 double max_non_turbo_ratio_fp; 192 double cbr_cyc_to_tsc; 193 double calc_cyc_to_tsc; 194 bool have_calc_cyc_to_tsc; 195 int exec_mode; 196 unsigned int insn_bytes; 197 uint64_t period; 198 enum intel_pt_period_type period_type; 199 uint64_t tot_insn_cnt; 200 uint64_t period_insn_cnt; 201 uint64_t period_mask; 202 uint64_t period_ticks; 203 uint64_t last_masked_timestamp; 204 uint64_t tot_cyc_cnt; 205 uint64_t sample_tot_cyc_cnt; 206 uint64_t base_cyc_cnt; 207 uint64_t cyc_cnt_timestamp; 208 uint64_t ctl; 209 uint64_t cyc_threshold; 210 double tsc_to_cyc; 211 bool continuous_period; 212 bool overflow; 213 bool set_fup_tx_flags; 214 bool set_fup_ptw; 215 bool set_fup_mwait; 216 bool set_fup_pwre; 217 bool set_fup_exstop; 218 bool set_fup_bep; 219 bool set_fup_cfe_ip; 220 bool set_fup_cfe; 221 bool set_fup_mode_exec; 222 bool sample_cyc; 223 unsigned int fup_tx_flags; 224 unsigned int tx_flags; 225 uint64_t fup_ptw_payload; 226 uint64_t fup_mwait_payload; 227 uint64_t fup_pwre_payload; 228 uint64_t cbr_payload; 229 uint64_t timestamp_insn_cnt; 230 uint64_t sample_insn_cnt; 231 uint64_t stuck_ip; 232 struct intel_pt_pkt fup_cfe_pkt; 233 int max_loops; 234 int no_progress; 235 int stuck_ip_prd; 236 int stuck_ip_cnt; 237 uint64_t psb_ip; 238 const unsigned char *next_buf; 239 size_t next_len; 240 unsigned char temp_buf[INTEL_PT_PKT_MAX_SZ]; 241 int evd_cnt; 242 struct intel_pt_evd evd[INTEL_PT_MAX_EVDS]; 243}; 244 245static uint64_t intel_pt_lower_power_of_2(uint64_t x) 246{ 247 int i; 248 249 for (i = 0; x != 1; i++) 250 x >>= 1; 251 252 return x << i; 253} 254 255__printf(1, 2) 256static void p_log(const char *fmt, ...) 257{ 258 char buf[512]; 259 va_list args; 260 261 va_start(args, fmt); 262 vsnprintf(buf, sizeof(buf), fmt, args); 263 va_end(args); 264 265 fprintf(stderr, "%s\n", buf); 266 intel_pt_log("%s\n", buf); 267} 268 269static bool intel_pt_print_once(struct intel_pt_decoder *decoder, 270 enum intel_pt_p_once id) 271{ 272 uint64_t bit = 1ULL << id; 273 274 if (decoder->print_once & bit) 275 return false; 276 decoder->print_once |= bit; 277 return true; 278} 279 280static uint64_t intel_pt_cyc_threshold(uint64_t ctl) 281{ 282 if (!(ctl & INTEL_PT_CYC_ENABLE)) 283 return 0; 284 285 return (ctl & INTEL_PT_CYC_THRESHOLD) >> INTEL_PT_CYC_THRESHOLD_SHIFT; 286} 287 288static void intel_pt_setup_period(struct intel_pt_decoder *decoder) 289{ 290 if (decoder->period_type == INTEL_PT_PERIOD_TICKS) { 291 uint64_t period; 292 293 period = intel_pt_lower_power_of_2(decoder->period); 294 decoder->period_mask = ~(period - 1); 295 decoder->period_ticks = period; 296 } 297} 298 299static uint64_t multdiv(uint64_t t, uint32_t n, uint32_t d) 300{ 301 if (!d) 302 return 0; 303 return (t / d) * n + ((t % d) * n) / d; 304} 305 306struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params) 307{ 308 struct intel_pt_decoder *decoder; 309 310 if (!params->get_trace || !params->walk_insn) 311 return NULL; 312 313 decoder = zalloc(sizeof(struct intel_pt_decoder)); 314 if (!decoder) 315 return NULL; 316 317 decoder->get_trace = params->get_trace; 318 decoder->walk_insn = params->walk_insn; 319 decoder->pgd_ip = params->pgd_ip; 320 decoder->lookahead = params->lookahead; 321 decoder->findnew_vmcs_info = params->findnew_vmcs_info; 322 decoder->data = params->data; 323 decoder->return_compression = params->return_compression; 324 decoder->branch_enable = params->branch_enable; 325 decoder->hop = params->quick >= 1; 326 decoder->leap = params->quick >= 2; 327 decoder->vm_time_correlation = params->vm_time_correlation; 328 decoder->vm_tm_corr_dry_run = params->vm_tm_corr_dry_run; 329 decoder->first_timestamp = params->first_timestamp; 330 decoder->last_reliable_timestamp = params->first_timestamp; 331 decoder->max_loops = params->max_loops ? params->max_loops : INTEL_PT_MAX_LOOPS; 332 333 decoder->flags = params->flags; 334 335 decoder->ctl = params->ctl; 336 decoder->period = params->period; 337 decoder->period_type = params->period_type; 338 339 decoder->max_non_turbo_ratio = params->max_non_turbo_ratio; 340 decoder->max_non_turbo_ratio_fp = params->max_non_turbo_ratio; 341 342 decoder->cyc_threshold = intel_pt_cyc_threshold(decoder->ctl); 343 344 intel_pt_setup_period(decoder); 345 346 decoder->mtc_shift = params->mtc_period; 347 decoder->ctc_rem_mask = (1 << decoder->mtc_shift) - 1; 348 349 decoder->tsc_ctc_ratio_n = params->tsc_ctc_ratio_n; 350 decoder->tsc_ctc_ratio_d = params->tsc_ctc_ratio_d; 351 352 if (!decoder->tsc_ctc_ratio_n) 353 decoder->tsc_ctc_ratio_d = 0; 354 355 if (decoder->tsc_ctc_ratio_d) { 356 if (!(decoder->tsc_ctc_ratio_n % decoder->tsc_ctc_ratio_d)) 357 decoder->tsc_ctc_mult = decoder->tsc_ctc_ratio_n / 358 decoder->tsc_ctc_ratio_d; 359 } 360 361 /* 362 * A TSC packet can slip past MTC packets so that the timestamp appears 363 * to go backwards. One estimate is that can be up to about 40 CPU 364 * cycles, which is certainly less than 0x1000 TSC ticks, but accept 365 * slippage an order of magnitude more to be on the safe side. 366 */ 367 decoder->tsc_slip = 0x10000; 368 369 intel_pt_log("timestamp: mtc_shift %u\n", decoder->mtc_shift); 370 intel_pt_log("timestamp: tsc_ctc_ratio_n %u\n", decoder->tsc_ctc_ratio_n); 371 intel_pt_log("timestamp: tsc_ctc_ratio_d %u\n", decoder->tsc_ctc_ratio_d); 372 intel_pt_log("timestamp: tsc_ctc_mult %u\n", decoder->tsc_ctc_mult); 373 intel_pt_log("timestamp: tsc_slip %#x\n", decoder->tsc_slip); 374 375 if (decoder->hop) 376 intel_pt_log("Hop mode: decoding FUP and TIPs, but not TNT\n"); 377 378 return decoder; 379} 380 381void intel_pt_set_first_timestamp(struct intel_pt_decoder *decoder, 382 uint64_t first_timestamp) 383{ 384 decoder->first_timestamp = first_timestamp; 385} 386 387static void intel_pt_pop_blk(struct intel_pt_stack *stack) 388{ 389 struct intel_pt_blk *blk = stack->blk; 390 391 stack->blk = blk->prev; 392 if (!stack->spare) 393 stack->spare = blk; 394 else 395 free(blk); 396} 397 398static uint64_t intel_pt_pop(struct intel_pt_stack *stack) 399{ 400 if (!stack->pos) { 401 if (!stack->blk) 402 return 0; 403 intel_pt_pop_blk(stack); 404 if (!stack->blk) 405 return 0; 406 stack->pos = INTEL_PT_BLK_SIZE; 407 } 408 return stack->blk->ip[--stack->pos]; 409} 410 411static int intel_pt_alloc_blk(struct intel_pt_stack *stack) 412{ 413 struct intel_pt_blk *blk; 414 415 if (stack->spare) { 416 blk = stack->spare; 417 stack->spare = NULL; 418 } else { 419 blk = malloc(sizeof(struct intel_pt_blk)); 420 if (!blk) 421 return -ENOMEM; 422 } 423 424 blk->prev = stack->blk; 425 stack->blk = blk; 426 stack->pos = 0; 427 return 0; 428} 429 430static int intel_pt_push(struct intel_pt_stack *stack, uint64_t ip) 431{ 432 int err; 433 434 if (!stack->blk || stack->pos == INTEL_PT_BLK_SIZE) { 435 err = intel_pt_alloc_blk(stack); 436 if (err) 437 return err; 438 } 439 440 stack->blk->ip[stack->pos++] = ip; 441 return 0; 442} 443 444static void intel_pt_clear_stack(struct intel_pt_stack *stack) 445{ 446 while (stack->blk) 447 intel_pt_pop_blk(stack); 448 stack->pos = 0; 449} 450 451static void intel_pt_free_stack(struct intel_pt_stack *stack) 452{ 453 intel_pt_clear_stack(stack); 454 zfree(&stack->blk); 455 zfree(&stack->spare); 456} 457 458void intel_pt_decoder_free(struct intel_pt_decoder *decoder) 459{ 460 intel_pt_free_stack(&decoder->stack); 461 free(decoder); 462} 463 464static int intel_pt_ext_err(int code) 465{ 466 switch (code) { 467 case -ENOMEM: 468 return INTEL_PT_ERR_NOMEM; 469 case -ENOSYS: 470 return INTEL_PT_ERR_INTERN; 471 case -EBADMSG: 472 return INTEL_PT_ERR_BADPKT; 473 case -ENODATA: 474 return INTEL_PT_ERR_NODATA; 475 case -EILSEQ: 476 return INTEL_PT_ERR_NOINSN; 477 case -ENOENT: 478 return INTEL_PT_ERR_MISMAT; 479 case -EOVERFLOW: 480 return INTEL_PT_ERR_OVR; 481 case -ENOSPC: 482 return INTEL_PT_ERR_LOST; 483 case -ELOOP: 484 return INTEL_PT_ERR_NELOOP; 485 case -ECONNRESET: 486 return INTEL_PT_ERR_EPTW; 487 default: 488 return INTEL_PT_ERR_UNK; 489 } 490} 491 492static const char *intel_pt_err_msgs[] = { 493 [INTEL_PT_ERR_NOMEM] = "Memory allocation failed", 494 [INTEL_PT_ERR_INTERN] = "Internal error", 495 [INTEL_PT_ERR_BADPKT] = "Bad packet", 496 [INTEL_PT_ERR_NODATA] = "No more data", 497 [INTEL_PT_ERR_NOINSN] = "Failed to get instruction", 498 [INTEL_PT_ERR_MISMAT] = "Trace doesn't match instruction", 499 [INTEL_PT_ERR_OVR] = "Overflow packet", 500 [INTEL_PT_ERR_LOST] = "Lost trace data", 501 [INTEL_PT_ERR_UNK] = "Unknown error!", 502 [INTEL_PT_ERR_NELOOP] = "Never-ending loop (refer perf config intel-pt.max-loops)", 503 [INTEL_PT_ERR_EPTW] = "Broken emulated ptwrite", 504}; 505 506int intel_pt__strerror(int code, char *buf, size_t buflen) 507{ 508 if (code < 1 || code >= INTEL_PT_ERR_MAX) 509 code = INTEL_PT_ERR_UNK; 510 strlcpy(buf, intel_pt_err_msgs[code], buflen); 511 return 0; 512} 513 514static uint64_t intel_pt_calc_ip(const struct intel_pt_pkt *packet, 515 uint64_t last_ip) 516{ 517 uint64_t ip; 518 519 switch (packet->count) { 520 case 1: 521 ip = (last_ip & (uint64_t)0xffffffffffff0000ULL) | 522 packet->payload; 523 break; 524 case 2: 525 ip = (last_ip & (uint64_t)0xffffffff00000000ULL) | 526 packet->payload; 527 break; 528 case 3: 529 ip = packet->payload; 530 /* Sign-extend 6-byte ip */ 531 if (ip & (uint64_t)0x800000000000ULL) 532 ip |= (uint64_t)0xffff000000000000ULL; 533 break; 534 case 4: 535 ip = (last_ip & (uint64_t)0xffff000000000000ULL) | 536 packet->payload; 537 break; 538 case 6: 539 ip = packet->payload; 540 break; 541 default: 542 return 0; 543 } 544 545 return ip; 546} 547 548static inline void intel_pt_set_last_ip(struct intel_pt_decoder *decoder) 549{ 550 decoder->last_ip = intel_pt_calc_ip(&decoder->packet, decoder->last_ip); 551 decoder->have_last_ip = true; 552} 553 554static inline void intel_pt_set_ip(struct intel_pt_decoder *decoder) 555{ 556 intel_pt_set_last_ip(decoder); 557 decoder->ip = decoder->last_ip; 558} 559 560static void intel_pt_decoder_log_packet(struct intel_pt_decoder *decoder) 561{ 562 intel_pt_log_packet(&decoder->packet, decoder->pkt_len, decoder->pos, 563 decoder->buf); 564} 565 566static int intel_pt_bug(struct intel_pt_decoder *decoder) 567{ 568 intel_pt_log("ERROR: Internal error\n"); 569 decoder->pkt_state = INTEL_PT_STATE_NO_PSB; 570 return -ENOSYS; 571} 572 573static inline void intel_pt_clear_tx_flags(struct intel_pt_decoder *decoder) 574{ 575 decoder->tx_flags = 0; 576} 577 578static inline void intel_pt_update_in_tx(struct intel_pt_decoder *decoder) 579{ 580 decoder->tx_flags = decoder->packet.payload & INTEL_PT_IN_TX; 581} 582 583static inline void intel_pt_update_pip(struct intel_pt_decoder *decoder) 584{ 585 decoder->pip_payload = decoder->packet.payload; 586} 587 588static inline void intel_pt_update_nr(struct intel_pt_decoder *decoder) 589{ 590 decoder->next_nr = decoder->pip_payload & 1; 591} 592 593static inline void intel_pt_set_nr(struct intel_pt_decoder *decoder) 594{ 595 decoder->nr = decoder->pip_payload & 1; 596 decoder->next_nr = decoder->nr; 597} 598 599static inline void intel_pt_set_pip(struct intel_pt_decoder *decoder) 600{ 601 intel_pt_update_pip(decoder); 602 intel_pt_set_nr(decoder); 603} 604 605static int intel_pt_bad_packet(struct intel_pt_decoder *decoder) 606{ 607 intel_pt_clear_tx_flags(decoder); 608 decoder->have_tma = false; 609 decoder->pkt_len = 1; 610 decoder->pkt_step = 1; 611 intel_pt_decoder_log_packet(decoder); 612 if (decoder->pkt_state != INTEL_PT_STATE_NO_PSB) { 613 intel_pt_log("ERROR: Bad packet\n"); 614 decoder->pkt_state = INTEL_PT_STATE_ERR1; 615 } 616 return -EBADMSG; 617} 618 619static inline void intel_pt_update_sample_time(struct intel_pt_decoder *decoder) 620{ 621 decoder->sample_timestamp = decoder->timestamp; 622 decoder->sample_insn_cnt = decoder->timestamp_insn_cnt; 623 decoder->state.cycles = decoder->tot_cyc_cnt; 624} 625 626static void intel_pt_reposition(struct intel_pt_decoder *decoder) 627{ 628 decoder->ip = 0; 629 decoder->pkt_state = INTEL_PT_STATE_NO_PSB; 630 decoder->timestamp = 0; 631 decoder->have_tma = false; 632} 633 634static int intel_pt_get_data(struct intel_pt_decoder *decoder, bool reposition) 635{ 636 struct intel_pt_buffer buffer = { .buf = 0, }; 637 int ret; 638 639 decoder->pkt_step = 0; 640 641 intel_pt_log("Getting more data\n"); 642 ret = decoder->get_trace(&buffer, decoder->data); 643 if (ret) 644 return ret; 645 decoder->buf = buffer.buf; 646 decoder->len = buffer.len; 647 if (!decoder->len) { 648 intel_pt_log("No more data\n"); 649 return -ENODATA; 650 } 651 decoder->buf_timestamp = buffer.ref_timestamp; 652 if (!buffer.consecutive || reposition) { 653 intel_pt_reposition(decoder); 654 decoder->ref_timestamp = buffer.ref_timestamp; 655 decoder->state.trace_nr = buffer.trace_nr; 656 decoder->vm_tm_corr_same_buf = false; 657 intel_pt_log("Reference timestamp 0x%" PRIx64 "\n", 658 decoder->ref_timestamp); 659 return -ENOLINK; 660 } 661 662 return 0; 663} 664 665static int intel_pt_get_next_data(struct intel_pt_decoder *decoder, 666 bool reposition) 667{ 668 if (!decoder->next_buf) 669 return intel_pt_get_data(decoder, reposition); 670 671 decoder->buf = decoder->next_buf; 672 decoder->len = decoder->next_len; 673 decoder->next_buf = 0; 674 decoder->next_len = 0; 675 return 0; 676} 677 678static int intel_pt_get_split_packet(struct intel_pt_decoder *decoder) 679{ 680 unsigned char *buf = decoder->temp_buf; 681 size_t old_len, len, n; 682 int ret; 683 684 old_len = decoder->len; 685 len = decoder->len; 686 memcpy(buf, decoder->buf, len); 687 688 ret = intel_pt_get_data(decoder, false); 689 if (ret) { 690 decoder->pos += old_len; 691 return ret < 0 ? ret : -EINVAL; 692 } 693 694 n = INTEL_PT_PKT_MAX_SZ - len; 695 if (n > decoder->len) 696 n = decoder->len; 697 memcpy(buf + len, decoder->buf, n); 698 len += n; 699 700 decoder->prev_pkt_ctx = decoder->pkt_ctx; 701 ret = intel_pt_get_packet(buf, len, &decoder->packet, &decoder->pkt_ctx); 702 if (ret < (int)old_len) { 703 decoder->next_buf = decoder->buf; 704 decoder->next_len = decoder->len; 705 decoder->buf = buf; 706 decoder->len = old_len; 707 return intel_pt_bad_packet(decoder); 708 } 709 710 decoder->next_buf = decoder->buf + (ret - old_len); 711 decoder->next_len = decoder->len - (ret - old_len); 712 713 decoder->buf = buf; 714 decoder->len = ret; 715 716 return ret; 717} 718 719struct intel_pt_pkt_info { 720 struct intel_pt_decoder *decoder; 721 struct intel_pt_pkt packet; 722 uint64_t pos; 723 int pkt_len; 724 int last_packet_type; 725 void *data; 726}; 727 728typedef int (*intel_pt_pkt_cb_t)(struct intel_pt_pkt_info *pkt_info); 729 730/* Lookahead packets in current buffer */ 731static int intel_pt_pkt_lookahead(struct intel_pt_decoder *decoder, 732 intel_pt_pkt_cb_t cb, void *data) 733{ 734 struct intel_pt_pkt_info pkt_info; 735 const unsigned char *buf = decoder->buf; 736 enum intel_pt_pkt_ctx pkt_ctx = decoder->pkt_ctx; 737 size_t len = decoder->len; 738 int ret; 739 740 pkt_info.decoder = decoder; 741 pkt_info.pos = decoder->pos; 742 pkt_info.pkt_len = decoder->pkt_step; 743 pkt_info.last_packet_type = decoder->last_packet_type; 744 pkt_info.data = data; 745 746 while (1) { 747 do { 748 pkt_info.pos += pkt_info.pkt_len; 749 buf += pkt_info.pkt_len; 750 len -= pkt_info.pkt_len; 751 752 if (!len) 753 return INTEL_PT_NEED_MORE_BYTES; 754 755 ret = intel_pt_get_packet(buf, len, &pkt_info.packet, 756 &pkt_ctx); 757 if (!ret) 758 return INTEL_PT_NEED_MORE_BYTES; 759 if (ret < 0) 760 return ret; 761 762 pkt_info.pkt_len = ret; 763 } while (pkt_info.packet.type == INTEL_PT_PAD); 764 765 ret = cb(&pkt_info); 766 if (ret) 767 return 0; 768 769 pkt_info.last_packet_type = pkt_info.packet.type; 770 } 771} 772 773struct intel_pt_calc_cyc_to_tsc_info { 774 uint64_t cycle_cnt; 775 unsigned int cbr; 776 uint32_t last_mtc; 777 uint64_t ctc_timestamp; 778 uint64_t ctc_delta; 779 uint64_t tsc_timestamp; 780 uint64_t timestamp; 781 bool have_tma; 782 bool fixup_last_mtc; 783 bool from_mtc; 784 double cbr_cyc_to_tsc; 785}; 786 787/* 788 * MTC provides a 8-bit slice of CTC but the TMA packet only provides the lower 789 * 16 bits of CTC. If mtc_shift > 8 then some of the MTC bits are not in the CTC 790 * provided by the TMA packet. Fix-up the last_mtc calculated from the TMA 791 * packet by copying the missing bits from the current MTC assuming the least 792 * difference between the two, and that the current MTC comes after last_mtc. 793 */ 794static void intel_pt_fixup_last_mtc(uint32_t mtc, int mtc_shift, 795 uint32_t *last_mtc) 796{ 797 uint32_t first_missing_bit = 1U << (16 - mtc_shift); 798 uint32_t mask = ~(first_missing_bit - 1); 799 800 *last_mtc |= mtc & mask; 801 if (*last_mtc >= mtc) { 802 *last_mtc -= first_missing_bit; 803 *last_mtc &= 0xff; 804 } 805} 806 807static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_info *pkt_info) 808{ 809 struct intel_pt_decoder *decoder = pkt_info->decoder; 810 struct intel_pt_calc_cyc_to_tsc_info *data = pkt_info->data; 811 uint64_t timestamp; 812 double cyc_to_tsc; 813 unsigned int cbr; 814 uint32_t mtc, mtc_delta, ctc, fc, ctc_rem; 815 816 switch (pkt_info->packet.type) { 817 case INTEL_PT_TNT: 818 case INTEL_PT_TIP_PGE: 819 case INTEL_PT_TIP: 820 case INTEL_PT_FUP: 821 case INTEL_PT_PSB: 822 case INTEL_PT_PIP: 823 case INTEL_PT_MODE_EXEC: 824 case INTEL_PT_MODE_TSX: 825 case INTEL_PT_PSBEND: 826 case INTEL_PT_PAD: 827 case INTEL_PT_VMCS: 828 case INTEL_PT_MNT: 829 case INTEL_PT_PTWRITE: 830 case INTEL_PT_PTWRITE_IP: 831 case INTEL_PT_BBP: 832 case INTEL_PT_BIP: 833 case INTEL_PT_BEP: 834 case INTEL_PT_BEP_IP: 835 case INTEL_PT_CFE: 836 case INTEL_PT_CFE_IP: 837 case INTEL_PT_EVD: 838 return 0; 839 840 case INTEL_PT_MTC: 841 if (!data->have_tma) 842 return 0; 843 844 mtc = pkt_info->packet.payload; 845 if (decoder->mtc_shift > 8 && data->fixup_last_mtc) { 846 data->fixup_last_mtc = false; 847 intel_pt_fixup_last_mtc(mtc, decoder->mtc_shift, 848 &data->last_mtc); 849 } 850 if (mtc > data->last_mtc) 851 mtc_delta = mtc - data->last_mtc; 852 else 853 mtc_delta = mtc + 256 - data->last_mtc; 854 data->ctc_delta += mtc_delta << decoder->mtc_shift; 855 data->last_mtc = mtc; 856 857 if (decoder->tsc_ctc_mult) { 858 timestamp = data->ctc_timestamp + 859 data->ctc_delta * decoder->tsc_ctc_mult; 860 } else { 861 timestamp = data->ctc_timestamp + 862 multdiv(data->ctc_delta, 863 decoder->tsc_ctc_ratio_n, 864 decoder->tsc_ctc_ratio_d); 865 } 866 867 if (timestamp < data->timestamp) 868 return 1; 869 870 if (pkt_info->last_packet_type != INTEL_PT_CYC) { 871 data->timestamp = timestamp; 872 return 0; 873 } 874 875 break; 876 877 case INTEL_PT_TSC: 878 /* 879 * For now, do not support using TSC packets - refer 880 * intel_pt_calc_cyc_to_tsc(). 881 */ 882 if (data->from_mtc) 883 return 1; 884 timestamp = pkt_info->packet.payload | 885 (data->timestamp & (0xffULL << 56)); 886 if (data->from_mtc && timestamp < data->timestamp && 887 data->timestamp - timestamp < decoder->tsc_slip) 888 return 1; 889 if (timestamp < data->timestamp) 890 timestamp += (1ULL << 56); 891 if (pkt_info->last_packet_type != INTEL_PT_CYC) { 892 if (data->from_mtc) 893 return 1; 894 data->tsc_timestamp = timestamp; 895 data->timestamp = timestamp; 896 return 0; 897 } 898 break; 899 900 case INTEL_PT_TMA: 901 if (data->from_mtc) 902 return 1; 903 904 if (!decoder->tsc_ctc_ratio_d) 905 return 0; 906 907 ctc = pkt_info->packet.payload; 908 fc = pkt_info->packet.count; 909 ctc_rem = ctc & decoder->ctc_rem_mask; 910 911 data->last_mtc = (ctc >> decoder->mtc_shift) & 0xff; 912 913 data->ctc_timestamp = data->tsc_timestamp - fc; 914 if (decoder->tsc_ctc_mult) { 915 data->ctc_timestamp -= ctc_rem * decoder->tsc_ctc_mult; 916 } else { 917 data->ctc_timestamp -= 918 multdiv(ctc_rem, decoder->tsc_ctc_ratio_n, 919 decoder->tsc_ctc_ratio_d); 920 } 921 922 data->ctc_delta = 0; 923 data->have_tma = true; 924 data->fixup_last_mtc = true; 925 926 return 0; 927 928 case INTEL_PT_CYC: 929 data->cycle_cnt += pkt_info->packet.payload; 930 return 0; 931 932 case INTEL_PT_CBR: 933 cbr = pkt_info->packet.payload; 934 if (data->cbr && data->cbr != cbr) 935 return 1; 936 data->cbr = cbr; 937 data->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr; 938 return 0; 939 940 case INTEL_PT_TIP_PGD: 941 case INTEL_PT_TRACESTOP: 942 case INTEL_PT_EXSTOP: 943 case INTEL_PT_EXSTOP_IP: 944 case INTEL_PT_MWAIT: 945 case INTEL_PT_PWRE: 946 case INTEL_PT_PWRX: 947 case INTEL_PT_OVF: 948 case INTEL_PT_BAD: /* Does not happen */ 949 default: 950 return 1; 951 } 952 953 if (!data->cbr && decoder->cbr) { 954 data->cbr = decoder->cbr; 955 data->cbr_cyc_to_tsc = decoder->cbr_cyc_to_tsc; 956 } 957 958 if (!data->cycle_cnt) 959 return 1; 960 961 cyc_to_tsc = (double)(timestamp - decoder->timestamp) / data->cycle_cnt; 962 963 if (data->cbr && cyc_to_tsc > data->cbr_cyc_to_tsc && 964 cyc_to_tsc / data->cbr_cyc_to_tsc > 1.25) { 965 intel_pt_log("Timestamp: calculated %g TSC ticks per cycle too big (c.f. CBR-based value %g), pos " x64_fmt "\n", 966 cyc_to_tsc, data->cbr_cyc_to_tsc, pkt_info->pos); 967 return 1; 968 } 969 970 decoder->calc_cyc_to_tsc = cyc_to_tsc; 971 decoder->have_calc_cyc_to_tsc = true; 972 973 if (data->cbr) { 974 intel_pt_log("Timestamp: calculated %g TSC ticks per cycle c.f. CBR-based value %g, pos " x64_fmt "\n", 975 cyc_to_tsc, data->cbr_cyc_to_tsc, pkt_info->pos); 976 } else { 977 intel_pt_log("Timestamp: calculated %g TSC ticks per cycle c.f. unknown CBR-based value, pos " x64_fmt "\n", 978 cyc_to_tsc, pkt_info->pos); 979 } 980 981 return 1; 982} 983 984static void intel_pt_calc_cyc_to_tsc(struct intel_pt_decoder *decoder, 985 bool from_mtc) 986{ 987 struct intel_pt_calc_cyc_to_tsc_info data = { 988 .cycle_cnt = 0, 989 .cbr = 0, 990 .last_mtc = decoder->last_mtc, 991 .ctc_timestamp = decoder->ctc_timestamp, 992 .ctc_delta = decoder->ctc_delta, 993 .tsc_timestamp = decoder->tsc_timestamp, 994 .timestamp = decoder->timestamp, 995 .have_tma = decoder->have_tma, 996 .fixup_last_mtc = decoder->fixup_last_mtc, 997 .from_mtc = from_mtc, 998 .cbr_cyc_to_tsc = 0, 999 }; 1000 1001 /* 1002 * For now, do not support using TSC packets for at least the reasons: 1003 * 1) timing might have stopped 1004 * 2) TSC packets within PSB+ can slip against CYC packets 1005 */ 1006 if (!from_mtc) 1007 return; 1008 1009 intel_pt_pkt_lookahead(decoder, intel_pt_calc_cyc_cb, &data); 1010} 1011 1012static int intel_pt_get_next_packet(struct intel_pt_decoder *decoder) 1013{ 1014 int ret; 1015 1016 decoder->last_packet_type = decoder->packet.type; 1017 1018 do { 1019 decoder->pos += decoder->pkt_step; 1020 decoder->buf += decoder->pkt_step; 1021 decoder->len -= decoder->pkt_step; 1022 1023 if (!decoder->len) { 1024 ret = intel_pt_get_next_data(decoder, false); 1025 if (ret) 1026 return ret; 1027 } 1028 1029 decoder->prev_pkt_ctx = decoder->pkt_ctx; 1030 ret = intel_pt_get_packet(decoder->buf, decoder->len, 1031 &decoder->packet, &decoder->pkt_ctx); 1032 if (ret == INTEL_PT_NEED_MORE_BYTES && BITS_PER_LONG == 32 && 1033 decoder->len < INTEL_PT_PKT_MAX_SZ && !decoder->next_buf) { 1034 ret = intel_pt_get_split_packet(decoder); 1035 if (ret < 0) 1036 return ret; 1037 } 1038 if (ret <= 0) 1039 return intel_pt_bad_packet(decoder); 1040 1041 decoder->pkt_len = ret; 1042 decoder->pkt_step = ret; 1043 intel_pt_decoder_log_packet(decoder); 1044 } while (decoder->packet.type == INTEL_PT_PAD); 1045 1046 return 0; 1047} 1048 1049static uint64_t intel_pt_next_period(struct intel_pt_decoder *decoder) 1050{ 1051 uint64_t timestamp, masked_timestamp; 1052 1053 timestamp = decoder->timestamp + decoder->timestamp_insn_cnt; 1054 masked_timestamp = timestamp & decoder->period_mask; 1055 if (decoder->continuous_period) { 1056 if (masked_timestamp > decoder->last_masked_timestamp) 1057 return 1; 1058 } else { 1059 timestamp += 1; 1060 masked_timestamp = timestamp & decoder->period_mask; 1061 if (masked_timestamp > decoder->last_masked_timestamp) { 1062 decoder->last_masked_timestamp = masked_timestamp; 1063 decoder->continuous_period = true; 1064 } 1065 } 1066 1067 if (masked_timestamp < decoder->last_masked_timestamp) 1068 return decoder->period_ticks; 1069 1070 return decoder->period_ticks - (timestamp - masked_timestamp); 1071} 1072 1073static uint64_t intel_pt_next_sample(struct intel_pt_decoder *decoder) 1074{ 1075 switch (decoder->period_type) { 1076 case INTEL_PT_PERIOD_INSTRUCTIONS: 1077 return decoder->period - decoder->period_insn_cnt; 1078 case INTEL_PT_PERIOD_TICKS: 1079 return intel_pt_next_period(decoder); 1080 case INTEL_PT_PERIOD_NONE: 1081 case INTEL_PT_PERIOD_MTC: 1082 default: 1083 return 0; 1084 } 1085} 1086 1087static void intel_pt_sample_insn(struct intel_pt_decoder *decoder) 1088{ 1089 uint64_t timestamp, masked_timestamp; 1090 1091 switch (decoder->period_type) { 1092 case INTEL_PT_PERIOD_INSTRUCTIONS: 1093 decoder->period_insn_cnt = 0; 1094 break; 1095 case INTEL_PT_PERIOD_TICKS: 1096 timestamp = decoder->timestamp + decoder->timestamp_insn_cnt; 1097 masked_timestamp = timestamp & decoder->period_mask; 1098 if (masked_timestamp > decoder->last_masked_timestamp) 1099 decoder->last_masked_timestamp = masked_timestamp; 1100 else 1101 decoder->last_masked_timestamp += decoder->period_ticks; 1102 break; 1103 case INTEL_PT_PERIOD_NONE: 1104 case INTEL_PT_PERIOD_MTC: 1105 default: 1106 break; 1107 } 1108 1109 decoder->state.type |= INTEL_PT_INSTRUCTION; 1110} 1111 1112/* 1113 * Sample FUP instruction at the same time as reporting the FUP event, so the 1114 * instruction sample gets the same flags as the FUP event. 1115 */ 1116static void intel_pt_sample_fup_insn(struct intel_pt_decoder *decoder) 1117{ 1118 struct intel_pt_insn intel_pt_insn; 1119 uint64_t max_insn_cnt, insn_cnt = 0; 1120 int err; 1121 1122 decoder->state.insn_op = INTEL_PT_OP_OTHER; 1123 decoder->state.insn_len = 0; 1124 1125 if (!decoder->branch_enable || !decoder->pge || decoder->hop || 1126 decoder->ip != decoder->last_ip) 1127 return; 1128 1129 if (!decoder->mtc_insn) 1130 decoder->mtc_insn = true; 1131 1132 max_insn_cnt = intel_pt_next_sample(decoder); 1133 if (max_insn_cnt != 1) 1134 return; 1135 1136 err = decoder->walk_insn(&intel_pt_insn, &insn_cnt, &decoder->ip, 1137 0, max_insn_cnt, decoder->data); 1138 /* Ignore error, it will be reported next walk anyway */ 1139 if (err) 1140 return; 1141 1142 if (intel_pt_insn.branch != INTEL_PT_BR_NO_BRANCH) { 1143 intel_pt_log_at("ERROR: Unexpected branch at FUP instruction", decoder->ip); 1144 return; 1145 } 1146 1147 decoder->tot_insn_cnt += insn_cnt; 1148 decoder->timestamp_insn_cnt += insn_cnt; 1149 decoder->sample_insn_cnt += insn_cnt; 1150 decoder->period_insn_cnt += insn_cnt; 1151 1152 intel_pt_sample_insn(decoder); 1153 1154 decoder->state.type |= INTEL_PT_INSTRUCTION; 1155 decoder->ip += intel_pt_insn.length; 1156} 1157 1158static int intel_pt_walk_insn(struct intel_pt_decoder *decoder, 1159 struct intel_pt_insn *intel_pt_insn, uint64_t ip) 1160{ 1161 uint64_t max_insn_cnt, insn_cnt = 0; 1162 int err; 1163 1164 if (!decoder->mtc_insn) 1165 decoder->mtc_insn = true; 1166 1167 max_insn_cnt = intel_pt_next_sample(decoder); 1168 1169 err = decoder->walk_insn(intel_pt_insn, &insn_cnt, &decoder->ip, ip, 1170 max_insn_cnt, decoder->data); 1171 1172 decoder->tot_insn_cnt += insn_cnt; 1173 decoder->timestamp_insn_cnt += insn_cnt; 1174 decoder->sample_insn_cnt += insn_cnt; 1175 decoder->period_insn_cnt += insn_cnt; 1176 1177 if (err) { 1178 decoder->no_progress = 0; 1179 decoder->pkt_state = INTEL_PT_STATE_ERR2; 1180 intel_pt_log_at("ERROR: Failed to get instruction", 1181 decoder->ip); 1182 if (err == -ENOENT) 1183 return -ENOLINK; 1184 return -EILSEQ; 1185 } 1186 1187 if (ip && decoder->ip == ip) { 1188 err = -EAGAIN; 1189 goto out; 1190 } 1191 1192 if (max_insn_cnt && insn_cnt >= max_insn_cnt) 1193 intel_pt_sample_insn(decoder); 1194 1195 if (intel_pt_insn->branch == INTEL_PT_BR_NO_BRANCH) { 1196 decoder->state.type = INTEL_PT_INSTRUCTION; 1197 decoder->state.from_ip = decoder->ip; 1198 decoder->state.to_ip = 0; 1199 decoder->ip += intel_pt_insn->length; 1200 err = INTEL_PT_RETURN; 1201 goto out; 1202 } 1203 1204 if (intel_pt_insn->op == INTEL_PT_OP_CALL) { 1205 /* Zero-length calls are excluded */ 1206 if (intel_pt_insn->branch != INTEL_PT_BR_UNCONDITIONAL || 1207 intel_pt_insn->rel) { 1208 err = intel_pt_push(&decoder->stack, decoder->ip + 1209 intel_pt_insn->length); 1210 if (err) 1211 goto out; 1212 } 1213 } else if (intel_pt_insn->op == INTEL_PT_OP_RET) { 1214 decoder->ret_addr = intel_pt_pop(&decoder->stack); 1215 } 1216 1217 if (intel_pt_insn->branch == INTEL_PT_BR_UNCONDITIONAL) { 1218 int cnt = decoder->no_progress++; 1219 1220 decoder->state.from_ip = decoder->ip; 1221 decoder->ip += intel_pt_insn->length + 1222 intel_pt_insn->rel; 1223 decoder->state.to_ip = decoder->ip; 1224 err = INTEL_PT_RETURN; 1225 1226 /* 1227 * Check for being stuck in a loop. This can happen if a 1228 * decoder error results in the decoder erroneously setting the 1229 * ip to an address that is itself in an infinite loop that 1230 * consumes no packets. When that happens, there must be an 1231 * unconditional branch. 1232 */ 1233 if (cnt) { 1234 if (cnt == 1) { 1235 decoder->stuck_ip = decoder->state.to_ip; 1236 decoder->stuck_ip_prd = 1; 1237 decoder->stuck_ip_cnt = 1; 1238 } else if (cnt > decoder->max_loops || 1239 decoder->state.to_ip == decoder->stuck_ip) { 1240 intel_pt_log_at("ERROR: Never-ending loop", 1241 decoder->state.to_ip); 1242 decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC; 1243 err = -ELOOP; 1244 goto out; 1245 } else if (!--decoder->stuck_ip_cnt) { 1246 decoder->stuck_ip_prd += 1; 1247 decoder->stuck_ip_cnt = decoder->stuck_ip_prd; 1248 decoder->stuck_ip = decoder->state.to_ip; 1249 } 1250 } 1251 goto out_no_progress; 1252 } 1253out: 1254 decoder->no_progress = 0; 1255out_no_progress: 1256 decoder->state.insn_op = intel_pt_insn->op; 1257 decoder->state.insn_len = intel_pt_insn->length; 1258 memcpy(decoder->state.insn, intel_pt_insn->buf, 1259 INTEL_PT_INSN_BUF_SZ); 1260 1261 if (decoder->tx_flags & INTEL_PT_IN_TX) 1262 decoder->state.flags |= INTEL_PT_IN_TX; 1263 1264 return err; 1265} 1266 1267static void intel_pt_mode_exec_status(struct intel_pt_decoder *decoder) 1268{ 1269 bool iflag = decoder->packet.count & INTEL_PT_IFLAG; 1270 1271 decoder->exec_mode = decoder->packet.payload; 1272 decoder->iflag = iflag; 1273 decoder->next_iflag = iflag; 1274 decoder->state.from_iflag = iflag; 1275 decoder->state.to_iflag = iflag; 1276} 1277 1278static void intel_pt_mode_exec(struct intel_pt_decoder *decoder) 1279{ 1280 bool iflag = decoder->packet.count & INTEL_PT_IFLAG; 1281 1282 decoder->exec_mode = decoder->packet.payload; 1283 decoder->next_iflag = iflag; 1284} 1285 1286static void intel_pt_sample_iflag(struct intel_pt_decoder *decoder) 1287{ 1288 decoder->state.type |= INTEL_PT_IFLAG_CHG; 1289 decoder->state.from_iflag = decoder->iflag; 1290 decoder->state.to_iflag = decoder->next_iflag; 1291 decoder->iflag = decoder->next_iflag; 1292} 1293 1294static void intel_pt_sample_iflag_chg(struct intel_pt_decoder *decoder) 1295{ 1296 if (decoder->iflag != decoder->next_iflag) 1297 intel_pt_sample_iflag(decoder); 1298} 1299 1300static void intel_pt_clear_fup_event(struct intel_pt_decoder *decoder) 1301{ 1302 decoder->set_fup_tx_flags = false; 1303 decoder->set_fup_ptw = false; 1304 decoder->set_fup_mwait = false; 1305 decoder->set_fup_pwre = false; 1306 decoder->set_fup_exstop = false; 1307 decoder->set_fup_bep = false; 1308 decoder->set_fup_cfe_ip = false; 1309 decoder->set_fup_cfe = false; 1310 decoder->evd_cnt = 0; 1311 decoder->set_fup_mode_exec = false; 1312 decoder->iflag = decoder->next_iflag; 1313} 1314 1315static bool intel_pt_fup_event(struct intel_pt_decoder *decoder, bool no_tip) 1316{ 1317 enum intel_pt_sample_type type = decoder->state.type; 1318 bool sample_fup_insn = false; 1319 bool ret = false; 1320 1321 decoder->state.type &= ~INTEL_PT_BRANCH; 1322 1323 if (decoder->set_fup_cfe_ip || decoder->set_fup_cfe) { 1324 bool ip = decoder->set_fup_cfe_ip; 1325 1326 decoder->set_fup_cfe_ip = false; 1327 decoder->set_fup_cfe = false; 1328 decoder->state.type |= INTEL_PT_EVT; 1329 if (!ip && decoder->pge) 1330 decoder->state.type |= INTEL_PT_BRANCH; 1331 decoder->state.cfe_type = decoder->fup_cfe_pkt.count; 1332 decoder->state.cfe_vector = decoder->fup_cfe_pkt.payload; 1333 decoder->state.evd_cnt = decoder->evd_cnt; 1334 decoder->state.evd = decoder->evd; 1335 decoder->evd_cnt = 0; 1336 if (ip || decoder->pge) 1337 decoder->state.flags |= INTEL_PT_FUP_IP; 1338 ret = true; 1339 } 1340 if (decoder->set_fup_mode_exec) { 1341 decoder->set_fup_mode_exec = false; 1342 intel_pt_sample_iflag(decoder); 1343 sample_fup_insn = no_tip; 1344 ret = true; 1345 } 1346 if (decoder->set_fup_tx_flags) { 1347 decoder->set_fup_tx_flags = false; 1348 decoder->tx_flags = decoder->fup_tx_flags; 1349 decoder->state.type |= INTEL_PT_TRANSACTION; 1350 if (decoder->fup_tx_flags & INTEL_PT_ABORT_TX) 1351 decoder->state.type |= INTEL_PT_BRANCH; 1352 decoder->state.flags = decoder->fup_tx_flags; 1353 ret = true; 1354 } 1355 if (decoder->set_fup_ptw) { 1356 decoder->set_fup_ptw = false; 1357 decoder->state.type |= INTEL_PT_PTW; 1358 decoder->state.flags |= INTEL_PT_FUP_IP; 1359 decoder->state.ptw_payload = decoder->fup_ptw_payload; 1360 ret = true; 1361 } 1362 if (decoder->set_fup_mwait) { 1363 decoder->set_fup_mwait = false; 1364 decoder->state.type |= INTEL_PT_MWAIT_OP; 1365 decoder->state.mwait_payload = decoder->fup_mwait_payload; 1366 ret = true; 1367 } 1368 if (decoder->set_fup_pwre) { 1369 decoder->set_fup_pwre = false; 1370 decoder->state.type |= INTEL_PT_PWR_ENTRY; 1371 decoder->state.pwre_payload = decoder->fup_pwre_payload; 1372 ret = true; 1373 } 1374 if (decoder->set_fup_exstop) { 1375 decoder->set_fup_exstop = false; 1376 decoder->state.type |= INTEL_PT_EX_STOP; 1377 decoder->state.flags |= INTEL_PT_FUP_IP; 1378 ret = true; 1379 } 1380 if (decoder->set_fup_bep) { 1381 decoder->set_fup_bep = false; 1382 decoder->state.type |= INTEL_PT_BLK_ITEMS; 1383 ret = true; 1384 } 1385 if (decoder->overflow) { 1386 decoder->overflow = false; 1387 if (!ret && !decoder->pge) { 1388 if (decoder->hop) { 1389 decoder->state.type = 0; 1390 decoder->pkt_state = INTEL_PT_STATE_RESAMPLE; 1391 } 1392 decoder->pge = true; 1393 decoder->state.type |= INTEL_PT_BRANCH | INTEL_PT_TRACE_BEGIN; 1394 decoder->state.from_ip = 0; 1395 decoder->state.to_ip = decoder->ip; 1396 return true; 1397 } 1398 } 1399 if (ret) { 1400 decoder->state.from_ip = decoder->ip; 1401 decoder->state.to_ip = 0; 1402 if (sample_fup_insn) 1403 intel_pt_sample_fup_insn(decoder); 1404 } else { 1405 decoder->state.type = type; 1406 } 1407 return ret; 1408} 1409 1410static inline bool intel_pt_fup_with_nlip(struct intel_pt_decoder *decoder, 1411 struct intel_pt_insn *intel_pt_insn, 1412 uint64_t ip, int err) 1413{ 1414 return decoder->flags & INTEL_PT_FUP_WITH_NLIP && !err && 1415 intel_pt_insn->branch == INTEL_PT_BR_INDIRECT && 1416 ip == decoder->ip + intel_pt_insn->length; 1417} 1418 1419static int intel_pt_walk_fup(struct intel_pt_decoder *decoder) 1420{ 1421 struct intel_pt_insn intel_pt_insn; 1422 uint64_t ip; 1423 int err; 1424 1425 ip = decoder->last_ip; 1426 1427 while (1) { 1428 err = intel_pt_walk_insn(decoder, &intel_pt_insn, ip); 1429 if (err == INTEL_PT_RETURN) 1430 return 0; 1431 if (err == -EAGAIN || 1432 intel_pt_fup_with_nlip(decoder, &intel_pt_insn, ip, err)) { 1433 bool no_tip = decoder->pkt_state != INTEL_PT_STATE_FUP; 1434 1435 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1436 if (intel_pt_fup_event(decoder, no_tip) && no_tip) 1437 return 0; 1438 return -EAGAIN; 1439 } 1440 decoder->set_fup_tx_flags = false; 1441 if (err) 1442 return err; 1443 1444 if (intel_pt_insn.branch == INTEL_PT_BR_INDIRECT) { 1445 intel_pt_log_at("ERROR: Unexpected indirect branch", 1446 decoder->ip); 1447 decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC; 1448 return -ENOENT; 1449 } 1450 1451 if (intel_pt_insn.branch == INTEL_PT_BR_CONDITIONAL) { 1452 intel_pt_log_at("ERROR: Unexpected conditional branch", 1453 decoder->ip); 1454 decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC; 1455 return -ENOENT; 1456 } 1457 1458 intel_pt_bug(decoder); 1459 } 1460} 1461 1462static int intel_pt_walk_tip(struct intel_pt_decoder *decoder) 1463{ 1464 struct intel_pt_insn intel_pt_insn; 1465 int err; 1466 1467 err = intel_pt_walk_insn(decoder, &intel_pt_insn, 0); 1468 if (err == INTEL_PT_RETURN && 1469 decoder->pgd_ip && 1470 decoder->pkt_state == INTEL_PT_STATE_TIP_PGD && 1471 (decoder->state.type & INTEL_PT_BRANCH) && 1472 decoder->pgd_ip(decoder->state.to_ip, decoder->data)) { 1473 /* Unconditional branch leaving filter region */ 1474 decoder->no_progress = 0; 1475 decoder->pge = false; 1476 decoder->continuous_period = false; 1477 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1478 decoder->state.type |= INTEL_PT_TRACE_END; 1479 intel_pt_update_nr(decoder); 1480 return 0; 1481 } 1482 if (err == INTEL_PT_RETURN) 1483 return 0; 1484 if (err) 1485 return err; 1486 1487 intel_pt_update_nr(decoder); 1488 intel_pt_sample_iflag_chg(decoder); 1489 1490 if (intel_pt_insn.branch == INTEL_PT_BR_INDIRECT) { 1491 if (decoder->pkt_state == INTEL_PT_STATE_TIP_PGD) { 1492 decoder->pge = false; 1493 decoder->continuous_period = false; 1494 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1495 decoder->state.from_ip = decoder->ip; 1496 if (decoder->packet.count == 0) { 1497 decoder->state.to_ip = 0; 1498 } else { 1499 decoder->state.to_ip = decoder->last_ip; 1500 decoder->ip = decoder->last_ip; 1501 } 1502 decoder->state.type |= INTEL_PT_TRACE_END; 1503 } else { 1504 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1505 decoder->state.from_ip = decoder->ip; 1506 if (decoder->packet.count == 0) { 1507 decoder->state.to_ip = 0; 1508 } else { 1509 decoder->state.to_ip = decoder->last_ip; 1510 decoder->ip = decoder->last_ip; 1511 } 1512 } 1513 return 0; 1514 } 1515 1516 if (intel_pt_insn.branch == INTEL_PT_BR_CONDITIONAL) { 1517 uint64_t to_ip = decoder->ip + intel_pt_insn.length + 1518 intel_pt_insn.rel; 1519 1520 if (decoder->pgd_ip && 1521 decoder->pkt_state == INTEL_PT_STATE_TIP_PGD && 1522 decoder->pgd_ip(to_ip, decoder->data)) { 1523 /* Conditional branch leaving filter region */ 1524 decoder->pge = false; 1525 decoder->continuous_period = false; 1526 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1527 decoder->ip = to_ip; 1528 decoder->state.from_ip = decoder->ip; 1529 decoder->state.to_ip = to_ip; 1530 decoder->state.type |= INTEL_PT_TRACE_END; 1531 return 0; 1532 } 1533 intel_pt_log_at("ERROR: Conditional branch when expecting indirect branch", 1534 decoder->ip); 1535 decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC; 1536 return -ENOENT; 1537 } 1538 1539 return intel_pt_bug(decoder); 1540} 1541 1542struct eptw_data { 1543 int bit_countdown; 1544 uint64_t payload; 1545}; 1546 1547static int intel_pt_eptw_lookahead_cb(struct intel_pt_pkt_info *pkt_info) 1548{ 1549 struct eptw_data *data = pkt_info->data; 1550 int nr_bits; 1551 1552 switch (pkt_info->packet.type) { 1553 case INTEL_PT_PAD: 1554 case INTEL_PT_MNT: 1555 case INTEL_PT_MODE_EXEC: 1556 case INTEL_PT_MODE_TSX: 1557 case INTEL_PT_MTC: 1558 case INTEL_PT_FUP: 1559 case INTEL_PT_CYC: 1560 case INTEL_PT_CBR: 1561 case INTEL_PT_TSC: 1562 case INTEL_PT_TMA: 1563 case INTEL_PT_PIP: 1564 case INTEL_PT_VMCS: 1565 case INTEL_PT_PSB: 1566 case INTEL_PT_PSBEND: 1567 case INTEL_PT_PTWRITE: 1568 case INTEL_PT_PTWRITE_IP: 1569 case INTEL_PT_EXSTOP: 1570 case INTEL_PT_EXSTOP_IP: 1571 case INTEL_PT_MWAIT: 1572 case INTEL_PT_PWRE: 1573 case INTEL_PT_PWRX: 1574 case INTEL_PT_BBP: 1575 case INTEL_PT_BIP: 1576 case INTEL_PT_BEP: 1577 case INTEL_PT_BEP_IP: 1578 case INTEL_PT_CFE: 1579 case INTEL_PT_CFE_IP: 1580 case INTEL_PT_EVD: 1581 break; 1582 1583 case INTEL_PT_TNT: 1584 nr_bits = data->bit_countdown; 1585 if (nr_bits > pkt_info->packet.count) 1586 nr_bits = pkt_info->packet.count; 1587 data->payload <<= nr_bits; 1588 data->payload |= pkt_info->packet.payload >> (64 - nr_bits); 1589 data->bit_countdown -= nr_bits; 1590 return !data->bit_countdown; 1591 1592 case INTEL_PT_TIP_PGE: 1593 case INTEL_PT_TIP_PGD: 1594 case INTEL_PT_TIP: 1595 case INTEL_PT_BAD: 1596 case INTEL_PT_OVF: 1597 case INTEL_PT_TRACESTOP: 1598 default: 1599 return 1; 1600 } 1601 1602 return 0; 1603} 1604 1605static int intel_pt_emulated_ptwrite(struct intel_pt_decoder *decoder) 1606{ 1607 int n = 64 - decoder->tnt.count; 1608 struct eptw_data data = { 1609 .bit_countdown = n, 1610 .payload = decoder->tnt.payload >> n, 1611 }; 1612 1613 decoder->emulated_ptwrite = false; 1614 intel_pt_log("Emulated ptwrite detected\n"); 1615 1616 intel_pt_pkt_lookahead(decoder, intel_pt_eptw_lookahead_cb, &data); 1617 if (data.bit_countdown) 1618 return -ECONNRESET; 1619 1620 decoder->state.type = INTEL_PT_PTW; 1621 decoder->state.from_ip = decoder->ip; 1622 decoder->state.to_ip = 0; 1623 decoder->state.ptw_payload = data.payload; 1624 return 0; 1625} 1626 1627static int intel_pt_walk_tnt(struct intel_pt_decoder *decoder) 1628{ 1629 struct intel_pt_insn intel_pt_insn; 1630 int err; 1631 1632 while (1) { 1633 if (decoder->emulated_ptwrite) 1634 return intel_pt_emulated_ptwrite(decoder); 1635 err = intel_pt_walk_insn(decoder, &intel_pt_insn, 0); 1636 if (err == INTEL_PT_RETURN) { 1637 decoder->emulated_ptwrite = intel_pt_insn.emulated_ptwrite; 1638 return 0; 1639 } 1640 if (err) { 1641 decoder->emulated_ptwrite = false; 1642 return err; 1643 } 1644 1645 if (intel_pt_insn.op == INTEL_PT_OP_RET) { 1646 if (!decoder->return_compression) { 1647 intel_pt_log_at("ERROR: RET when expecting conditional branch", 1648 decoder->ip); 1649 decoder->pkt_state = INTEL_PT_STATE_ERR3; 1650 return -ENOENT; 1651 } 1652 if (!decoder->ret_addr) { 1653 intel_pt_log_at("ERROR: Bad RET compression (stack empty)", 1654 decoder->ip); 1655 decoder->pkt_state = INTEL_PT_STATE_ERR3; 1656 return -ENOENT; 1657 } 1658 if (!(decoder->tnt.payload & BIT63)) { 1659 intel_pt_log_at("ERROR: Bad RET compression (TNT=N)", 1660 decoder->ip); 1661 decoder->pkt_state = INTEL_PT_STATE_ERR3; 1662 return -ENOENT; 1663 } 1664 decoder->tnt.count -= 1; 1665 if (decoder->tnt.count) 1666 decoder->pkt_state = INTEL_PT_STATE_TNT_CONT; 1667 else 1668 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1669 decoder->tnt.payload <<= 1; 1670 decoder->state.from_ip = decoder->ip; 1671 decoder->ip = decoder->ret_addr; 1672 decoder->state.to_ip = decoder->ip; 1673 return 0; 1674 } 1675 1676 if (intel_pt_insn.branch == INTEL_PT_BR_INDIRECT) { 1677 /* Handle deferred TIPs */ 1678 err = intel_pt_get_next_packet(decoder); 1679 if (err) 1680 return err; 1681 if (decoder->packet.type != INTEL_PT_TIP || 1682 decoder->packet.count == 0) { 1683 intel_pt_log_at("ERROR: Missing deferred TIP for indirect branch", 1684 decoder->ip); 1685 decoder->pkt_state = INTEL_PT_STATE_ERR3; 1686 decoder->pkt_step = 0; 1687 return -ENOENT; 1688 } 1689 intel_pt_set_last_ip(decoder); 1690 decoder->state.from_ip = decoder->ip; 1691 decoder->state.to_ip = decoder->last_ip; 1692 decoder->ip = decoder->last_ip; 1693 intel_pt_update_nr(decoder); 1694 intel_pt_sample_iflag_chg(decoder); 1695 return 0; 1696 } 1697 1698 if (intel_pt_insn.branch == INTEL_PT_BR_CONDITIONAL) { 1699 decoder->tnt.count -= 1; 1700 if (decoder->tnt.count) 1701 decoder->pkt_state = INTEL_PT_STATE_TNT_CONT; 1702 else 1703 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1704 if (decoder->tnt.payload & BIT63) { 1705 decoder->tnt.payload <<= 1; 1706 decoder->state.from_ip = decoder->ip; 1707 decoder->ip += intel_pt_insn.length + 1708 intel_pt_insn.rel; 1709 decoder->state.to_ip = decoder->ip; 1710 return 0; 1711 } 1712 /* Instruction sample for a non-taken branch */ 1713 if (decoder->state.type & INTEL_PT_INSTRUCTION) { 1714 decoder->tnt.payload <<= 1; 1715 decoder->state.type = INTEL_PT_INSTRUCTION; 1716 decoder->state.from_ip = decoder->ip; 1717 decoder->state.to_ip = 0; 1718 decoder->ip += intel_pt_insn.length; 1719 return 0; 1720 } 1721 decoder->sample_cyc = false; 1722 decoder->ip += intel_pt_insn.length; 1723 if (!decoder->tnt.count) { 1724 intel_pt_update_sample_time(decoder); 1725 return -EAGAIN; 1726 } 1727 decoder->tnt.payload <<= 1; 1728 continue; 1729 } 1730 1731 return intel_pt_bug(decoder); 1732 } 1733} 1734 1735static int intel_pt_mode_tsx(struct intel_pt_decoder *decoder, bool *no_tip) 1736{ 1737 unsigned int fup_tx_flags; 1738 int err; 1739 1740 fup_tx_flags = decoder->packet.payload & 1741 (INTEL_PT_IN_TX | INTEL_PT_ABORT_TX); 1742 err = intel_pt_get_next_packet(decoder); 1743 if (err) 1744 return err; 1745 if (decoder->packet.type == INTEL_PT_FUP) { 1746 decoder->fup_tx_flags = fup_tx_flags; 1747 decoder->set_fup_tx_flags = true; 1748 if (!(decoder->fup_tx_flags & INTEL_PT_ABORT_TX)) 1749 *no_tip = true; 1750 } else { 1751 intel_pt_log_at("ERROR: Missing FUP after MODE.TSX", 1752 decoder->pos); 1753 intel_pt_update_in_tx(decoder); 1754 } 1755 return 0; 1756} 1757 1758static int intel_pt_evd(struct intel_pt_decoder *decoder) 1759{ 1760 if (decoder->evd_cnt >= INTEL_PT_MAX_EVDS) { 1761 intel_pt_log_at("ERROR: Too many EVD packets", decoder->pos); 1762 return -ENOSYS; 1763 } 1764 decoder->evd[decoder->evd_cnt++] = (struct intel_pt_evd){ 1765 .type = decoder->packet.count, 1766 .payload = decoder->packet.payload, 1767 }; 1768 return 0; 1769} 1770 1771static uint64_t intel_pt_8b_tsc(uint64_t timestamp, uint64_t ref_timestamp) 1772{ 1773 timestamp |= (ref_timestamp & (0xffULL << 56)); 1774 1775 if (timestamp < ref_timestamp) { 1776 if (ref_timestamp - timestamp > (1ULL << 55)) 1777 timestamp += (1ULL << 56); 1778 } else { 1779 if (timestamp - ref_timestamp > (1ULL << 55)) 1780 timestamp -= (1ULL << 56); 1781 } 1782 1783 return timestamp; 1784} 1785 1786/* For use only when decoder->vm_time_correlation is true */ 1787static bool intel_pt_time_in_range(struct intel_pt_decoder *decoder, 1788 uint64_t timestamp) 1789{ 1790 uint64_t max_timestamp = decoder->buf_timestamp; 1791 1792 if (!max_timestamp) { 1793 max_timestamp = decoder->last_reliable_timestamp + 1794 0x400000000ULL; 1795 } 1796 return timestamp >= decoder->last_reliable_timestamp && 1797 timestamp < decoder->buf_timestamp; 1798} 1799 1800static void intel_pt_calc_tsc_timestamp(struct intel_pt_decoder *decoder) 1801{ 1802 uint64_t timestamp; 1803 bool bad = false; 1804 1805 decoder->have_tma = false; 1806 1807 if (decoder->ref_timestamp) { 1808 timestamp = intel_pt_8b_tsc(decoder->packet.payload, 1809 decoder->ref_timestamp); 1810 decoder->tsc_timestamp = timestamp; 1811 decoder->timestamp = timestamp; 1812 decoder->ref_timestamp = 0; 1813 decoder->timestamp_insn_cnt = 0; 1814 } else if (decoder->timestamp) { 1815 timestamp = decoder->packet.payload | 1816 (decoder->timestamp & (0xffULL << 56)); 1817 decoder->tsc_timestamp = timestamp; 1818 if (timestamp < decoder->timestamp && 1819 decoder->timestamp - timestamp < decoder->tsc_slip) { 1820 intel_pt_log_to("Suppressing backwards timestamp", 1821 timestamp); 1822 timestamp = decoder->timestamp; 1823 } 1824 if (timestamp < decoder->timestamp) { 1825 if (!decoder->buf_timestamp || 1826 (timestamp + (1ULL << 56) < decoder->buf_timestamp)) { 1827 intel_pt_log_to("Wraparound timestamp", timestamp); 1828 timestamp += (1ULL << 56); 1829 decoder->tsc_timestamp = timestamp; 1830 } else { 1831 intel_pt_log_to("Suppressing bad timestamp", timestamp); 1832 timestamp = decoder->timestamp; 1833 bad = true; 1834 } 1835 } 1836 if (decoder->vm_time_correlation && 1837 (bad || !intel_pt_time_in_range(decoder, timestamp)) && 1838 intel_pt_print_once(decoder, INTEL_PT_PRT_ONCE_ERANGE)) 1839 p_log("Timestamp out of range"); 1840 decoder->timestamp = timestamp; 1841 decoder->timestamp_insn_cnt = 0; 1842 } 1843 1844 if (decoder->last_packet_type == INTEL_PT_CYC) { 1845 decoder->cyc_ref_timestamp = decoder->timestamp; 1846 decoder->cycle_cnt = 0; 1847 decoder->have_calc_cyc_to_tsc = false; 1848 intel_pt_calc_cyc_to_tsc(decoder, false); 1849 } 1850 1851 intel_pt_log_to("Setting timestamp", decoder->timestamp); 1852} 1853 1854static int intel_pt_overflow(struct intel_pt_decoder *decoder) 1855{ 1856 intel_pt_log("ERROR: Buffer overflow\n"); 1857 intel_pt_clear_tx_flags(decoder); 1858 intel_pt_set_nr(decoder); 1859 decoder->timestamp_insn_cnt = 0; 1860 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 1861 decoder->state.from_ip = decoder->ip; 1862 decoder->ip = 0; 1863 decoder->pge = false; 1864 intel_pt_clear_fup_event(decoder); 1865 decoder->overflow = true; 1866 return -EOVERFLOW; 1867} 1868 1869static inline void intel_pt_mtc_cyc_cnt_pge(struct intel_pt_decoder *decoder) 1870{ 1871 if (decoder->have_cyc) 1872 return; 1873 1874 decoder->cyc_cnt_timestamp = decoder->timestamp; 1875 decoder->base_cyc_cnt = decoder->tot_cyc_cnt; 1876} 1877 1878static inline void intel_pt_mtc_cyc_cnt_cbr(struct intel_pt_decoder *decoder) 1879{ 1880 decoder->tsc_to_cyc = decoder->cbr / decoder->max_non_turbo_ratio_fp; 1881 1882 if (decoder->pge) 1883 intel_pt_mtc_cyc_cnt_pge(decoder); 1884} 1885 1886static inline void intel_pt_mtc_cyc_cnt_upd(struct intel_pt_decoder *decoder) 1887{ 1888 uint64_t tot_cyc_cnt, tsc_delta; 1889 1890 if (decoder->have_cyc) 1891 return; 1892 1893 decoder->sample_cyc = true; 1894 1895 if (!decoder->pge || decoder->timestamp <= decoder->cyc_cnt_timestamp) 1896 return; 1897 1898 tsc_delta = decoder->timestamp - decoder->cyc_cnt_timestamp; 1899 tot_cyc_cnt = tsc_delta * decoder->tsc_to_cyc + decoder->base_cyc_cnt; 1900 1901 if (tot_cyc_cnt > decoder->tot_cyc_cnt) 1902 decoder->tot_cyc_cnt = tot_cyc_cnt; 1903} 1904 1905static void intel_pt_calc_tma(struct intel_pt_decoder *decoder) 1906{ 1907 uint32_t ctc = decoder->packet.payload; 1908 uint32_t fc = decoder->packet.count; 1909 uint32_t ctc_rem = ctc & decoder->ctc_rem_mask; 1910 1911 if (!decoder->tsc_ctc_ratio_d) 1912 return; 1913 1914 if (decoder->pge && !decoder->in_psb) 1915 intel_pt_mtc_cyc_cnt_pge(decoder); 1916 else 1917 intel_pt_mtc_cyc_cnt_upd(decoder); 1918 1919 decoder->last_mtc = (ctc >> decoder->mtc_shift) & 0xff; 1920 decoder->last_ctc = ctc - ctc_rem; 1921 decoder->ctc_timestamp = decoder->tsc_timestamp - fc; 1922 if (decoder->tsc_ctc_mult) { 1923 decoder->ctc_timestamp -= ctc_rem * decoder->tsc_ctc_mult; 1924 } else { 1925 decoder->ctc_timestamp -= multdiv(ctc_rem, 1926 decoder->tsc_ctc_ratio_n, 1927 decoder->tsc_ctc_ratio_d); 1928 } 1929 decoder->ctc_delta = 0; 1930 decoder->have_tma = true; 1931 decoder->fixup_last_mtc = true; 1932 intel_pt_log("CTC timestamp " x64_fmt " last MTC %#x CTC rem %#x\n", 1933 decoder->ctc_timestamp, decoder->last_mtc, ctc_rem); 1934} 1935 1936static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder) 1937{ 1938 uint64_t timestamp; 1939 uint32_t mtc, mtc_delta; 1940 1941 if (!decoder->have_tma) 1942 return; 1943 1944 mtc = decoder->packet.payload; 1945 1946 if (decoder->mtc_shift > 8 && decoder->fixup_last_mtc) { 1947 decoder->fixup_last_mtc = false; 1948 intel_pt_fixup_last_mtc(mtc, decoder->mtc_shift, 1949 &decoder->last_mtc); 1950 } 1951 1952 if (mtc > decoder->last_mtc) 1953 mtc_delta = mtc - decoder->last_mtc; 1954 else 1955 mtc_delta = mtc + 256 - decoder->last_mtc; 1956 1957 decoder->ctc_delta += mtc_delta << decoder->mtc_shift; 1958 1959 if (decoder->tsc_ctc_mult) { 1960 timestamp = decoder->ctc_timestamp + 1961 decoder->ctc_delta * decoder->tsc_ctc_mult; 1962 } else { 1963 timestamp = decoder->ctc_timestamp + 1964 multdiv(decoder->ctc_delta, 1965 decoder->tsc_ctc_ratio_n, 1966 decoder->tsc_ctc_ratio_d); 1967 } 1968 1969 if (timestamp < decoder->timestamp) 1970 intel_pt_log("Suppressing MTC timestamp " x64_fmt " less than current timestamp " x64_fmt "\n", 1971 timestamp, decoder->timestamp); 1972 else 1973 decoder->timestamp = timestamp; 1974 1975 intel_pt_mtc_cyc_cnt_upd(decoder); 1976 1977 decoder->timestamp_insn_cnt = 0; 1978 decoder->last_mtc = mtc; 1979 1980 if (decoder->last_packet_type == INTEL_PT_CYC) { 1981 decoder->cyc_ref_timestamp = decoder->timestamp; 1982 decoder->cycle_cnt = 0; 1983 decoder->have_calc_cyc_to_tsc = false; 1984 intel_pt_calc_cyc_to_tsc(decoder, true); 1985 } 1986 1987 intel_pt_log_to("Setting timestamp", decoder->timestamp); 1988} 1989 1990static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder) 1991{ 1992 unsigned int cbr = decoder->packet.payload & 0xff; 1993 1994 decoder->cbr_payload = decoder->packet.payload; 1995 1996 if (decoder->cbr == cbr) 1997 return; 1998 1999 decoder->cbr = cbr; 2000 decoder->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr; 2001 2002 intel_pt_mtc_cyc_cnt_cbr(decoder); 2003} 2004 2005static void intel_pt_calc_cyc_timestamp(struct intel_pt_decoder *decoder) 2006{ 2007 uint64_t timestamp = decoder->cyc_ref_timestamp; 2008 2009 decoder->have_cyc = true; 2010 2011 decoder->cycle_cnt += decoder->packet.payload; 2012 if (decoder->pge) 2013 decoder->tot_cyc_cnt += decoder->packet.payload; 2014 decoder->sample_cyc = true; 2015 2016 if (!decoder->cyc_ref_timestamp) 2017 return; 2018 2019 if (decoder->have_calc_cyc_to_tsc) 2020 timestamp += decoder->cycle_cnt * decoder->calc_cyc_to_tsc; 2021 else if (decoder->cbr) 2022 timestamp += decoder->cycle_cnt * decoder->cbr_cyc_to_tsc; 2023 else 2024 return; 2025 2026 if (timestamp < decoder->timestamp) 2027 intel_pt_log("Suppressing CYC timestamp " x64_fmt " less than current timestamp " x64_fmt "\n", 2028 timestamp, decoder->timestamp); 2029 else 2030 decoder->timestamp = timestamp; 2031 2032 decoder->timestamp_insn_cnt = 0; 2033 2034 intel_pt_log_to("Setting timestamp", decoder->timestamp); 2035} 2036 2037static void intel_pt_bbp(struct intel_pt_decoder *decoder) 2038{ 2039 if (decoder->prev_pkt_ctx == INTEL_PT_NO_CTX) { 2040 memset(decoder->state.items.mask, 0, sizeof(decoder->state.items.mask)); 2041 decoder->state.items.is_32_bit = false; 2042 } 2043 decoder->blk_type = decoder->packet.payload; 2044 decoder->blk_type_pos = intel_pt_blk_type_pos(decoder->blk_type); 2045 if (decoder->blk_type == INTEL_PT_GP_REGS) 2046 decoder->state.items.is_32_bit = decoder->packet.count; 2047 if (decoder->blk_type_pos < 0) { 2048 intel_pt_log("WARNING: Unknown block type %u\n", 2049 decoder->blk_type); 2050 } else if (decoder->state.items.mask[decoder->blk_type_pos]) { 2051 intel_pt_log("WARNING: Duplicate block type %u\n", 2052 decoder->blk_type); 2053 } 2054} 2055 2056static void intel_pt_bip(struct intel_pt_decoder *decoder) 2057{ 2058 uint32_t id = decoder->packet.count; 2059 uint32_t bit = 1 << id; 2060 int pos = decoder->blk_type_pos; 2061 2062 if (pos < 0 || id >= INTEL_PT_BLK_ITEM_ID_CNT) { 2063 intel_pt_log("WARNING: Unknown block item %u type %d\n", 2064 id, decoder->blk_type); 2065 return; 2066 } 2067 2068 if (decoder->state.items.mask[pos] & bit) { 2069 intel_pt_log("WARNING: Duplicate block item %u type %d\n", 2070 id, decoder->blk_type); 2071 } 2072 2073 decoder->state.items.mask[pos] |= bit; 2074 decoder->state.items.val[pos][id] = decoder->packet.payload; 2075} 2076 2077/* Walk PSB+ packets when already in sync. */ 2078static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder) 2079{ 2080 int err; 2081 2082 decoder->in_psb = true; 2083 2084 while (1) { 2085 err = intel_pt_get_next_packet(decoder); 2086 if (err) 2087 goto out; 2088 2089 switch (decoder->packet.type) { 2090 case INTEL_PT_PSBEND: 2091 err = 0; 2092 goto out; 2093 2094 case INTEL_PT_TIP_PGD: 2095 case INTEL_PT_TIP_PGE: 2096 case INTEL_PT_TIP: 2097 case INTEL_PT_TNT: 2098 case INTEL_PT_TRACESTOP: 2099 case INTEL_PT_BAD: 2100 case INTEL_PT_PSB: 2101 case INTEL_PT_PTWRITE: 2102 case INTEL_PT_PTWRITE_IP: 2103 case INTEL_PT_EXSTOP: 2104 case INTEL_PT_EXSTOP_IP: 2105 case INTEL_PT_MWAIT: 2106 case INTEL_PT_PWRE: 2107 case INTEL_PT_PWRX: 2108 case INTEL_PT_BBP: 2109 case INTEL_PT_BIP: 2110 case INTEL_PT_BEP: 2111 case INTEL_PT_BEP_IP: 2112 case INTEL_PT_CFE: 2113 case INTEL_PT_CFE_IP: 2114 case INTEL_PT_EVD: 2115 decoder->have_tma = false; 2116 intel_pt_log("ERROR: Unexpected packet\n"); 2117 err = -EAGAIN; 2118 goto out; 2119 2120 case INTEL_PT_OVF: 2121 err = intel_pt_overflow(decoder); 2122 goto out; 2123 2124 case INTEL_PT_TSC: 2125 intel_pt_calc_tsc_timestamp(decoder); 2126 break; 2127 2128 case INTEL_PT_TMA: 2129 intel_pt_calc_tma(decoder); 2130 break; 2131 2132 case INTEL_PT_CBR: 2133 intel_pt_calc_cbr(decoder); 2134 break; 2135 2136 case INTEL_PT_MODE_EXEC: 2137 intel_pt_mode_exec_status(decoder); 2138 break; 2139 2140 case INTEL_PT_PIP: 2141 intel_pt_set_pip(decoder); 2142 break; 2143 2144 case INTEL_PT_FUP: 2145 decoder->pge = true; 2146 if (decoder->packet.count) { 2147 intel_pt_set_last_ip(decoder); 2148 decoder->psb_ip = decoder->last_ip; 2149 } 2150 break; 2151 2152 case INTEL_PT_MODE_TSX: 2153 intel_pt_update_in_tx(decoder); 2154 break; 2155 2156 case INTEL_PT_MTC: 2157 intel_pt_calc_mtc_timestamp(decoder); 2158 if (decoder->period_type == INTEL_PT_PERIOD_MTC) 2159 decoder->state.type |= INTEL_PT_INSTRUCTION; 2160 break; 2161 2162 case INTEL_PT_CYC: 2163 intel_pt_calc_cyc_timestamp(decoder); 2164 break; 2165 2166 case INTEL_PT_VMCS: 2167 case INTEL_PT_MNT: 2168 case INTEL_PT_PAD: 2169 default: 2170 break; 2171 } 2172 } 2173out: 2174 decoder->in_psb = false; 2175 2176 return err; 2177} 2178 2179static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder) 2180{ 2181 int err; 2182 2183 if (decoder->tx_flags & INTEL_PT_ABORT_TX) { 2184 decoder->tx_flags = 0; 2185 decoder->state.flags &= ~INTEL_PT_IN_TX; 2186 decoder->state.flags |= INTEL_PT_ABORT_TX; 2187 } else { 2188 decoder->state.flags |= INTEL_PT_ASYNC; 2189 } 2190 2191 while (1) { 2192 err = intel_pt_get_next_packet(decoder); 2193 if (err) 2194 return err; 2195 2196 switch (decoder->packet.type) { 2197 case INTEL_PT_TNT: 2198 case INTEL_PT_FUP: 2199 case INTEL_PT_TRACESTOP: 2200 case INTEL_PT_PSB: 2201 case INTEL_PT_TSC: 2202 case INTEL_PT_TMA: 2203 case INTEL_PT_MODE_TSX: 2204 case INTEL_PT_BAD: 2205 case INTEL_PT_PSBEND: 2206 case INTEL_PT_PTWRITE: 2207 case INTEL_PT_PTWRITE_IP: 2208 case INTEL_PT_EXSTOP: 2209 case INTEL_PT_EXSTOP_IP: 2210 case INTEL_PT_MWAIT: 2211 case INTEL_PT_PWRE: 2212 case INTEL_PT_PWRX: 2213 case INTEL_PT_BBP: 2214 case INTEL_PT_BIP: 2215 case INTEL_PT_BEP: 2216 case INTEL_PT_BEP_IP: 2217 case INTEL_PT_CFE: 2218 case INTEL_PT_CFE_IP: 2219 case INTEL_PT_EVD: 2220 intel_pt_log("ERROR: Missing TIP after FUP\n"); 2221 decoder->pkt_state = INTEL_PT_STATE_ERR3; 2222 decoder->pkt_step = 0; 2223 return -ENOENT; 2224 2225 case INTEL_PT_CBR: 2226 intel_pt_calc_cbr(decoder); 2227 break; 2228 2229 case INTEL_PT_OVF: 2230 return intel_pt_overflow(decoder); 2231 2232 case INTEL_PT_TIP_PGD: 2233 decoder->state.from_ip = decoder->ip; 2234 if (decoder->packet.count == 0) { 2235 decoder->state.to_ip = 0; 2236 } else { 2237 intel_pt_set_ip(decoder); 2238 decoder->state.to_ip = decoder->ip; 2239 } 2240 decoder->pge = false; 2241 decoder->continuous_period = false; 2242 decoder->state.type |= INTEL_PT_TRACE_END; 2243 intel_pt_update_nr(decoder); 2244 return 0; 2245 2246 case INTEL_PT_TIP_PGE: 2247 decoder->pge = true; 2248 intel_pt_log("Omitting PGE ip " x64_fmt "\n", 2249 decoder->ip); 2250 decoder->state.from_ip = 0; 2251 if (decoder->packet.count == 0) { 2252 decoder->state.to_ip = 0; 2253 } else { 2254 intel_pt_set_ip(decoder); 2255 decoder->state.to_ip = decoder->ip; 2256 } 2257 decoder->state.type |= INTEL_PT_TRACE_BEGIN; 2258 intel_pt_mtc_cyc_cnt_pge(decoder); 2259 intel_pt_set_nr(decoder); 2260 return 0; 2261 2262 case INTEL_PT_TIP: 2263 decoder->state.from_ip = decoder->ip; 2264 if (decoder->packet.count == 0) { 2265 decoder->state.to_ip = 0; 2266 } else { 2267 intel_pt_set_ip(decoder); 2268 decoder->state.to_ip = decoder->ip; 2269 } 2270 intel_pt_update_nr(decoder); 2271 intel_pt_sample_iflag_chg(decoder); 2272 return 0; 2273 2274 case INTEL_PT_PIP: 2275 intel_pt_update_pip(decoder); 2276 break; 2277 2278 case INTEL_PT_MTC: 2279 intel_pt_calc_mtc_timestamp(decoder); 2280 if (decoder->period_type == INTEL_PT_PERIOD_MTC) 2281 decoder->state.type |= INTEL_PT_INSTRUCTION; 2282 break; 2283 2284 case INTEL_PT_CYC: 2285 intel_pt_calc_cyc_timestamp(decoder); 2286 break; 2287 2288 case INTEL_PT_MODE_EXEC: 2289 intel_pt_mode_exec(decoder); 2290 break; 2291 2292 case INTEL_PT_VMCS: 2293 case INTEL_PT_MNT: 2294 case INTEL_PT_PAD: 2295 break; 2296 2297 default: 2298 return intel_pt_bug(decoder); 2299 } 2300 } 2301} 2302 2303static int intel_pt_resample(struct intel_pt_decoder *decoder) 2304{ 2305 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 2306 decoder->state.type = INTEL_PT_INSTRUCTION; 2307 decoder->state.from_ip = decoder->ip; 2308 decoder->state.to_ip = 0; 2309 return 0; 2310} 2311 2312struct intel_pt_vm_tsc_info { 2313 struct intel_pt_pkt pip_packet; 2314 struct intel_pt_pkt vmcs_packet; 2315 struct intel_pt_pkt tma_packet; 2316 bool tsc, pip, vmcs, tma, psbend; 2317 uint64_t ctc_delta; 2318 uint64_t last_ctc; 2319 int max_lookahead; 2320}; 2321 2322/* Lookahead and get the PIP, VMCS and TMA packets from PSB+ */ 2323static int intel_pt_vm_psb_lookahead_cb(struct intel_pt_pkt_info *pkt_info) 2324{ 2325 struct intel_pt_vm_tsc_info *data = pkt_info->data; 2326 2327 switch (pkt_info->packet.type) { 2328 case INTEL_PT_PAD: 2329 case INTEL_PT_MNT: 2330 case INTEL_PT_MODE_EXEC: 2331 case INTEL_PT_MODE_TSX: 2332 case INTEL_PT_MTC: 2333 case INTEL_PT_FUP: 2334 case INTEL_PT_CYC: 2335 case INTEL_PT_CBR: 2336 break; 2337 2338 case INTEL_PT_TSC: 2339 data->tsc = true; 2340 break; 2341 2342 case INTEL_PT_TMA: 2343 data->tma_packet = pkt_info->packet; 2344 data->tma = true; 2345 break; 2346 2347 case INTEL_PT_PIP: 2348 data->pip_packet = pkt_info->packet; 2349 data->pip = true; 2350 break; 2351 2352 case INTEL_PT_VMCS: 2353 data->vmcs_packet = pkt_info->packet; 2354 data->vmcs = true; 2355 break; 2356 2357 case INTEL_PT_PSBEND: 2358 data->psbend = true; 2359 return 1; 2360 2361 case INTEL_PT_TIP_PGE: 2362 case INTEL_PT_PTWRITE: 2363 case INTEL_PT_PTWRITE_IP: 2364 case INTEL_PT_EXSTOP: 2365 case INTEL_PT_EXSTOP_IP: 2366 case INTEL_PT_MWAIT: 2367 case INTEL_PT_PWRE: 2368 case INTEL_PT_PWRX: 2369 case INTEL_PT_BBP: 2370 case INTEL_PT_BIP: 2371 case INTEL_PT_BEP: 2372 case INTEL_PT_BEP_IP: 2373 case INTEL_PT_OVF: 2374 case INTEL_PT_BAD: 2375 case INTEL_PT_TNT: 2376 case INTEL_PT_TIP_PGD: 2377 case INTEL_PT_TIP: 2378 case INTEL_PT_PSB: 2379 case INTEL_PT_TRACESTOP: 2380 case INTEL_PT_CFE: 2381 case INTEL_PT_CFE_IP: 2382 case INTEL_PT_EVD: 2383 default: 2384 return 1; 2385 } 2386 2387 return 0; 2388} 2389 2390struct intel_pt_ovf_fup_info { 2391 int max_lookahead; 2392 bool found; 2393}; 2394 2395/* Lookahead to detect a FUP packet after OVF */ 2396static int intel_pt_ovf_fup_lookahead_cb(struct intel_pt_pkt_info *pkt_info) 2397{ 2398 struct intel_pt_ovf_fup_info *data = pkt_info->data; 2399 2400 if (pkt_info->packet.type == INTEL_PT_CYC || 2401 pkt_info->packet.type == INTEL_PT_MTC || 2402 pkt_info->packet.type == INTEL_PT_TSC) 2403 return !--(data->max_lookahead); 2404 data->found = pkt_info->packet.type == INTEL_PT_FUP; 2405 return 1; 2406} 2407 2408static bool intel_pt_ovf_fup_lookahead(struct intel_pt_decoder *decoder) 2409{ 2410 struct intel_pt_ovf_fup_info data = { 2411 .max_lookahead = 16, 2412 .found = false, 2413 }; 2414 2415 intel_pt_pkt_lookahead(decoder, intel_pt_ovf_fup_lookahead_cb, &data); 2416 return data.found; 2417} 2418 2419/* Lookahead and get the TMA packet after TSC */ 2420static int intel_pt_tma_lookahead_cb(struct intel_pt_pkt_info *pkt_info) 2421{ 2422 struct intel_pt_vm_tsc_info *data = pkt_info->data; 2423 2424 if (pkt_info->packet.type == INTEL_PT_CYC || 2425 pkt_info->packet.type == INTEL_PT_MTC) 2426 return !--(data->max_lookahead); 2427 2428 if (pkt_info->packet.type == INTEL_PT_TMA) { 2429 data->tma_packet = pkt_info->packet; 2430 data->tma = true; 2431 } 2432 return 1; 2433} 2434 2435static uint64_t intel_pt_ctc_to_tsc(struct intel_pt_decoder *decoder, uint64_t ctc) 2436{ 2437 if (decoder->tsc_ctc_mult) 2438 return ctc * decoder->tsc_ctc_mult; 2439 else 2440 return multdiv(ctc, decoder->tsc_ctc_ratio_n, decoder->tsc_ctc_ratio_d); 2441} 2442 2443static uint64_t intel_pt_calc_expected_tsc(struct intel_pt_decoder *decoder, 2444 uint32_t ctc, 2445 uint32_t fc, 2446 uint64_t last_ctc_timestamp, 2447 uint64_t ctc_delta, 2448 uint32_t last_ctc) 2449{ 2450 /* Number of CTC ticks from last_ctc_timestamp to last_mtc */ 2451 uint64_t last_mtc_ctc = last_ctc + ctc_delta; 2452 /* 2453 * Number of CTC ticks from there until current TMA packet. We would 2454 * expect last_mtc_ctc to be before ctc, but the TSC packet can slip 2455 * past an MTC, so a sign-extended value is used. 2456 */ 2457 uint64_t delta = (int16_t)((uint16_t)ctc - (uint16_t)last_mtc_ctc); 2458 /* Total CTC ticks from last_ctc_timestamp to current TMA packet */ 2459 uint64_t new_ctc_delta = ctc_delta + delta; 2460 uint64_t expected_tsc; 2461 2462 /* 2463 * Convert CTC ticks to TSC ticks, add the starting point 2464 * (last_ctc_timestamp) and the fast counter from the TMA packet. 2465 */ 2466 expected_tsc = last_ctc_timestamp + intel_pt_ctc_to_tsc(decoder, new_ctc_delta) + fc; 2467 2468 if (intel_pt_enable_logging) { 2469 intel_pt_log_x64(last_mtc_ctc); 2470 intel_pt_log_x32(last_ctc); 2471 intel_pt_log_x64(ctc_delta); 2472 intel_pt_log_x64(delta); 2473 intel_pt_log_x32(ctc); 2474 intel_pt_log_x64(new_ctc_delta); 2475 intel_pt_log_x64(last_ctc_timestamp); 2476 intel_pt_log_x32(fc); 2477 intel_pt_log_x64(intel_pt_ctc_to_tsc(decoder, new_ctc_delta)); 2478 intel_pt_log_x64(expected_tsc); 2479 } 2480 2481 return expected_tsc; 2482} 2483 2484static uint64_t intel_pt_expected_tsc(struct intel_pt_decoder *decoder, 2485 struct intel_pt_vm_tsc_info *data) 2486{ 2487 uint32_t ctc = data->tma_packet.payload; 2488 uint32_t fc = data->tma_packet.count; 2489 2490 return intel_pt_calc_expected_tsc(decoder, ctc, fc, 2491 decoder->ctc_timestamp, 2492 data->ctc_delta, data->last_ctc); 2493} 2494 2495static void intel_pt_translate_vm_tsc(struct intel_pt_decoder *decoder, 2496 struct intel_pt_vmcs_info *vmcs_info) 2497{ 2498 uint64_t payload = decoder->packet.payload; 2499 2500 /* VMX adds the TSC Offset, so subtract to get host TSC */ 2501 decoder->packet.payload -= vmcs_info->tsc_offset; 2502 /* TSC packet has only 7 bytes */ 2503 decoder->packet.payload &= SEVEN_BYTES; 2504 2505 /* 2506 * The buffer is mmapped from the data file, so this also updates the 2507 * data file. 2508 */ 2509 if (!decoder->vm_tm_corr_dry_run) 2510 memcpy((void *)decoder->buf + 1, &decoder->packet.payload, 7); 2511 2512 intel_pt_log("Translated VM TSC %#" PRIx64 " -> %#" PRIx64 2513 " VMCS %#" PRIx64 " TSC Offset %#" PRIx64 "\n", 2514 payload, decoder->packet.payload, vmcs_info->vmcs, 2515 vmcs_info->tsc_offset); 2516} 2517 2518static void intel_pt_translate_vm_tsc_offset(struct intel_pt_decoder *decoder, 2519 uint64_t tsc_offset) 2520{ 2521 struct intel_pt_vmcs_info vmcs_info = { 2522 .vmcs = NO_VMCS, 2523 .tsc_offset = tsc_offset 2524 }; 2525 2526 intel_pt_translate_vm_tsc(decoder, &vmcs_info); 2527} 2528 2529static inline bool in_vm(uint64_t pip_payload) 2530{ 2531 return pip_payload & 1; 2532} 2533 2534static inline bool pip_in_vm(struct intel_pt_pkt *pip_packet) 2535{ 2536 return pip_packet->payload & 1; 2537} 2538 2539static void intel_pt_print_vmcs_info(struct intel_pt_vmcs_info *vmcs_info) 2540{ 2541 p_log("VMCS: %#" PRIx64 " TSC Offset %#" PRIx64, 2542 vmcs_info->vmcs, vmcs_info->tsc_offset); 2543} 2544 2545static void intel_pt_vm_tm_corr_psb(struct intel_pt_decoder *decoder, 2546 struct intel_pt_vm_tsc_info *data) 2547{ 2548 memset(data, 0, sizeof(*data)); 2549 data->ctc_delta = decoder->ctc_delta; 2550 data->last_ctc = decoder->last_ctc; 2551 intel_pt_pkt_lookahead(decoder, intel_pt_vm_psb_lookahead_cb, data); 2552 if (data->tsc && !data->psbend) 2553 p_log("ERROR: PSB without PSBEND"); 2554 decoder->in_psb = data->psbend; 2555} 2556 2557static void intel_pt_vm_tm_corr_first_tsc(struct intel_pt_decoder *decoder, 2558 struct intel_pt_vm_tsc_info *data, 2559 struct intel_pt_vmcs_info *vmcs_info, 2560 uint64_t host_tsc) 2561{ 2562 if (!decoder->in_psb) { 2563 /* Can't happen */ 2564 p_log("ERROR: First TSC is not in PSB+"); 2565 } 2566 2567 if (data->pip) { 2568 if (pip_in_vm(&data->pip_packet)) { /* Guest */ 2569 if (vmcs_info && vmcs_info->tsc_offset) { 2570 intel_pt_translate_vm_tsc(decoder, vmcs_info); 2571 decoder->vm_tm_corr_reliable = true; 2572 } else { 2573 p_log("ERROR: First TSC, unknown TSC Offset"); 2574 } 2575 } else { /* Host */ 2576 decoder->vm_tm_corr_reliable = true; 2577 } 2578 } else { /* Host or Guest */ 2579 decoder->vm_tm_corr_reliable = false; 2580 if (intel_pt_time_in_range(decoder, host_tsc)) { 2581 /* Assume Host */ 2582 } else { 2583 /* Assume Guest */ 2584 if (vmcs_info && vmcs_info->tsc_offset) 2585 intel_pt_translate_vm_tsc(decoder, vmcs_info); 2586 else 2587 p_log("ERROR: First TSC, no PIP, unknown TSC Offset"); 2588 } 2589 } 2590} 2591 2592static void intel_pt_vm_tm_corr_tsc(struct intel_pt_decoder *decoder, 2593 struct intel_pt_vm_tsc_info *data) 2594{ 2595 struct intel_pt_vmcs_info *vmcs_info; 2596 uint64_t tsc_offset = 0; 2597 uint64_t vmcs; 2598 bool reliable = true; 2599 uint64_t expected_tsc; 2600 uint64_t host_tsc; 2601 uint64_t ref_timestamp; 2602 2603 bool assign = false; 2604 bool assign_reliable = false; 2605 2606 /* Already have 'data' for the in_psb case */ 2607 if (!decoder->in_psb) { 2608 memset(data, 0, sizeof(*data)); 2609 data->ctc_delta = decoder->ctc_delta; 2610 data->last_ctc = decoder->last_ctc; 2611 data->max_lookahead = 16; 2612 intel_pt_pkt_lookahead(decoder, intel_pt_tma_lookahead_cb, data); 2613 if (decoder->pge) { 2614 data->pip = true; 2615 data->pip_packet.payload = decoder->pip_payload; 2616 } 2617 } 2618 2619 /* Calculations depend on having TMA packets */ 2620 if (!data->tma) { 2621 p_log("ERROR: TSC without TMA"); 2622 return; 2623 } 2624 2625 vmcs = data->vmcs ? data->vmcs_packet.payload : decoder->vmcs; 2626 if (vmcs == NO_VMCS) 2627 vmcs = 0; 2628 2629 vmcs_info = decoder->findnew_vmcs_info(decoder->data, vmcs); 2630 2631 ref_timestamp = decoder->timestamp ? decoder->timestamp : decoder->buf_timestamp; 2632 host_tsc = intel_pt_8b_tsc(decoder->packet.payload, ref_timestamp); 2633 2634 if (!decoder->ctc_timestamp) { 2635 intel_pt_vm_tm_corr_first_tsc(decoder, data, vmcs_info, host_tsc); 2636 return; 2637 } 2638 2639 expected_tsc = intel_pt_expected_tsc(decoder, data); 2640 2641 tsc_offset = host_tsc - expected_tsc; 2642 2643 /* Determine if TSC is from Host or Guest */ 2644 if (data->pip) { 2645 if (pip_in_vm(&data->pip_packet)) { /* Guest */ 2646 if (!vmcs_info) { 2647 /* PIP NR=1 without VMCS cannot happen */ 2648 p_log("ERROR: Missing VMCS"); 2649 intel_pt_translate_vm_tsc_offset(decoder, tsc_offset); 2650 decoder->vm_tm_corr_reliable = false; 2651 return; 2652 } 2653 } else { /* Host */ 2654 decoder->last_reliable_timestamp = host_tsc; 2655 decoder->vm_tm_corr_reliable = true; 2656 return; 2657 } 2658 } else { /* Host or Guest */ 2659 reliable = false; /* Host/Guest is a guess, so not reliable */ 2660 if (decoder->in_psb) { 2661 if (!tsc_offset) 2662 return; /* Zero TSC Offset, assume Host */ 2663 /* 2664 * TSC packet has only 7 bytes of TSC. We have no 2665 * information about the Guest's 8th byte, but it 2666 * doesn't matter because we only need 7 bytes. 2667 * Here, since the 8th byte is unreliable and 2668 * irrelevant, compare only 7 byes. 2669 */ 2670 if (vmcs_info && 2671 (tsc_offset & SEVEN_BYTES) == 2672 (vmcs_info->tsc_offset & SEVEN_BYTES)) { 2673 /* Same TSC Offset as last VMCS, assume Guest */ 2674 goto guest; 2675 } 2676 } 2677 /* 2678 * Check if the host_tsc is within the expected range. 2679 * Note, we could narrow the range more by looking ahead for 2680 * the next host TSC in the same buffer, but we don't bother to 2681 * do that because this is probably good enough. 2682 */ 2683 if (host_tsc >= expected_tsc && intel_pt_time_in_range(decoder, host_tsc)) { 2684 /* Within expected range for Host TSC, assume Host */ 2685 decoder->vm_tm_corr_reliable = false; 2686 return; 2687 } 2688 } 2689 2690guest: /* Assuming Guest */ 2691 2692 /* Determine whether to assign TSC Offset */ 2693 if (vmcs_info && vmcs_info->vmcs) { 2694 if (vmcs_info->tsc_offset && vmcs_info->reliable) { 2695 assign = false; 2696 } else if (decoder->in_psb && data->pip && decoder->vm_tm_corr_reliable && 2697 decoder->vm_tm_corr_continuous && decoder->vm_tm_corr_same_buf) { 2698 /* Continuous tracing, TSC in a PSB is not a time loss */ 2699 assign = true; 2700 assign_reliable = true; 2701 } else if (decoder->in_psb && data->pip && decoder->vm_tm_corr_same_buf) { 2702 /* 2703 * Unlikely to be a time loss TSC in a PSB which is not 2704 * at the start of a buffer. 2705 */ 2706 assign = true; 2707 assign_reliable = false; 2708 } 2709 } 2710 2711 /* Record VMCS TSC Offset */ 2712 if (assign && (vmcs_info->tsc_offset != tsc_offset || 2713 vmcs_info->reliable != assign_reliable)) { 2714 bool print = vmcs_info->tsc_offset != tsc_offset; 2715 2716 vmcs_info->tsc_offset = tsc_offset; 2717 vmcs_info->reliable = assign_reliable; 2718 if (print) 2719 intel_pt_print_vmcs_info(vmcs_info); 2720 } 2721 2722 /* Determine what TSC Offset to use */ 2723 if (vmcs_info && vmcs_info->tsc_offset) { 2724 if (!vmcs_info->reliable) 2725 reliable = false; 2726 intel_pt_translate_vm_tsc(decoder, vmcs_info); 2727 } else { 2728 reliable = false; 2729 if (vmcs_info) { 2730 if (!vmcs_info->error_printed) { 2731 p_log("ERROR: Unknown TSC Offset for VMCS %#" PRIx64, 2732 vmcs_info->vmcs); 2733 vmcs_info->error_printed = true; 2734 } 2735 } else { 2736 if (intel_pt_print_once(decoder, INTEL_PT_PRT_ONCE_UNK_VMCS)) 2737 p_log("ERROR: Unknown VMCS"); 2738 } 2739 intel_pt_translate_vm_tsc_offset(decoder, tsc_offset); 2740 } 2741 2742 decoder->vm_tm_corr_reliable = reliable; 2743} 2744 2745static void intel_pt_vm_tm_corr_pebs_tsc(struct intel_pt_decoder *decoder) 2746{ 2747 uint64_t host_tsc = decoder->packet.payload; 2748 uint64_t guest_tsc = decoder->packet.payload; 2749 struct intel_pt_vmcs_info *vmcs_info; 2750 uint64_t vmcs; 2751 2752 vmcs = decoder->vmcs; 2753 if (vmcs == NO_VMCS) 2754 vmcs = 0; 2755 2756 vmcs_info = decoder->findnew_vmcs_info(decoder->data, vmcs); 2757 2758 if (decoder->pge) { 2759 if (in_vm(decoder->pip_payload)) { /* Guest */ 2760 if (!vmcs_info) { 2761 /* PIP NR=1 without VMCS cannot happen */ 2762 p_log("ERROR: Missing VMCS"); 2763 } 2764 } else { /* Host */ 2765 return; 2766 } 2767 } else { /* Host or Guest */ 2768 if (intel_pt_time_in_range(decoder, host_tsc)) { 2769 /* Within expected range for Host TSC, assume Host */ 2770 return; 2771 } 2772 } 2773 2774 if (vmcs_info) { 2775 /* Translate Guest TSC to Host TSC */ 2776 host_tsc = ((guest_tsc & SEVEN_BYTES) - vmcs_info->tsc_offset) & SEVEN_BYTES; 2777 host_tsc = intel_pt_8b_tsc(host_tsc, decoder->timestamp); 2778 intel_pt_log("Translated VM TSC %#" PRIx64 " -> %#" PRIx64 2779 " VMCS %#" PRIx64 " TSC Offset %#" PRIx64 "\n", 2780 guest_tsc, host_tsc, vmcs_info->vmcs, 2781 vmcs_info->tsc_offset); 2782 if (!intel_pt_time_in_range(decoder, host_tsc) && 2783 intel_pt_print_once(decoder, INTEL_PT_PRT_ONCE_ERANGE)) 2784 p_log("Timestamp out of range"); 2785 } else { 2786 if (intel_pt_print_once(decoder, INTEL_PT_PRT_ONCE_UNK_VMCS)) 2787 p_log("ERROR: Unknown VMCS"); 2788 host_tsc = decoder->timestamp; 2789 } 2790 2791 decoder->packet.payload = host_tsc; 2792 2793 if (!decoder->vm_tm_corr_dry_run) 2794 memcpy((void *)decoder->buf + 1, &host_tsc, 8); 2795} 2796 2797static int intel_pt_vm_time_correlation(struct intel_pt_decoder *decoder) 2798{ 2799 struct intel_pt_vm_tsc_info data = { .psbend = false }; 2800 bool pge; 2801 int err; 2802 2803 if (decoder->in_psb) 2804 intel_pt_vm_tm_corr_psb(decoder, &data); 2805 2806 while (1) { 2807 err = intel_pt_get_next_packet(decoder); 2808 if (err == -ENOLINK) 2809 continue; 2810 if (err) 2811 break; 2812 2813 switch (decoder->packet.type) { 2814 case INTEL_PT_TIP_PGD: 2815 decoder->pge = false; 2816 decoder->vm_tm_corr_continuous = false; 2817 break; 2818 2819 case INTEL_PT_TNT: 2820 case INTEL_PT_TIP: 2821 case INTEL_PT_TIP_PGE: 2822 decoder->pge = true; 2823 break; 2824 2825 case INTEL_PT_OVF: 2826 decoder->in_psb = false; 2827 pge = decoder->pge; 2828 decoder->pge = intel_pt_ovf_fup_lookahead(decoder); 2829 if (pge != decoder->pge) 2830 intel_pt_log("Surprising PGE change in OVF!"); 2831 if (!decoder->pge) 2832 decoder->vm_tm_corr_continuous = false; 2833 break; 2834 2835 case INTEL_PT_FUP: 2836 if (decoder->in_psb) 2837 decoder->pge = true; 2838 break; 2839 2840 case INTEL_PT_TRACESTOP: 2841 decoder->pge = false; 2842 decoder->vm_tm_corr_continuous = false; 2843 decoder->have_tma = false; 2844 break; 2845 2846 case INTEL_PT_PSB: 2847 intel_pt_vm_tm_corr_psb(decoder, &data); 2848 break; 2849 2850 case INTEL_PT_PIP: 2851 decoder->pip_payload = decoder->packet.payload; 2852 break; 2853 2854 case INTEL_PT_MTC: 2855 intel_pt_calc_mtc_timestamp(decoder); 2856 break; 2857 2858 case INTEL_PT_TSC: 2859 intel_pt_vm_tm_corr_tsc(decoder, &data); 2860 intel_pt_calc_tsc_timestamp(decoder); 2861 decoder->vm_tm_corr_same_buf = true; 2862 decoder->vm_tm_corr_continuous = decoder->pge; 2863 break; 2864 2865 case INTEL_PT_TMA: 2866 intel_pt_calc_tma(decoder); 2867 break; 2868 2869 case INTEL_PT_CYC: 2870 intel_pt_calc_cyc_timestamp(decoder); 2871 break; 2872 2873 case INTEL_PT_CBR: 2874 intel_pt_calc_cbr(decoder); 2875 break; 2876 2877 case INTEL_PT_PSBEND: 2878 decoder->in_psb = false; 2879 data.psbend = false; 2880 break; 2881 2882 case INTEL_PT_VMCS: 2883 if (decoder->packet.payload != NO_VMCS) 2884 decoder->vmcs = decoder->packet.payload; 2885 break; 2886 2887 case INTEL_PT_BBP: 2888 decoder->blk_type = decoder->packet.payload; 2889 break; 2890 2891 case INTEL_PT_BIP: 2892 if (decoder->blk_type == INTEL_PT_PEBS_BASIC && 2893 decoder->packet.count == 2) 2894 intel_pt_vm_tm_corr_pebs_tsc(decoder); 2895 break; 2896 2897 case INTEL_PT_BEP: 2898 case INTEL_PT_BEP_IP: 2899 decoder->blk_type = 0; 2900 break; 2901 2902 case INTEL_PT_CFE: 2903 case INTEL_PT_CFE_IP: 2904 case INTEL_PT_EVD: 2905 case INTEL_PT_MODE_EXEC: 2906 case INTEL_PT_MODE_TSX: 2907 case INTEL_PT_MNT: 2908 case INTEL_PT_PAD: 2909 case INTEL_PT_PTWRITE_IP: 2910 case INTEL_PT_PTWRITE: 2911 case INTEL_PT_MWAIT: 2912 case INTEL_PT_PWRE: 2913 case INTEL_PT_EXSTOP_IP: 2914 case INTEL_PT_EXSTOP: 2915 case INTEL_PT_PWRX: 2916 case INTEL_PT_BAD: /* Does not happen */ 2917 default: 2918 break; 2919 } 2920 } 2921 2922 return err; 2923} 2924 2925#define HOP_PROCESS 0 2926#define HOP_IGNORE 1 2927#define HOP_RETURN 2 2928#define HOP_AGAIN 3 2929 2930static int intel_pt_scan_for_psb(struct intel_pt_decoder *decoder); 2931 2932/* Hop mode: Ignore TNT, do not walk code, but get ip from FUPs and TIPs */ 2933static int intel_pt_hop_trace(struct intel_pt_decoder *decoder, bool *no_tip, int *err) 2934{ 2935 *err = 0; 2936 2937 /* Leap from PSB to PSB, getting ip from FUP within PSB+ */ 2938 if (decoder->leap && !decoder->in_psb && decoder->packet.type != INTEL_PT_PSB) { 2939 *err = intel_pt_scan_for_psb(decoder); 2940 if (*err) 2941 return HOP_RETURN; 2942 } 2943 2944 switch (decoder->packet.type) { 2945 case INTEL_PT_TNT: 2946 return HOP_IGNORE; 2947 2948 case INTEL_PT_TIP_PGD: 2949 decoder->pge = false; 2950 if (!decoder->packet.count) { 2951 intel_pt_set_nr(decoder); 2952 return HOP_IGNORE; 2953 } 2954 intel_pt_set_ip(decoder); 2955 decoder->state.type |= INTEL_PT_TRACE_END; 2956 decoder->state.from_ip = 0; 2957 decoder->state.to_ip = decoder->ip; 2958 intel_pt_update_nr(decoder); 2959 return HOP_RETURN; 2960 2961 case INTEL_PT_TIP: 2962 if (!decoder->packet.count) { 2963 intel_pt_set_nr(decoder); 2964 return HOP_IGNORE; 2965 } 2966 intel_pt_set_ip(decoder); 2967 decoder->state.type = INTEL_PT_INSTRUCTION; 2968 decoder->state.from_ip = decoder->ip; 2969 decoder->state.to_ip = 0; 2970 intel_pt_update_nr(decoder); 2971 intel_pt_sample_iflag_chg(decoder); 2972 return HOP_RETURN; 2973 2974 case INTEL_PT_FUP: 2975 if (!decoder->packet.count) 2976 return HOP_IGNORE; 2977 intel_pt_set_ip(decoder); 2978 if (decoder->set_fup_mwait || decoder->set_fup_pwre) 2979 *no_tip = true; 2980 if (!decoder->branch_enable || !decoder->pge) 2981 *no_tip = true; 2982 if (*no_tip) { 2983 decoder->state.type = INTEL_PT_INSTRUCTION; 2984 decoder->state.from_ip = decoder->ip; 2985 decoder->state.to_ip = 0; 2986 intel_pt_fup_event(decoder, *no_tip); 2987 return HOP_RETURN; 2988 } 2989 intel_pt_fup_event(decoder, *no_tip); 2990 decoder->state.type |= INTEL_PT_INSTRUCTION | INTEL_PT_BRANCH; 2991 *err = intel_pt_walk_fup_tip(decoder); 2992 if (!*err && decoder->state.to_ip) 2993 decoder->pkt_state = INTEL_PT_STATE_RESAMPLE; 2994 return HOP_RETURN; 2995 2996 case INTEL_PT_PSB: 2997 decoder->state.psb_offset = decoder->pos; 2998 decoder->psb_ip = 0; 2999 decoder->last_ip = 0; 3000 decoder->have_last_ip = true; 3001 *err = intel_pt_walk_psbend(decoder); 3002 if (*err == -EAGAIN) 3003 return HOP_AGAIN; 3004 if (*err) 3005 return HOP_RETURN; 3006 decoder->state.type = INTEL_PT_PSB_EVT; 3007 if (decoder->psb_ip) { 3008 decoder->state.type |= INTEL_PT_INSTRUCTION; 3009 decoder->ip = decoder->psb_ip; 3010 } 3011 decoder->state.from_ip = decoder->psb_ip; 3012 decoder->state.to_ip = 0; 3013 return HOP_RETURN; 3014 3015 case INTEL_PT_BAD: 3016 case INTEL_PT_PAD: 3017 case INTEL_PT_TIP_PGE: 3018 case INTEL_PT_TSC: 3019 case INTEL_PT_TMA: 3020 case INTEL_PT_MODE_EXEC: 3021 case INTEL_PT_MODE_TSX: 3022 case INTEL_PT_MTC: 3023 case INTEL_PT_CYC: 3024 case INTEL_PT_VMCS: 3025 case INTEL_PT_PSBEND: 3026 case INTEL_PT_CBR: 3027 case INTEL_PT_TRACESTOP: 3028 case INTEL_PT_PIP: 3029 case INTEL_PT_OVF: 3030 case INTEL_PT_MNT: 3031 case INTEL_PT_PTWRITE: 3032 case INTEL_PT_PTWRITE_IP: 3033 case INTEL_PT_EXSTOP: 3034 case INTEL_PT_EXSTOP_IP: 3035 case INTEL_PT_MWAIT: 3036 case INTEL_PT_PWRE: 3037 case INTEL_PT_PWRX: 3038 case INTEL_PT_BBP: 3039 case INTEL_PT_BIP: 3040 case INTEL_PT_BEP: 3041 case INTEL_PT_BEP_IP: 3042 case INTEL_PT_CFE: 3043 case INTEL_PT_CFE_IP: 3044 case INTEL_PT_EVD: 3045 default: 3046 return HOP_PROCESS; 3047 } 3048} 3049 3050struct intel_pt_psb_info { 3051 struct intel_pt_pkt fup_packet; 3052 bool fup; 3053 int after_psbend; 3054}; 3055 3056/* Lookahead and get the FUP packet from PSB+ */ 3057static int intel_pt_psb_lookahead_cb(struct intel_pt_pkt_info *pkt_info) 3058{ 3059 struct intel_pt_psb_info *data = pkt_info->data; 3060 3061 switch (pkt_info->packet.type) { 3062 case INTEL_PT_PAD: 3063 case INTEL_PT_MNT: 3064 case INTEL_PT_TSC: 3065 case INTEL_PT_TMA: 3066 case INTEL_PT_MODE_EXEC: 3067 case INTEL_PT_MODE_TSX: 3068 case INTEL_PT_MTC: 3069 case INTEL_PT_CYC: 3070 case INTEL_PT_VMCS: 3071 case INTEL_PT_CBR: 3072 case INTEL_PT_PIP: 3073 if (data->after_psbend) { 3074 data->after_psbend -= 1; 3075 if (!data->after_psbend) 3076 return 1; 3077 } 3078 break; 3079 3080 case INTEL_PT_FUP: 3081 if (data->after_psbend) 3082 return 1; 3083 if (data->fup || pkt_info->packet.count == 0) 3084 return 1; 3085 data->fup_packet = pkt_info->packet; 3086 data->fup = true; 3087 break; 3088 3089 case INTEL_PT_PSBEND: 3090 if (!data->fup) 3091 return 1; 3092 /* Keep going to check for a TIP.PGE */ 3093 data->after_psbend = 6; 3094 break; 3095 3096 case INTEL_PT_TIP_PGE: 3097 /* Ignore FUP in PSB+ if followed by TIP.PGE */ 3098 if (data->after_psbend) 3099 data->fup = false; 3100 return 1; 3101 3102 case INTEL_PT_PTWRITE: 3103 case INTEL_PT_PTWRITE_IP: 3104 case INTEL_PT_EXSTOP: 3105 case INTEL_PT_EXSTOP_IP: 3106 case INTEL_PT_MWAIT: 3107 case INTEL_PT_PWRE: 3108 case INTEL_PT_PWRX: 3109 case INTEL_PT_BBP: 3110 case INTEL_PT_BIP: 3111 case INTEL_PT_BEP: 3112 case INTEL_PT_BEP_IP: 3113 case INTEL_PT_CFE: 3114 case INTEL_PT_CFE_IP: 3115 case INTEL_PT_EVD: 3116 if (data->after_psbend) { 3117 data->after_psbend -= 1; 3118 if (!data->after_psbend) 3119 return 1; 3120 break; 3121 } 3122 return 1; 3123 3124 case INTEL_PT_OVF: 3125 case INTEL_PT_BAD: 3126 case INTEL_PT_TNT: 3127 case INTEL_PT_TIP_PGD: 3128 case INTEL_PT_TIP: 3129 case INTEL_PT_PSB: 3130 case INTEL_PT_TRACESTOP: 3131 default: 3132 return 1; 3133 } 3134 3135 return 0; 3136} 3137 3138static int intel_pt_psb(struct intel_pt_decoder *decoder) 3139{ 3140 int err; 3141 3142 decoder->last_ip = 0; 3143 decoder->psb_ip = 0; 3144 decoder->have_last_ip = true; 3145 intel_pt_clear_stack(&decoder->stack); 3146 err = intel_pt_walk_psbend(decoder); 3147 if (err) 3148 return err; 3149 decoder->state.type = INTEL_PT_PSB_EVT; 3150 decoder->state.from_ip = decoder->psb_ip; 3151 decoder->state.to_ip = 0; 3152 return 0; 3153} 3154 3155static int intel_pt_fup_in_psb(struct intel_pt_decoder *decoder) 3156{ 3157 int err; 3158 3159 if (decoder->ip != decoder->last_ip) { 3160 err = intel_pt_walk_fup(decoder); 3161 if (!err || err != -EAGAIN) 3162 return err; 3163 } 3164 3165 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 3166 err = intel_pt_psb(decoder); 3167 if (err) { 3168 decoder->pkt_state = INTEL_PT_STATE_ERR3; 3169 return -ENOENT; 3170 } 3171 3172 return 0; 3173} 3174 3175static bool intel_pt_psb_with_fup(struct intel_pt_decoder *decoder, int *err) 3176{ 3177 struct intel_pt_psb_info data = { .fup = false }; 3178 3179 if (!decoder->branch_enable) 3180 return false; 3181 3182 intel_pt_pkt_lookahead(decoder, intel_pt_psb_lookahead_cb, &data); 3183 if (!data.fup) 3184 return false; 3185 3186 decoder->packet = data.fup_packet; 3187 intel_pt_set_last_ip(decoder); 3188 decoder->pkt_state = INTEL_PT_STATE_FUP_IN_PSB; 3189 3190 *err = intel_pt_fup_in_psb(decoder); 3191 3192 return true; 3193} 3194 3195static int intel_pt_walk_trace(struct intel_pt_decoder *decoder) 3196{ 3197 int last_packet_type = INTEL_PT_PAD; 3198 bool no_tip = false; 3199 int err; 3200 3201 while (1) { 3202 err = intel_pt_get_next_packet(decoder); 3203 if (err) 3204 return err; 3205next: 3206 err = 0; 3207 if (decoder->cyc_threshold) { 3208 if (decoder->sample_cyc && last_packet_type != INTEL_PT_CYC) 3209 decoder->sample_cyc = false; 3210 last_packet_type = decoder->packet.type; 3211 } 3212 3213 if (decoder->hop) { 3214 switch (intel_pt_hop_trace(decoder, &no_tip, &err)) { 3215 case HOP_IGNORE: 3216 continue; 3217 case HOP_RETURN: 3218 return err; 3219 case HOP_AGAIN: 3220 goto next; 3221 default: 3222 break; 3223 } 3224 } 3225 3226 switch (decoder->packet.type) { 3227 case INTEL_PT_TNT: 3228 if (!decoder->packet.count) 3229 break; 3230 decoder->tnt = decoder->packet; 3231 decoder->pkt_state = INTEL_PT_STATE_TNT; 3232 err = intel_pt_walk_tnt(decoder); 3233 if (err == -EAGAIN) 3234 break; 3235 return err; 3236 3237 case INTEL_PT_TIP_PGD: 3238 if (decoder->packet.count != 0) 3239 intel_pt_set_last_ip(decoder); 3240 decoder->pkt_state = INTEL_PT_STATE_TIP_PGD; 3241 return intel_pt_walk_tip(decoder); 3242 3243 case INTEL_PT_TIP_PGE: { 3244 decoder->pge = true; 3245 decoder->overflow = false; 3246 intel_pt_mtc_cyc_cnt_pge(decoder); 3247 intel_pt_set_nr(decoder); 3248 if (decoder->packet.count == 0) { 3249 intel_pt_log_at("Skipping zero TIP.PGE", 3250 decoder->pos); 3251 break; 3252 } 3253 intel_pt_sample_iflag_chg(decoder); 3254 intel_pt_set_ip(decoder); 3255 decoder->state.from_ip = 0; 3256 decoder->state.to_ip = decoder->ip; 3257 decoder->state.type |= INTEL_PT_TRACE_BEGIN; 3258 /* 3259 * In hop mode, resample to get the to_ip as an 3260 * "instruction" sample. 3261 */ 3262 if (decoder->hop) 3263 decoder->pkt_state = INTEL_PT_STATE_RESAMPLE; 3264 return 0; 3265 } 3266 3267 case INTEL_PT_OVF: 3268 return intel_pt_overflow(decoder); 3269 3270 case INTEL_PT_TIP: 3271 if (decoder->packet.count != 0) 3272 intel_pt_set_last_ip(decoder); 3273 decoder->pkt_state = INTEL_PT_STATE_TIP; 3274 return intel_pt_walk_tip(decoder); 3275 3276 case INTEL_PT_FUP: 3277 if (decoder->packet.count == 0) { 3278 intel_pt_log_at("Skipping zero FUP", 3279 decoder->pos); 3280 no_tip = false; 3281 break; 3282 } 3283 intel_pt_set_last_ip(decoder); 3284 if (!decoder->branch_enable || !decoder->pge) { 3285 decoder->ip = decoder->last_ip; 3286 if (intel_pt_fup_event(decoder, no_tip)) 3287 return 0; 3288 no_tip = false; 3289 break; 3290 } 3291 if (decoder->set_fup_mwait) 3292 no_tip = true; 3293 if (no_tip) 3294 decoder->pkt_state = INTEL_PT_STATE_FUP_NO_TIP; 3295 else 3296 decoder->pkt_state = INTEL_PT_STATE_FUP; 3297 err = intel_pt_walk_fup(decoder); 3298 if (err != -EAGAIN) 3299 return err; 3300 if (no_tip) { 3301 no_tip = false; 3302 break; 3303 } 3304 return intel_pt_walk_fup_tip(decoder); 3305 3306 case INTEL_PT_TRACESTOP: 3307 decoder->pge = false; 3308 decoder->continuous_period = false; 3309 intel_pt_clear_tx_flags(decoder); 3310 decoder->have_tma = false; 3311 break; 3312 3313 case INTEL_PT_PSB: 3314 decoder->state.psb_offset = decoder->pos; 3315 decoder->psb_ip = 0; 3316 if (intel_pt_psb_with_fup(decoder, &err)) 3317 return err; 3318 err = intel_pt_psb(decoder); 3319 if (err == -EAGAIN) 3320 goto next; 3321 return err; 3322 3323 case INTEL_PT_PIP: 3324 intel_pt_update_pip(decoder); 3325 break; 3326 3327 case INTEL_PT_MTC: 3328 intel_pt_calc_mtc_timestamp(decoder); 3329 if (decoder->period_type != INTEL_PT_PERIOD_MTC) 3330 break; 3331 /* 3332 * Ensure that there has been an instruction since the 3333 * last MTC. 3334 */ 3335 if (!decoder->mtc_insn) 3336 break; 3337 decoder->mtc_insn = false; 3338 /* Ensure that there is a timestamp */ 3339 if (!decoder->timestamp) 3340 break; 3341 decoder->state.type = INTEL_PT_INSTRUCTION; 3342 decoder->state.from_ip = decoder->ip; 3343 decoder->state.to_ip = 0; 3344 decoder->mtc_insn = false; 3345 return 0; 3346 3347 case INTEL_PT_TSC: 3348 intel_pt_calc_tsc_timestamp(decoder); 3349 break; 3350 3351 case INTEL_PT_TMA: 3352 intel_pt_calc_tma(decoder); 3353 break; 3354 3355 case INTEL_PT_CYC: 3356 intel_pt_calc_cyc_timestamp(decoder); 3357 break; 3358 3359 case INTEL_PT_CBR: 3360 intel_pt_calc_cbr(decoder); 3361 if (decoder->cbr != decoder->cbr_seen) { 3362 decoder->state.type = 0; 3363 return 0; 3364 } 3365 break; 3366 3367 case INTEL_PT_MODE_EXEC: 3368 intel_pt_mode_exec(decoder); 3369 err = intel_pt_get_next_packet(decoder); 3370 if (err) 3371 return err; 3372 if (decoder->packet.type == INTEL_PT_FUP) { 3373 decoder->set_fup_mode_exec = true; 3374 no_tip = true; 3375 } 3376 goto next; 3377 3378 case INTEL_PT_MODE_TSX: 3379 /* MODE_TSX need not be followed by FUP */ 3380 if (!decoder->pge || decoder->in_psb) { 3381 intel_pt_update_in_tx(decoder); 3382 break; 3383 } 3384 err = intel_pt_mode_tsx(decoder, &no_tip); 3385 if (err) 3386 return err; 3387 goto next; 3388 3389 case INTEL_PT_BAD: /* Does not happen */ 3390 return intel_pt_bug(decoder); 3391 3392 case INTEL_PT_PSBEND: 3393 case INTEL_PT_VMCS: 3394 case INTEL_PT_MNT: 3395 case INTEL_PT_PAD: 3396 break; 3397 3398 case INTEL_PT_PTWRITE_IP: 3399 decoder->fup_ptw_payload = decoder->packet.payload; 3400 err = intel_pt_get_next_packet(decoder); 3401 if (err) 3402 return err; 3403 if (decoder->packet.type == INTEL_PT_FUP) { 3404 decoder->set_fup_ptw = true; 3405 no_tip = true; 3406 } else { 3407 intel_pt_log_at("ERROR: Missing FUP after PTWRITE", 3408 decoder->pos); 3409 } 3410 goto next; 3411 3412 case INTEL_PT_PTWRITE: 3413 decoder->state.type = INTEL_PT_PTW; 3414 decoder->state.from_ip = decoder->ip; 3415 decoder->state.to_ip = 0; 3416 decoder->state.ptw_payload = decoder->packet.payload; 3417 return 0; 3418 3419 case INTEL_PT_MWAIT: 3420 decoder->fup_mwait_payload = decoder->packet.payload; 3421 decoder->set_fup_mwait = true; 3422 break; 3423 3424 case INTEL_PT_PWRE: 3425 if (decoder->set_fup_mwait) { 3426 decoder->fup_pwre_payload = 3427 decoder->packet.payload; 3428 decoder->set_fup_pwre = true; 3429 break; 3430 } 3431 decoder->state.type = INTEL_PT_PWR_ENTRY; 3432 decoder->state.from_ip = decoder->ip; 3433 decoder->state.to_ip = 0; 3434 decoder->state.pwrx_payload = decoder->packet.payload; 3435 return 0; 3436 3437 case INTEL_PT_EXSTOP_IP: 3438 err = intel_pt_get_next_packet(decoder); 3439 if (err) 3440 return err; 3441 if (decoder->packet.type == INTEL_PT_FUP) { 3442 decoder->set_fup_exstop = true; 3443 no_tip = true; 3444 } else { 3445 intel_pt_log_at("ERROR: Missing FUP after EXSTOP", 3446 decoder->pos); 3447 } 3448 goto next; 3449 3450 case INTEL_PT_EXSTOP: 3451 decoder->state.type = INTEL_PT_EX_STOP; 3452 decoder->state.from_ip = decoder->ip; 3453 decoder->state.to_ip = 0; 3454 return 0; 3455 3456 case INTEL_PT_PWRX: 3457 decoder->state.type = INTEL_PT_PWR_EXIT; 3458 decoder->state.from_ip = decoder->ip; 3459 decoder->state.to_ip = 0; 3460 decoder->state.pwrx_payload = decoder->packet.payload; 3461 return 0; 3462 3463 case INTEL_PT_BBP: 3464 intel_pt_bbp(decoder); 3465 break; 3466 3467 case INTEL_PT_BIP: 3468 intel_pt_bip(decoder); 3469 break; 3470 3471 case INTEL_PT_BEP: 3472 decoder->state.type = INTEL_PT_BLK_ITEMS; 3473 decoder->state.from_ip = decoder->ip; 3474 decoder->state.to_ip = 0; 3475 return 0; 3476 3477 case INTEL_PT_BEP_IP: 3478 err = intel_pt_get_next_packet(decoder); 3479 if (err) 3480 return err; 3481 if (decoder->packet.type == INTEL_PT_FUP) { 3482 decoder->set_fup_bep = true; 3483 no_tip = true; 3484 } else { 3485 intel_pt_log_at("ERROR: Missing FUP after BEP", 3486 decoder->pos); 3487 } 3488 goto next; 3489 3490 case INTEL_PT_CFE: 3491 decoder->fup_cfe_pkt = decoder->packet; 3492 decoder->set_fup_cfe = true; 3493 if (!decoder->pge) { 3494 intel_pt_fup_event(decoder, true); 3495 return 0; 3496 } 3497 break; 3498 3499 case INTEL_PT_CFE_IP: 3500 decoder->fup_cfe_pkt = decoder->packet; 3501 err = intel_pt_get_next_packet(decoder); 3502 if (err) 3503 return err; 3504 if (decoder->packet.type == INTEL_PT_FUP) { 3505 decoder->set_fup_cfe_ip = true; 3506 no_tip = true; 3507 } else { 3508 intel_pt_log_at("ERROR: Missing FUP after CFE", 3509 decoder->pos); 3510 } 3511 goto next; 3512 3513 case INTEL_PT_EVD: 3514 err = intel_pt_evd(decoder); 3515 if (err) 3516 return err; 3517 break; 3518 3519 default: 3520 return intel_pt_bug(decoder); 3521 } 3522 } 3523} 3524 3525static inline bool intel_pt_have_ip(struct intel_pt_decoder *decoder) 3526{ 3527 return decoder->packet.count && 3528 (decoder->have_last_ip || decoder->packet.count == 3 || 3529 decoder->packet.count == 6); 3530} 3531 3532/* Walk PSB+ packets to get in sync. */ 3533static int intel_pt_walk_psb(struct intel_pt_decoder *decoder) 3534{ 3535 int err; 3536 3537 decoder->in_psb = true; 3538 3539 while (1) { 3540 err = intel_pt_get_next_packet(decoder); 3541 if (err) 3542 goto out; 3543 3544 switch (decoder->packet.type) { 3545 case INTEL_PT_TIP_PGD: 3546 decoder->continuous_period = false; 3547 __fallthrough; 3548 case INTEL_PT_TIP_PGE: 3549 case INTEL_PT_TIP: 3550 case INTEL_PT_PTWRITE: 3551 case INTEL_PT_PTWRITE_IP: 3552 case INTEL_PT_EXSTOP: 3553 case INTEL_PT_EXSTOP_IP: 3554 case INTEL_PT_MWAIT: 3555 case INTEL_PT_PWRE: 3556 case INTEL_PT_PWRX: 3557 case INTEL_PT_BBP: 3558 case INTEL_PT_BIP: 3559 case INTEL_PT_BEP: 3560 case INTEL_PT_BEP_IP: 3561 case INTEL_PT_CFE: 3562 case INTEL_PT_CFE_IP: 3563 case INTEL_PT_EVD: 3564 intel_pt_log("ERROR: Unexpected packet\n"); 3565 err = -ENOENT; 3566 goto out; 3567 3568 case INTEL_PT_FUP: 3569 decoder->pge = true; 3570 if (intel_pt_have_ip(decoder)) { 3571 uint64_t current_ip = decoder->ip; 3572 3573 intel_pt_set_ip(decoder); 3574 decoder->psb_ip = decoder->ip; 3575 if (current_ip) 3576 intel_pt_log_to("Setting IP", 3577 decoder->ip); 3578 } 3579 break; 3580 3581 case INTEL_PT_MTC: 3582 intel_pt_calc_mtc_timestamp(decoder); 3583 break; 3584 3585 case INTEL_PT_TSC: 3586 intel_pt_calc_tsc_timestamp(decoder); 3587 break; 3588 3589 case INTEL_PT_TMA: 3590 intel_pt_calc_tma(decoder); 3591 break; 3592 3593 case INTEL_PT_CYC: 3594 intel_pt_calc_cyc_timestamp(decoder); 3595 break; 3596 3597 case INTEL_PT_CBR: 3598 intel_pt_calc_cbr(decoder); 3599 break; 3600 3601 case INTEL_PT_PIP: 3602 intel_pt_set_pip(decoder); 3603 break; 3604 3605 case INTEL_PT_MODE_EXEC: 3606 intel_pt_mode_exec_status(decoder); 3607 break; 3608 3609 case INTEL_PT_MODE_TSX: 3610 intel_pt_update_in_tx(decoder); 3611 break; 3612 3613 case INTEL_PT_TRACESTOP: 3614 decoder->pge = false; 3615 decoder->continuous_period = false; 3616 intel_pt_clear_tx_flags(decoder); 3617 __fallthrough; 3618 3619 case INTEL_PT_TNT: 3620 decoder->have_tma = false; 3621 intel_pt_log("ERROR: Unexpected packet\n"); 3622 if (decoder->ip) 3623 decoder->pkt_state = INTEL_PT_STATE_ERR4; 3624 else 3625 decoder->pkt_state = INTEL_PT_STATE_ERR3; 3626 err = -ENOENT; 3627 goto out; 3628 3629 case INTEL_PT_BAD: /* Does not happen */ 3630 err = intel_pt_bug(decoder); 3631 goto out; 3632 3633 case INTEL_PT_OVF: 3634 err = intel_pt_overflow(decoder); 3635 goto out; 3636 3637 case INTEL_PT_PSBEND: 3638 err = 0; 3639 goto out; 3640 3641 case INTEL_PT_PSB: 3642 case INTEL_PT_VMCS: 3643 case INTEL_PT_MNT: 3644 case INTEL_PT_PAD: 3645 default: 3646 break; 3647 } 3648 } 3649out: 3650 decoder->in_psb = false; 3651 3652 return err; 3653} 3654 3655static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder) 3656{ 3657 int err; 3658 3659 while (1) { 3660 err = intel_pt_get_next_packet(decoder); 3661 if (err) 3662 return err; 3663 3664 switch (decoder->packet.type) { 3665 case INTEL_PT_TIP_PGD: 3666 decoder->continuous_period = false; 3667 decoder->pge = false; 3668 if (intel_pt_have_ip(decoder)) 3669 intel_pt_set_ip(decoder); 3670 if (!decoder->ip) 3671 break; 3672 decoder->state.type |= INTEL_PT_TRACE_END; 3673 return 0; 3674 3675 case INTEL_PT_TIP_PGE: 3676 decoder->pge = true; 3677 intel_pt_mtc_cyc_cnt_pge(decoder); 3678 if (intel_pt_have_ip(decoder)) 3679 intel_pt_set_ip(decoder); 3680 if (!decoder->ip) 3681 break; 3682 decoder->state.type |= INTEL_PT_TRACE_BEGIN; 3683 return 0; 3684 3685 case INTEL_PT_TIP: 3686 decoder->pge = true; 3687 if (intel_pt_have_ip(decoder)) 3688 intel_pt_set_ip(decoder); 3689 if (!decoder->ip) 3690 break; 3691 return 0; 3692 3693 case INTEL_PT_FUP: 3694 if (intel_pt_have_ip(decoder)) 3695 intel_pt_set_ip(decoder); 3696 if (decoder->ip) 3697 return 0; 3698 break; 3699 3700 case INTEL_PT_MTC: 3701 intel_pt_calc_mtc_timestamp(decoder); 3702 break; 3703 3704 case INTEL_PT_TSC: 3705 intel_pt_calc_tsc_timestamp(decoder); 3706 break; 3707 3708 case INTEL_PT_TMA: 3709 intel_pt_calc_tma(decoder); 3710 break; 3711 3712 case INTEL_PT_CYC: 3713 intel_pt_calc_cyc_timestamp(decoder); 3714 break; 3715 3716 case INTEL_PT_CBR: 3717 intel_pt_calc_cbr(decoder); 3718 break; 3719 3720 case INTEL_PT_PIP: 3721 intel_pt_set_pip(decoder); 3722 break; 3723 3724 case INTEL_PT_MODE_EXEC: 3725 intel_pt_mode_exec_status(decoder); 3726 break; 3727 3728 case INTEL_PT_MODE_TSX: 3729 intel_pt_update_in_tx(decoder); 3730 break; 3731 3732 case INTEL_PT_OVF: 3733 return intel_pt_overflow(decoder); 3734 3735 case INTEL_PT_BAD: /* Does not happen */ 3736 return intel_pt_bug(decoder); 3737 3738 case INTEL_PT_TRACESTOP: 3739 decoder->pge = false; 3740 decoder->continuous_period = false; 3741 intel_pt_clear_tx_flags(decoder); 3742 decoder->have_tma = false; 3743 break; 3744 3745 case INTEL_PT_PSB: 3746 decoder->state.psb_offset = decoder->pos; 3747 decoder->psb_ip = 0; 3748 decoder->last_ip = 0; 3749 decoder->have_last_ip = true; 3750 intel_pt_clear_stack(&decoder->stack); 3751 err = intel_pt_walk_psb(decoder); 3752 if (err) 3753 return err; 3754 decoder->state.type = INTEL_PT_PSB_EVT; 3755 decoder->state.from_ip = decoder->psb_ip; 3756 decoder->state.to_ip = 0; 3757 return 0; 3758 3759 case INTEL_PT_TNT: 3760 case INTEL_PT_PSBEND: 3761 case INTEL_PT_VMCS: 3762 case INTEL_PT_MNT: 3763 case INTEL_PT_PAD: 3764 case INTEL_PT_PTWRITE: 3765 case INTEL_PT_PTWRITE_IP: 3766 case INTEL_PT_EXSTOP: 3767 case INTEL_PT_EXSTOP_IP: 3768 case INTEL_PT_MWAIT: 3769 case INTEL_PT_PWRE: 3770 case INTEL_PT_PWRX: 3771 case INTEL_PT_BBP: 3772 case INTEL_PT_BIP: 3773 case INTEL_PT_BEP: 3774 case INTEL_PT_BEP_IP: 3775 case INTEL_PT_CFE: 3776 case INTEL_PT_CFE_IP: 3777 case INTEL_PT_EVD: 3778 default: 3779 break; 3780 } 3781 } 3782} 3783 3784static int intel_pt_sync_ip(struct intel_pt_decoder *decoder) 3785{ 3786 int err; 3787 3788 intel_pt_clear_fup_event(decoder); 3789 decoder->overflow = false; 3790 3791 if (!decoder->branch_enable) { 3792 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 3793 decoder->state.type = 0; /* Do not have a sample */ 3794 return 0; 3795 } 3796 3797 intel_pt_log("Scanning for full IP\n"); 3798 err = intel_pt_walk_to_ip(decoder); 3799 if (err || ((decoder->state.type & INTEL_PT_PSB_EVT) && !decoder->ip)) 3800 return err; 3801 3802 /* In hop mode, resample to get the to_ip as an "instruction" sample */ 3803 if (decoder->hop) 3804 decoder->pkt_state = INTEL_PT_STATE_RESAMPLE; 3805 else 3806 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 3807 3808 decoder->state.from_ip = 0; 3809 decoder->state.to_ip = decoder->ip; 3810 intel_pt_log_to("Setting IP", decoder->ip); 3811 3812 return 0; 3813} 3814 3815static int intel_pt_part_psb(struct intel_pt_decoder *decoder) 3816{ 3817 const unsigned char *end = decoder->buf + decoder->len; 3818 size_t i; 3819 3820 for (i = INTEL_PT_PSB_LEN - 1; i; i--) { 3821 if (i > decoder->len) 3822 continue; 3823 if (!memcmp(end - i, INTEL_PT_PSB_STR, i)) 3824 return i; 3825 } 3826 return 0; 3827} 3828 3829static int intel_pt_rest_psb(struct intel_pt_decoder *decoder, int part_psb) 3830{ 3831 size_t rest_psb = INTEL_PT_PSB_LEN - part_psb; 3832 const char *psb = INTEL_PT_PSB_STR; 3833 3834 if (rest_psb > decoder->len || 3835 memcmp(decoder->buf, psb + part_psb, rest_psb)) 3836 return 0; 3837 3838 return rest_psb; 3839} 3840 3841static int intel_pt_get_split_psb(struct intel_pt_decoder *decoder, 3842 int part_psb) 3843{ 3844 int rest_psb, ret; 3845 3846 decoder->pos += decoder->len; 3847 decoder->len = 0; 3848 3849 ret = intel_pt_get_next_data(decoder, false); 3850 if (ret) 3851 return ret; 3852 3853 rest_psb = intel_pt_rest_psb(decoder, part_psb); 3854 if (!rest_psb) 3855 return 0; 3856 3857 decoder->pos -= part_psb; 3858 decoder->next_buf = decoder->buf + rest_psb; 3859 decoder->next_len = decoder->len - rest_psb; 3860 memcpy(decoder->temp_buf, INTEL_PT_PSB_STR, INTEL_PT_PSB_LEN); 3861 decoder->buf = decoder->temp_buf; 3862 decoder->len = INTEL_PT_PSB_LEN; 3863 3864 return 0; 3865} 3866 3867static int intel_pt_scan_for_psb(struct intel_pt_decoder *decoder) 3868{ 3869 unsigned char *next; 3870 int ret; 3871 3872 intel_pt_log("Scanning for PSB\n"); 3873 while (1) { 3874 if (!decoder->len) { 3875 ret = intel_pt_get_next_data(decoder, false); 3876 if (ret) 3877 return ret; 3878 } 3879 3880 next = memmem(decoder->buf, decoder->len, INTEL_PT_PSB_STR, 3881 INTEL_PT_PSB_LEN); 3882 if (!next) { 3883 int part_psb; 3884 3885 part_psb = intel_pt_part_psb(decoder); 3886 if (part_psb) { 3887 ret = intel_pt_get_split_psb(decoder, part_psb); 3888 if (ret) 3889 return ret; 3890 } else { 3891 decoder->pos += decoder->len; 3892 decoder->len = 0; 3893 } 3894 continue; 3895 } 3896 3897 decoder->pkt_step = next - decoder->buf; 3898 return intel_pt_get_next_packet(decoder); 3899 } 3900} 3901 3902static int intel_pt_sync(struct intel_pt_decoder *decoder) 3903{ 3904 int err; 3905 3906 decoder->pge = false; 3907 decoder->continuous_period = false; 3908 decoder->have_last_ip = false; 3909 decoder->last_ip = 0; 3910 decoder->psb_ip = 0; 3911 decoder->ip = 0; 3912 intel_pt_clear_stack(&decoder->stack); 3913 3914 err = intel_pt_scan_for_psb(decoder); 3915 if (err) 3916 return err; 3917 3918 if (decoder->vm_time_correlation) { 3919 decoder->in_psb = true; 3920 if (!decoder->timestamp) 3921 decoder->timestamp = 1; 3922 decoder->state.type = 0; 3923 decoder->pkt_state = INTEL_PT_STATE_VM_TIME_CORRELATION; 3924 return 0; 3925 } 3926 3927 decoder->have_last_ip = true; 3928 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 3929 3930 err = intel_pt_walk_psb(decoder); 3931 if (err) 3932 return err; 3933 3934 decoder->state.type = INTEL_PT_PSB_EVT; /* Only PSB sample */ 3935 decoder->state.from_ip = decoder->psb_ip; 3936 decoder->state.to_ip = 0; 3937 3938 if (decoder->ip) { 3939 /* 3940 * In hop mode, resample to get the PSB FUP ip as an 3941 * "instruction" sample. 3942 */ 3943 if (decoder->hop) 3944 decoder->pkt_state = INTEL_PT_STATE_RESAMPLE; 3945 else 3946 decoder->pkt_state = INTEL_PT_STATE_IN_SYNC; 3947 } 3948 3949 return 0; 3950} 3951 3952static uint64_t intel_pt_est_timestamp(struct intel_pt_decoder *decoder) 3953{ 3954 uint64_t est = decoder->sample_insn_cnt << 1; 3955 3956 if (!decoder->cbr || !decoder->max_non_turbo_ratio) 3957 goto out; 3958 3959 est *= decoder->max_non_turbo_ratio; 3960 est /= decoder->cbr; 3961out: 3962 return decoder->sample_timestamp + est; 3963} 3964 3965const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder) 3966{ 3967 int err; 3968 3969 do { 3970 decoder->state.type = INTEL_PT_BRANCH; 3971 decoder->state.flags = 0; 3972 3973 switch (decoder->pkt_state) { 3974 case INTEL_PT_STATE_NO_PSB: 3975 err = intel_pt_sync(decoder); 3976 break; 3977 case INTEL_PT_STATE_NO_IP: 3978 decoder->have_last_ip = false; 3979 decoder->last_ip = 0; 3980 decoder->ip = 0; 3981 __fallthrough; 3982 case INTEL_PT_STATE_ERR_RESYNC: 3983 err = intel_pt_sync_ip(decoder); 3984 break; 3985 case INTEL_PT_STATE_IN_SYNC: 3986 err = intel_pt_walk_trace(decoder); 3987 break; 3988 case INTEL_PT_STATE_TNT: 3989 case INTEL_PT_STATE_TNT_CONT: 3990 err = intel_pt_walk_tnt(decoder); 3991 if (err == -EAGAIN) 3992 err = intel_pt_walk_trace(decoder); 3993 break; 3994 case INTEL_PT_STATE_TIP: 3995 case INTEL_PT_STATE_TIP_PGD: 3996 err = intel_pt_walk_tip(decoder); 3997 break; 3998 case INTEL_PT_STATE_FUP: 3999 err = intel_pt_walk_fup(decoder); 4000 if (err == -EAGAIN) 4001 err = intel_pt_walk_fup_tip(decoder); 4002 break; 4003 case INTEL_PT_STATE_FUP_NO_TIP: 4004 err = intel_pt_walk_fup(decoder); 4005 if (err == -EAGAIN) 4006 err = intel_pt_walk_trace(decoder); 4007 break; 4008 case INTEL_PT_STATE_FUP_IN_PSB: 4009 err = intel_pt_fup_in_psb(decoder); 4010 break; 4011 case INTEL_PT_STATE_RESAMPLE: 4012 err = intel_pt_resample(decoder); 4013 break; 4014 case INTEL_PT_STATE_VM_TIME_CORRELATION: 4015 err = intel_pt_vm_time_correlation(decoder); 4016 break; 4017 default: 4018 err = intel_pt_bug(decoder); 4019 break; 4020 } 4021 } while (err == -ENOLINK); 4022 4023 if (err) { 4024 decoder->state.err = intel_pt_ext_err(err); 4025 if (err != -EOVERFLOW) 4026 decoder->state.from_ip = decoder->ip; 4027 intel_pt_update_sample_time(decoder); 4028 decoder->sample_tot_cyc_cnt = decoder->tot_cyc_cnt; 4029 intel_pt_set_nr(decoder); 4030 } else { 4031 decoder->state.err = 0; 4032 if (decoder->cbr != decoder->cbr_seen) { 4033 decoder->cbr_seen = decoder->cbr; 4034 if (!decoder->state.type) { 4035 decoder->state.from_ip = decoder->ip; 4036 decoder->state.to_ip = 0; 4037 } 4038 decoder->state.type |= INTEL_PT_CBR_CHG; 4039 decoder->state.cbr_payload = decoder->cbr_payload; 4040 decoder->state.cbr = decoder->cbr; 4041 } 4042 if (intel_pt_sample_time(decoder->pkt_state)) { 4043 intel_pt_update_sample_time(decoder); 4044 if (decoder->sample_cyc) { 4045 decoder->sample_tot_cyc_cnt = decoder->tot_cyc_cnt; 4046 decoder->state.flags |= INTEL_PT_SAMPLE_IPC; 4047 decoder->sample_cyc = false; 4048 } 4049 } 4050 /* 4051 * When using only TSC/MTC to compute cycles, IPC can be 4052 * sampled as soon as the cycle count changes. 4053 */ 4054 if (!decoder->have_cyc) 4055 decoder->state.flags |= INTEL_PT_SAMPLE_IPC; 4056 } 4057 4058 /* Let PSB event always have TSC timestamp */ 4059 if ((decoder->state.type & INTEL_PT_PSB_EVT) && decoder->tsc_timestamp) 4060 decoder->sample_timestamp = decoder->tsc_timestamp; 4061 4062 decoder->state.from_nr = decoder->nr; 4063 decoder->state.to_nr = decoder->next_nr; 4064 decoder->nr = decoder->next_nr; 4065 4066 decoder->state.timestamp = decoder->sample_timestamp; 4067 decoder->state.est_timestamp = intel_pt_est_timestamp(decoder); 4068 decoder->state.tot_insn_cnt = decoder->tot_insn_cnt; 4069 decoder->state.tot_cyc_cnt = decoder->sample_tot_cyc_cnt; 4070 4071 return &decoder->state; 4072} 4073 4074/** 4075 * intel_pt_next_psb - move buffer pointer to the start of the next PSB packet. 4076 * @buf: pointer to buffer pointer 4077 * @len: size of buffer 4078 * 4079 * Updates the buffer pointer to point to the start of the next PSB packet if 4080 * there is one, otherwise the buffer pointer is unchanged. If @buf is updated, 4081 * @len is adjusted accordingly. 4082 * 4083 * Return: %true if a PSB packet is found, %false otherwise. 4084 */ 4085static bool intel_pt_next_psb(unsigned char **buf, size_t *len) 4086{ 4087 unsigned char *next; 4088 4089 next = memmem(*buf, *len, INTEL_PT_PSB_STR, INTEL_PT_PSB_LEN); 4090 if (next) { 4091 *len -= next - *buf; 4092 *buf = next; 4093 return true; 4094 } 4095 return false; 4096} 4097 4098/** 4099 * intel_pt_step_psb - move buffer pointer to the start of the following PSB 4100 * packet. 4101 * @buf: pointer to buffer pointer 4102 * @len: size of buffer 4103 * 4104 * Updates the buffer pointer to point to the start of the following PSB packet 4105 * (skipping the PSB at @buf itself) if there is one, otherwise the buffer 4106 * pointer is unchanged. If @buf is updated, @len is adjusted accordingly. 4107 * 4108 * Return: %true if a PSB packet is found, %false otherwise. 4109 */ 4110static bool intel_pt_step_psb(unsigned char **buf, size_t *len) 4111{ 4112 unsigned char *next; 4113 4114 if (!*len) 4115 return false; 4116 4117 next = memmem(*buf + 1, *len - 1, INTEL_PT_PSB_STR, INTEL_PT_PSB_LEN); 4118 if (next) { 4119 *len -= next - *buf; 4120 *buf = next; 4121 return true; 4122 } 4123 return false; 4124} 4125 4126/** 4127 * intel_pt_last_psb - find the last PSB packet in a buffer. 4128 * @buf: buffer 4129 * @len: size of buffer 4130 * 4131 * This function finds the last PSB in a buffer. 4132 * 4133 * Return: A pointer to the last PSB in @buf if found, %NULL otherwise. 4134 */ 4135static unsigned char *intel_pt_last_psb(unsigned char *buf, size_t len) 4136{ 4137 const char *n = INTEL_PT_PSB_STR; 4138 unsigned char *p; 4139 size_t k; 4140 4141 if (len < INTEL_PT_PSB_LEN) 4142 return NULL; 4143 4144 k = len - INTEL_PT_PSB_LEN + 1; 4145 while (1) { 4146 p = memrchr(buf, n[0], k); 4147 if (!p) 4148 return NULL; 4149 if (!memcmp(p + 1, n + 1, INTEL_PT_PSB_LEN - 1)) 4150 return p; 4151 k = p - buf; 4152 if (!k) 4153 return NULL; 4154 } 4155} 4156 4157/** 4158 * intel_pt_next_tsc - find and return next TSC. 4159 * @buf: buffer 4160 * @len: size of buffer 4161 * @tsc: TSC value returned 4162 * @rem: returns remaining size when TSC is found 4163 * 4164 * Find a TSC packet in @buf and return the TSC value. This function assumes 4165 * that @buf starts at a PSB and that PSB+ will contain TSC and so stops if a 4166 * PSBEND packet is found. 4167 * 4168 * Return: %true if TSC is found, false otherwise. 4169 */ 4170static bool intel_pt_next_tsc(unsigned char *buf, size_t len, uint64_t *tsc, 4171 size_t *rem) 4172{ 4173 enum intel_pt_pkt_ctx ctx = INTEL_PT_NO_CTX; 4174 struct intel_pt_pkt packet; 4175 int ret; 4176 4177 while (len) { 4178 ret = intel_pt_get_packet(buf, len, &packet, &ctx); 4179 if (ret <= 0) 4180 return false; 4181 if (packet.type == INTEL_PT_TSC) { 4182 *tsc = packet.payload; 4183 *rem = len; 4184 return true; 4185 } 4186 if (packet.type == INTEL_PT_PSBEND) 4187 return false; 4188 buf += ret; 4189 len -= ret; 4190 } 4191 return false; 4192} 4193 4194/** 4195 * intel_pt_tsc_cmp - compare 7-byte TSCs. 4196 * @tsc1: first TSC to compare 4197 * @tsc2: second TSC to compare 4198 * 4199 * This function compares 7-byte TSC values allowing for the possibility that 4200 * TSC wrapped around. Generally it is not possible to know if TSC has wrapped 4201 * around so for that purpose this function assumes the absolute difference is 4202 * less than half the maximum difference. 4203 * 4204 * Return: %-1 if @tsc1 is before @tsc2, %0 if @tsc1 == @tsc2, %1 if @tsc1 is 4205 * after @tsc2. 4206 */ 4207static int intel_pt_tsc_cmp(uint64_t tsc1, uint64_t tsc2) 4208{ 4209 const uint64_t halfway = (1ULL << 55); 4210 4211 if (tsc1 == tsc2) 4212 return 0; 4213 4214 if (tsc1 < tsc2) { 4215 if (tsc2 - tsc1 < halfway) 4216 return -1; 4217 else 4218 return 1; 4219 } else { 4220 if (tsc1 - tsc2 < halfway) 4221 return 1; 4222 else 4223 return -1; 4224 } 4225} 4226 4227#define MAX_PADDING (PERF_AUXTRACE_RECORD_ALIGNMENT - 1) 4228 4229/** 4230 * adj_for_padding - adjust overlap to account for padding. 4231 * @buf_b: second buffer 4232 * @buf_a: first buffer 4233 * @len_a: size of first buffer 4234 * 4235 * @buf_a might have up to 7 bytes of padding appended. Adjust the overlap 4236 * accordingly. 4237 * 4238 * Return: A pointer into @buf_b from where non-overlapped data starts 4239 */ 4240static unsigned char *adj_for_padding(unsigned char *buf_b, 4241 unsigned char *buf_a, size_t len_a) 4242{ 4243 unsigned char *p = buf_b - MAX_PADDING; 4244 unsigned char *q = buf_a + len_a - MAX_PADDING; 4245 int i; 4246 4247 for (i = MAX_PADDING; i; i--, p++, q++) { 4248 if (*p != *q) 4249 break; 4250 } 4251 4252 return p; 4253} 4254 4255/** 4256 * intel_pt_find_overlap_tsc - determine start of non-overlapped trace data 4257 * using TSC. 4258 * @buf_a: first buffer 4259 * @len_a: size of first buffer 4260 * @buf_b: second buffer 4261 * @len_b: size of second buffer 4262 * @consecutive: returns true if there is data in buf_b that is consecutive 4263 * to buf_a 4264 * @ooo_tsc: out-of-order TSC due to VM TSC offset / scaling 4265 * 4266 * If the trace contains TSC we can look at the last TSC of @buf_a and the 4267 * first TSC of @buf_b in order to determine if the buffers overlap, and then 4268 * walk forward in @buf_b until a later TSC is found. A precondition is that 4269 * @buf_a and @buf_b are positioned at a PSB. 4270 * 4271 * Return: A pointer into @buf_b from where non-overlapped data starts, or 4272 * @buf_b + @len_b if there is no non-overlapped data. 4273 */ 4274static unsigned char *intel_pt_find_overlap_tsc(unsigned char *buf_a, 4275 size_t len_a, 4276 unsigned char *buf_b, 4277 size_t len_b, bool *consecutive, 4278 bool ooo_tsc) 4279{ 4280 uint64_t tsc_a, tsc_b; 4281 unsigned char *p; 4282 size_t len, rem_a, rem_b; 4283 4284 p = intel_pt_last_psb(buf_a, len_a); 4285 if (!p) 4286 return buf_b; /* No PSB in buf_a => no overlap */ 4287 4288 len = len_a - (p - buf_a); 4289 if (!intel_pt_next_tsc(p, len, &tsc_a, &rem_a)) { 4290 /* The last PSB+ in buf_a is incomplete, so go back one more */ 4291 len_a -= len; 4292 p = intel_pt_last_psb(buf_a, len_a); 4293 if (!p) 4294 return buf_b; /* No full PSB+ => assume no overlap */ 4295 len = len_a - (p - buf_a); 4296 if (!intel_pt_next_tsc(p, len, &tsc_a, &rem_a)) 4297 return buf_b; /* No TSC in buf_a => assume no overlap */ 4298 } 4299 4300 while (1) { 4301 /* Ignore PSB+ with no TSC */ 4302 if (intel_pt_next_tsc(buf_b, len_b, &tsc_b, &rem_b)) { 4303 int cmp = intel_pt_tsc_cmp(tsc_a, tsc_b); 4304 4305 /* Same TSC, so buffers are consecutive */ 4306 if (!cmp && rem_b >= rem_a) { 4307 unsigned char *start; 4308 4309 *consecutive = true; 4310 start = buf_b + len_b - (rem_b - rem_a); 4311 return adj_for_padding(start, buf_a, len_a); 4312 } 4313 if (cmp < 0 && !ooo_tsc) 4314 return buf_b; /* tsc_a < tsc_b => no overlap */ 4315 } 4316 4317 if (!intel_pt_step_psb(&buf_b, &len_b)) 4318 return buf_b + len_b; /* No PSB in buf_b => no data */ 4319 } 4320} 4321 4322/** 4323 * intel_pt_find_overlap - determine start of non-overlapped trace data. 4324 * @buf_a: first buffer 4325 * @len_a: size of first buffer 4326 * @buf_b: second buffer 4327 * @len_b: size of second buffer 4328 * @have_tsc: can use TSC packets to detect overlap 4329 * @consecutive: returns true if there is data in buf_b that is consecutive 4330 * to buf_a 4331 * @ooo_tsc: out-of-order TSC due to VM TSC offset / scaling 4332 * 4333 * When trace samples or snapshots are recorded there is the possibility that 4334 * the data overlaps. Note that, for the purposes of decoding, data is only 4335 * useful if it begins with a PSB packet. 4336 * 4337 * Return: A pointer into @buf_b from where non-overlapped data starts, or 4338 * @buf_b + @len_b if there is no non-overlapped data. 4339 */ 4340unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a, 4341 unsigned char *buf_b, size_t len_b, 4342 bool have_tsc, bool *consecutive, 4343 bool ooo_tsc) 4344{ 4345 unsigned char *found; 4346 4347 /* Buffer 'b' must start at PSB so throw away everything before that */ 4348 if (!intel_pt_next_psb(&buf_b, &len_b)) 4349 return buf_b + len_b; /* No PSB */ 4350 4351 if (!intel_pt_next_psb(&buf_a, &len_a)) 4352 return buf_b; /* No overlap */ 4353 4354 if (have_tsc) { 4355 found = intel_pt_find_overlap_tsc(buf_a, len_a, buf_b, len_b, 4356 consecutive, ooo_tsc); 4357 if (found) 4358 return found; 4359 } 4360 4361 /* 4362 * Buffer 'b' cannot end within buffer 'a' so, for comparison purposes, 4363 * we can ignore the first part of buffer 'a'. 4364 */ 4365 while (len_b < len_a) { 4366 if (!intel_pt_step_psb(&buf_a, &len_a)) 4367 return buf_b; /* No overlap */ 4368 } 4369 4370 /* Now len_b >= len_a */ 4371 while (1) { 4372 /* Potential overlap so check the bytes */ 4373 found = memmem(buf_a, len_a, buf_b, len_a); 4374 if (found) { 4375 *consecutive = true; 4376 return adj_for_padding(buf_b + len_a, buf_a, len_a); 4377 } 4378 4379 /* Try again at next PSB in buffer 'a' */ 4380 if (!intel_pt_step_psb(&buf_a, &len_a)) 4381 return buf_b; /* No overlap */ 4382 } 4383} 4384 4385/** 4386 * struct fast_forward_data - data used by intel_pt_ff_cb(). 4387 * @timestamp: timestamp to fast forward towards 4388 * @buf_timestamp: buffer timestamp of last buffer with trace data earlier than 4389 * the fast forward timestamp. 4390 */ 4391struct fast_forward_data { 4392 uint64_t timestamp; 4393 uint64_t buf_timestamp; 4394}; 4395 4396/** 4397 * intel_pt_ff_cb - fast forward lookahead callback. 4398 * @buffer: Intel PT trace buffer 4399 * @data: opaque pointer to fast forward data (struct fast_forward_data) 4400 * 4401 * Determine if @buffer trace is past the fast forward timestamp. 4402 * 4403 * Return: 1 (stop lookahead) if @buffer trace is past the fast forward 4404 * timestamp, and 0 otherwise. 4405 */ 4406static int intel_pt_ff_cb(struct intel_pt_buffer *buffer, void *data) 4407{ 4408 struct fast_forward_data *d = data; 4409 unsigned char *buf; 4410 uint64_t tsc; 4411 size_t rem; 4412 size_t len; 4413 4414 buf = (unsigned char *)buffer->buf; 4415 len = buffer->len; 4416 4417 if (!intel_pt_next_psb(&buf, &len) || 4418 !intel_pt_next_tsc(buf, len, &tsc, &rem)) 4419 return 0; 4420 4421 tsc = intel_pt_8b_tsc(tsc, buffer->ref_timestamp); 4422 4423 intel_pt_log("Buffer 1st timestamp " x64_fmt " ref timestamp " x64_fmt "\n", 4424 tsc, buffer->ref_timestamp); 4425 4426 /* 4427 * If the buffer contains a timestamp earlier that the fast forward 4428 * timestamp, then record it, else stop. 4429 */ 4430 if (tsc < d->timestamp) 4431 d->buf_timestamp = buffer->ref_timestamp; 4432 else 4433 return 1; 4434 4435 return 0; 4436} 4437 4438/** 4439 * intel_pt_fast_forward - reposition decoder forwards. 4440 * @decoder: Intel PT decoder 4441 * @timestamp: timestamp to fast forward towards 4442 * 4443 * Reposition decoder at the last PSB with a timestamp earlier than @timestamp. 4444 * 4445 * Return: 0 on success or negative error code on failure. 4446 */ 4447int intel_pt_fast_forward(struct intel_pt_decoder *decoder, uint64_t timestamp) 4448{ 4449 struct fast_forward_data d = { .timestamp = timestamp }; 4450 unsigned char *buf; 4451 size_t len; 4452 int err; 4453 4454 intel_pt_log("Fast forward towards timestamp " x64_fmt "\n", timestamp); 4455 4456 /* Find buffer timestamp of buffer to fast forward to */ 4457 err = decoder->lookahead(decoder->data, intel_pt_ff_cb, &d); 4458 if (err < 0) 4459 return err; 4460 4461 /* Walk to buffer with same buffer timestamp */ 4462 if (d.buf_timestamp) { 4463 do { 4464 decoder->pos += decoder->len; 4465 decoder->len = 0; 4466 err = intel_pt_get_next_data(decoder, true); 4467 /* -ENOLINK means non-consecutive trace */ 4468 if (err && err != -ENOLINK) 4469 return err; 4470 } while (decoder->buf_timestamp != d.buf_timestamp); 4471 } 4472 4473 if (!decoder->buf) 4474 return 0; 4475 4476 buf = (unsigned char *)decoder->buf; 4477 len = decoder->len; 4478 4479 if (!intel_pt_next_psb(&buf, &len)) 4480 return 0; 4481 4482 /* 4483 * Walk PSBs while the PSB timestamp is less than the fast forward 4484 * timestamp. 4485 */ 4486 do { 4487 uint64_t tsc; 4488 size_t rem; 4489 4490 if (!intel_pt_next_tsc(buf, len, &tsc, &rem)) 4491 break; 4492 tsc = intel_pt_8b_tsc(tsc, decoder->buf_timestamp); 4493 /* 4494 * A TSC packet can slip past MTC packets but, after fast 4495 * forward, decoding starts at the TSC timestamp. That means 4496 * the timestamps may not be exactly the same as the timestamps 4497 * that would have been decoded without fast forward. 4498 */ 4499 if (tsc < timestamp) { 4500 intel_pt_log("Fast forward to next PSB timestamp " x64_fmt "\n", tsc); 4501 decoder->pos += decoder->len - len; 4502 decoder->buf = buf; 4503 decoder->len = len; 4504 intel_pt_reposition(decoder); 4505 } else { 4506 break; 4507 } 4508 } while (intel_pt_step_psb(&buf, &len)); 4509 4510 return 0; 4511}