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