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