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