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