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