Lines Matching refs:decoder
46 static void pt_insn_reset(struct pt_insn_decoder *decoder) in pt_insn_reset() argument
48 if (!decoder) in pt_insn_reset()
51 decoder->mode = ptem_unknown; in pt_insn_reset()
52 decoder->ip = 0ull; in pt_insn_reset()
53 decoder->status = 0; in pt_insn_reset()
54 decoder->enabled = 0; in pt_insn_reset()
55 decoder->process_event = 0; in pt_insn_reset()
56 decoder->speculative = 0; in pt_insn_reset()
57 decoder->process_insn = 0; in pt_insn_reset()
58 decoder->bound_paging = 0; in pt_insn_reset()
59 decoder->bound_vmcs = 0; in pt_insn_reset()
60 decoder->bound_ptwrite = 0; in pt_insn_reset()
62 pt_retstack_init(&decoder->retstack); in pt_insn_reset()
63 pt_asid_init(&decoder->asid); in pt_insn_reset()
66 static int pt_insn_status(const struct pt_insn_decoder *decoder, int flags) in pt_insn_status() argument
70 if (!decoder) in pt_insn_status()
73 status = decoder->status; in pt_insn_status()
80 if (!decoder->enabled) in pt_insn_status()
87 if ((status & pts_eos) && !decoder->process_event) in pt_insn_status()
106 int pt_insn_decoder_init(struct pt_insn_decoder *decoder, in pt_insn_decoder_init() argument
112 if (!decoder) in pt_insn_decoder_init()
120 decoder->flags = config.flags; in pt_insn_decoder_init()
123 errcode = pt_insn_init_qry_flags(&config.flags, &decoder->flags); in pt_insn_decoder_init()
127 errcode = pt_qry_decoder_init(&decoder->query, &config); in pt_insn_decoder_init()
131 pt_image_init(&decoder->default_image, NULL); in pt_insn_decoder_init()
132 decoder->image = &decoder->default_image; in pt_insn_decoder_init()
134 errcode = pt_msec_cache_init(&decoder->scache); in pt_insn_decoder_init()
138 pt_insn_reset(decoder); in pt_insn_decoder_init()
143 void pt_insn_decoder_fini(struct pt_insn_decoder *decoder) in pt_insn_decoder_fini() argument
145 if (!decoder) in pt_insn_decoder_fini()
148 pt_msec_cache_fini(&decoder->scache); in pt_insn_decoder_fini()
149 pt_image_fini(&decoder->default_image); in pt_insn_decoder_fini()
150 pt_qry_decoder_fini(&decoder->query); in pt_insn_decoder_fini()
155 struct pt_insn_decoder *decoder; in pt_insn_alloc_decoder() local
158 decoder = malloc(sizeof(*decoder)); in pt_insn_alloc_decoder()
159 if (!decoder) in pt_insn_alloc_decoder()
162 errcode = pt_insn_decoder_init(decoder, config); in pt_insn_alloc_decoder()
164 free(decoder); in pt_insn_alloc_decoder()
168 return decoder; in pt_insn_alloc_decoder()
171 void pt_insn_free_decoder(struct pt_insn_decoder *decoder) in pt_insn_free_decoder() argument
173 if (!decoder) in pt_insn_free_decoder()
176 pt_insn_decoder_fini(decoder); in pt_insn_free_decoder()
177 free(decoder); in pt_insn_free_decoder()
189 static int pt_insn_tick(struct pt_insn_decoder *decoder, uint64_t ip) in pt_insn_tick() argument
196 if (!decoder) in pt_insn_tick()
200 if (!decoder->enabled) in pt_insn_tick()
214 if (decoder->process_event) in pt_insn_tick()
217 errcode = pt_qry_time(&decoder->query, &tsc, &lost_mtc, &lost_cyc); in pt_insn_tick()
224 ev = &decoder->event; in pt_insn_tick()
243 decoder->process_event = 1; in pt_insn_tick()
252 static int pt_insn_indirect_branch(struct pt_insn_decoder *decoder, in pt_insn_indirect_branch() argument
258 if (!decoder) in pt_insn_indirect_branch()
261 evip = decoder->ip; in pt_insn_indirect_branch()
263 status = pt_qry_indirect_branch(&decoder->query, ip); in pt_insn_indirect_branch()
267 if (decoder->flags.variant.insn.enable_tick_events) { in pt_insn_indirect_branch()
268 errcode = pt_insn_tick(decoder, evip); in pt_insn_indirect_branch()
280 static int pt_insn_cond_branch(struct pt_insn_decoder *decoder, int *taken) in pt_insn_cond_branch() argument
284 if (!decoder) in pt_insn_cond_branch()
287 status = pt_qry_cond_branch(&decoder->query, taken); in pt_insn_cond_branch()
291 if (decoder->flags.variant.insn.enable_tick_events) { in pt_insn_cond_branch()
292 errcode = pt_insn_tick(decoder, decoder->ip); in pt_insn_cond_branch()
300 static int pt_insn_start(struct pt_insn_decoder *decoder, int status) in pt_insn_start() argument
302 if (!decoder) in pt_insn_start()
308 decoder->status = status; in pt_insn_start()
311 decoder->enabled = 1; in pt_insn_start()
323 return pt_insn_check_ip_event(decoder, NULL, NULL); in pt_insn_start()
326 int pt_insn_sync_forward(struct pt_insn_decoder *decoder) in pt_insn_sync_forward() argument
330 if (!decoder) in pt_insn_sync_forward()
333 pt_insn_reset(decoder); in pt_insn_sync_forward()
335 status = pt_qry_sync_forward(&decoder->query, &decoder->ip); in pt_insn_sync_forward()
337 return pt_insn_start(decoder, status); in pt_insn_sync_forward()
340 int pt_insn_sync_backward(struct pt_insn_decoder *decoder) in pt_insn_sync_backward() argument
344 if (!decoder) in pt_insn_sync_backward()
347 pt_insn_reset(decoder); in pt_insn_sync_backward()
349 status = pt_qry_sync_backward(&decoder->query, &decoder->ip); in pt_insn_sync_backward()
351 return pt_insn_start(decoder, status); in pt_insn_sync_backward()
354 int pt_insn_sync_set(struct pt_insn_decoder *decoder, uint64_t offset) in pt_insn_sync_set() argument
358 if (!decoder) in pt_insn_sync_set()
361 pt_insn_reset(decoder); in pt_insn_sync_set()
363 status = pt_qry_sync_set(&decoder->query, &decoder->ip, offset); in pt_insn_sync_set()
365 return pt_insn_start(decoder, status); in pt_insn_sync_set()
368 int pt_insn_get_offset(const struct pt_insn_decoder *decoder, uint64_t *offset) in pt_insn_get_offset() argument
370 if (!decoder) in pt_insn_get_offset()
373 return pt_qry_get_offset(&decoder->query, offset); in pt_insn_get_offset()
376 int pt_insn_get_sync_offset(const struct pt_insn_decoder *decoder, in pt_insn_get_sync_offset() argument
379 if (!decoder) in pt_insn_get_sync_offset()
382 return pt_qry_get_sync_offset(&decoder->query, offset); in pt_insn_get_sync_offset()
385 struct pt_image *pt_insn_get_image(struct pt_insn_decoder *decoder) in pt_insn_get_image() argument
387 if (!decoder) in pt_insn_get_image()
390 return decoder->image; in pt_insn_get_image()
393 int pt_insn_set_image(struct pt_insn_decoder *decoder, in pt_insn_set_image() argument
396 if (!decoder) in pt_insn_set_image()
400 image = &decoder->default_image; in pt_insn_set_image()
402 decoder->image = image; in pt_insn_set_image()
407 pt_insn_get_config(const struct pt_insn_decoder *decoder) in pt_insn_get_config() argument
409 if (!decoder) in pt_insn_get_config()
412 return pt_qry_get_config(&decoder->query); in pt_insn_get_config()
415 int pt_insn_time(struct pt_insn_decoder *decoder, uint64_t *time, in pt_insn_time() argument
418 if (!decoder || !time) in pt_insn_time()
421 return pt_qry_time(&decoder->query, time, lost_mtc, lost_cyc); in pt_insn_time()
424 int pt_insn_core_bus_ratio(struct pt_insn_decoder *decoder, uint32_t *cbr) in pt_insn_core_bus_ratio() argument
426 if (!decoder || !cbr) in pt_insn_core_bus_ratio()
429 return pt_qry_core_bus_ratio(&decoder->query, cbr); in pt_insn_core_bus_ratio()
432 int pt_insn_asid(const struct pt_insn_decoder *decoder, struct pt_asid *asid, in pt_insn_asid() argument
435 if (!decoder || !asid) in pt_insn_asid()
438 return pt_asid_to_user(asid, &decoder->asid, size); in pt_insn_asid()
441 static inline int event_pending(struct pt_insn_decoder *decoder) in event_pending() argument
445 if (!decoder) in event_pending()
448 if (decoder->process_event) in event_pending()
451 status = decoder->status; in event_pending()
455 status = pt_qry_event(&decoder->query, &decoder->event, in event_pending()
456 sizeof(decoder->event)); in event_pending()
460 decoder->process_event = 1; in event_pending()
461 decoder->status = status; in event_pending()
465 static int check_erratum_skd022(struct pt_insn_decoder *decoder) in check_erratum_skd022() argument
471 if (!decoder) in check_erratum_skd022()
474 insn.mode = decoder->mode; in check_erratum_skd022()
475 insn.ip = decoder->ip; in check_erratum_skd022()
477 errcode = pt_insn_decode(&insn, &iext, decoder->image, &decoder->asid); in check_erratum_skd022()
491 static inline int handle_erratum_skd022(struct pt_insn_decoder *decoder) in handle_erratum_skd022() argument
497 if (!decoder) in handle_erratum_skd022()
500 errcode = check_erratum_skd022(decoder); in handle_erratum_skd022()
507 ev = &decoder->event; in handle_erratum_skd022()
517 static int pt_insn_proceed(struct pt_insn_decoder *decoder, in pt_insn_proceed() argument
521 if (!decoder || !insn || !iext) in pt_insn_proceed()
525 decoder->ip += insn->size; in pt_insn_proceed()
541 status = pt_insn_cond_branch(decoder, &taken); in pt_insn_proceed()
545 decoder->status = status; in pt_insn_proceed()
560 pt_retstack_push(&decoder->retstack, decoder->ip); in pt_insn_proceed()
568 status = pt_insn_cond_branch(decoder, &taken); in pt_insn_proceed()
570 decoder->status = status; in pt_insn_proceed()
578 return pt_retstack_pop(&decoder->retstack, in pt_insn_proceed()
579 &decoder->ip); in pt_insn_proceed()
601 decoder->ip += iext->variant.branch.displacement; in pt_insn_proceed()
605 status = pt_insn_indirect_branch(decoder, &decoder->ip); in pt_insn_proceed()
610 decoder->status = status; in pt_insn_proceed()
731 static int pt_insn_postpone(struct pt_insn_decoder *decoder, in pt_insn_postpone() argument
735 if (!decoder || !insn || !iext) in pt_insn_postpone()
738 if (!decoder->process_insn) { in pt_insn_postpone()
739 decoder->process_insn = 1; in pt_insn_postpone()
740 decoder->insn = *insn; in pt_insn_postpone()
741 decoder->iext = *iext; in pt_insn_postpone()
744 return pt_insn_status(decoder, pts_event_pending); in pt_insn_postpone()
751 static int pt_insn_clear_postponed(struct pt_insn_decoder *decoder) in pt_insn_clear_postponed() argument
753 if (!decoder) in pt_insn_clear_postponed()
756 decoder->process_insn = 0; in pt_insn_clear_postponed()
757 decoder->bound_paging = 0; in pt_insn_clear_postponed()
758 decoder->bound_vmcs = 0; in pt_insn_clear_postponed()
759 decoder->bound_ptwrite = 0; in pt_insn_clear_postponed()
768 static int pt_insn_proceed_postponed(struct pt_insn_decoder *decoder) in pt_insn_proceed_postponed() argument
772 if (!decoder) in pt_insn_proceed_postponed()
775 if (!decoder->process_insn) in pt_insn_proceed_postponed()
779 if (!decoder->enabled) in pt_insn_proceed_postponed()
780 return pt_insn_clear_postponed(decoder); in pt_insn_proceed_postponed()
782 status = pt_insn_proceed(decoder, &decoder->insn, &decoder->iext); in pt_insn_proceed_postponed()
786 return pt_insn_clear_postponed(decoder); in pt_insn_proceed_postponed()
804 static int pt_insn_check_insn_event(struct pt_insn_decoder *decoder, in pt_insn_check_insn_event() argument
811 if (!decoder) in pt_insn_check_insn_event()
814 status = event_pending(decoder); in pt_insn_check_insn_event()
818 ev = &decoder->event; in pt_insn_check_insn_event()
841 &decoder->query.config); in pt_insn_check_insn_event()
849 status = pt_insn_next_ip(&decoder->ip, insn, iext); in pt_insn_check_insn_event()
852 decoder->ip = 0ull; in pt_insn_check_insn_event()
868 decoder->ip = insn->ip + insn->size; in pt_insn_check_insn_event()
880 if (decoder->bound_paging) in pt_insn_check_insn_event()
889 decoder->bound_paging = 1; in pt_insn_check_insn_event()
891 return pt_insn_postpone(decoder, insn, iext); in pt_insn_check_insn_event()
895 if (decoder->bound_vmcs) in pt_insn_check_insn_event()
904 decoder->bound_vmcs = 1; in pt_insn_check_insn_event()
906 return pt_insn_postpone(decoder, insn, iext); in pt_insn_check_insn_event()
910 if (decoder->bound_ptwrite) in pt_insn_check_insn_event()
920 ev->variant.ptwrite.ip = decoder->ip; in pt_insn_check_insn_event()
930 if (decoder->ip != ev->variant.ptwrite.ip) in pt_insn_check_insn_event()
937 decoder->bound_ptwrite = 1; in pt_insn_check_insn_event()
939 return pt_insn_postpone(decoder, insn, iext); in pt_insn_check_insn_event()
942 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_insn_event()
961 static int handle_erratum_bdm64(struct pt_insn_decoder *decoder, in handle_erratum_bdm64() argument
968 if (!decoder || !ev || !insn || !iext) in handle_erratum_bdm64()
984 status = pt_insn_range_is_contiguous(decoder->ip, ev->variant.tsx.ip, in handle_erratum_bdm64()
985 decoder->mode, decoder->image, in handle_erratum_bdm64()
986 &decoder->asid, bdm64_max_steps); in handle_erratum_bdm64()
996 decoder->ip = ev->variant.tsx.ip; in handle_erratum_bdm64()
1009 static inline int pt_insn_postpone_tsx(struct pt_insn_decoder *decoder, in pt_insn_postpone_tsx() argument
1016 if (!decoder || !ev) in pt_insn_postpone_tsx()
1022 if (insn && iext && decoder->query.config.errata.bdm64) { in pt_insn_postpone_tsx()
1023 status = handle_erratum_bdm64(decoder, ev, insn, iext); in pt_insn_postpone_tsx()
1028 if (decoder->ip != ev->variant.tsx.ip) in pt_insn_postpone_tsx()
1042 static int pt_insn_check_ip_event(struct pt_insn_decoder *decoder, in pt_insn_check_ip_event() argument
1049 if (!decoder) in pt_insn_check_ip_event()
1052 status = event_pending(decoder); in pt_insn_check_ip_event()
1057 return pt_insn_status(decoder, 0); in pt_insn_check_ip_event()
1060 ev = &decoder->event; in pt_insn_check_ip_event()
1066 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1069 if (ev->variant.async_disabled.at != decoder->ip) in pt_insn_check_ip_event()
1072 if (decoder->query.config.errata.skd022) { in pt_insn_check_ip_event()
1075 errcode = handle_erratum_skd022(decoder); in pt_insn_check_ip_event()
1088 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1091 status = pt_insn_postpone_tsx(decoder, insn, iext, ev); in pt_insn_check_ip_event()
1099 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1102 if (ev->variant.async_branch.from != decoder->ip) in pt_insn_check_ip_event()
1105 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1108 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1112 ev->variant.exec_mode.ip != decoder->ip) in pt_insn_check_ip_event()
1115 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1118 if (decoder->enabled) in pt_insn_check_ip_event()
1121 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1125 ev->variant.async_paging.ip != decoder->ip) in pt_insn_check_ip_event()
1128 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1131 if (decoder->enabled) in pt_insn_check_ip_event()
1134 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1138 ev->variant.async_vmcs.ip != decoder->ip) in pt_insn_check_ip_event()
1141 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1144 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1147 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_check_ip_event()
1148 decoder->ip != ev->variant.exstop.ip) in pt_insn_check_ip_event()
1151 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1154 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_check_ip_event()
1155 decoder->ip != ev->variant.mwait.ip) in pt_insn_check_ip_event()
1158 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1162 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1175 if (decoder->enabled) in pt_insn_check_ip_event()
1178 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1183 return pt_insn_status(decoder, pts_event_pending); in pt_insn_check_ip_event()
1186 return pt_insn_status(decoder, 0); in pt_insn_check_ip_event()
1210 static int pt_insn_decode_cached(struct pt_insn_decoder *decoder, in pt_insn_decode_cached() argument
1216 if (!decoder || !insn || !iext) in pt_insn_decode_cached()
1228 return pt_insn_decode(insn, iext, decoder->image, in pt_insn_decode_cached()
1229 &decoder->asid); in pt_insn_decode_cached()
1236 return pt_insn_decode(insn, iext, decoder->image, in pt_insn_decode_cached()
1237 &decoder->asid); in pt_insn_decode_cached()
1250 return pt_insn_decode(insn, iext, decoder->image, in pt_insn_decode_cached()
1251 &decoder->asid); in pt_insn_decode_cached()
1257 static int pt_insn_msec_lookup(struct pt_insn_decoder *decoder, in pt_insn_msec_lookup() argument
1265 if (!decoder || !pmsec) in pt_insn_msec_lookup()
1268 scache = &decoder->scache; in pt_insn_msec_lookup()
1269 image = decoder->image; in pt_insn_msec_lookup()
1270 ip = decoder->ip; in pt_insn_msec_lookup()
1278 &decoder->asid, ip); in pt_insn_msec_lookup()
1284 int pt_insn_next(struct pt_insn_decoder *decoder, struct pt_insn *uinsn, in pt_insn_next() argument
1292 if (!uinsn || !decoder) in pt_insn_next()
1300 if (!decoder->enabled) { in pt_insn_next()
1301 if (decoder->status & pts_eos) in pt_insn_next()
1317 if (decoder->speculative) in pt_insn_next()
1319 pinsn->ip = decoder->ip; in pt_insn_next()
1320 pinsn->mode = decoder->mode; in pt_insn_next()
1322 isid = pt_insn_msec_lookup(decoder, &msec); in pt_insn_next()
1335 status = pt_insn_decode_cached(decoder, msec, pinsn, &iext); in pt_insn_next()
1355 status = pt_insn_check_insn_event(decoder, pinsn, &iext); in pt_insn_next()
1365 status = pt_insn_proceed(decoder, pinsn, &iext); in pt_insn_next()
1374 return pt_insn_check_ip_event(decoder, pinsn, &iext); in pt_insn_next()
1377 static int pt_insn_process_enabled(struct pt_insn_decoder *decoder) in pt_insn_process_enabled() argument
1381 if (!decoder) in pt_insn_process_enabled()
1384 ev = &decoder->event; in pt_insn_process_enabled()
1395 if (decoder->enabled) in pt_insn_process_enabled()
1398 decoder->ip = ev->variant.enabled.ip; in pt_insn_process_enabled()
1399 decoder->enabled = 1; in pt_insn_process_enabled()
1404 static int pt_insn_process_disabled(struct pt_insn_decoder *decoder) in pt_insn_process_disabled() argument
1408 if (!decoder) in pt_insn_process_disabled()
1411 ev = &decoder->event; in pt_insn_process_disabled()
1418 if (!decoder->enabled) in pt_insn_process_disabled()
1425 decoder->enabled = 0; in pt_insn_process_disabled()
1430 static int pt_insn_process_async_branch(struct pt_insn_decoder *decoder) in pt_insn_process_async_branch() argument
1434 if (!decoder) in pt_insn_process_async_branch()
1437 ev = &decoder->event; in pt_insn_process_async_branch()
1444 if (!decoder->enabled) in pt_insn_process_async_branch()
1447 decoder->ip = ev->variant.async_branch.to; in pt_insn_process_async_branch()
1452 static int pt_insn_process_paging(struct pt_insn_decoder *decoder) in pt_insn_process_paging() argument
1457 if (!decoder) in pt_insn_process_paging()
1460 cr3 = decoder->event.variant.paging.cr3; in pt_insn_process_paging()
1461 if (decoder->asid.cr3 != cr3) { in pt_insn_process_paging()
1462 errcode = pt_msec_cache_invalidate(&decoder->scache); in pt_insn_process_paging()
1466 decoder->asid.cr3 = cr3; in pt_insn_process_paging()
1472 static int pt_insn_process_overflow(struct pt_insn_decoder *decoder) in pt_insn_process_overflow() argument
1476 if (!decoder) in pt_insn_process_overflow()
1479 ev = &decoder->event; in pt_insn_process_overflow()
1496 decoder->enabled = 0; in pt_insn_process_overflow()
1497 decoder->ip = 0ull; in pt_insn_process_overflow()
1502 decoder->ip = ev->variant.overflow.ip; in pt_insn_process_overflow()
1503 decoder->enabled = 1; in pt_insn_process_overflow()
1512 decoder->speculative = 0; in pt_insn_process_overflow()
1517 static int pt_insn_process_exec_mode(struct pt_insn_decoder *decoder) in pt_insn_process_exec_mode() argument
1522 if (!decoder) in pt_insn_process_exec_mode()
1525 ev = &decoder->event; in pt_insn_process_exec_mode()
1529 if (ev->status_update && decoder->enabled && in pt_insn_process_exec_mode()
1530 decoder->mode != ptem_unknown && decoder->mode != mode) in pt_insn_process_exec_mode()
1533 decoder->mode = mode; in pt_insn_process_exec_mode()
1538 static int pt_insn_process_tsx(struct pt_insn_decoder *decoder) in pt_insn_process_tsx() argument
1540 if (!decoder) in pt_insn_process_tsx()
1543 decoder->speculative = decoder->event.variant.tsx.speculative; in pt_insn_process_tsx()
1548 static int pt_insn_process_stop(struct pt_insn_decoder *decoder) in pt_insn_process_stop() argument
1552 if (!decoder) in pt_insn_process_stop()
1555 ev = &decoder->event; in pt_insn_process_stop()
1562 if (decoder->enabled) in pt_insn_process_stop()
1568 static int pt_insn_process_vmcs(struct pt_insn_decoder *decoder) in pt_insn_process_vmcs() argument
1573 if (!decoder) in pt_insn_process_vmcs()
1576 vmcs = decoder->event.variant.vmcs.base; in pt_insn_process_vmcs()
1577 if (decoder->asid.vmcs != vmcs) { in pt_insn_process_vmcs()
1578 errcode = pt_msec_cache_invalidate(&decoder->scache); in pt_insn_process_vmcs()
1582 decoder->asid.vmcs = vmcs; in pt_insn_process_vmcs()
1588 int pt_insn_event(struct pt_insn_decoder *decoder, struct pt_event *uevent, in pt_insn_event() argument
1594 if (!decoder || !uevent) in pt_insn_event()
1598 if (!decoder->process_event) in pt_insn_event()
1601 ev = &decoder->event; in pt_insn_event()
1616 if (decoder->ip == ev->variant.enabled.ip) in pt_insn_event()
1619 status = pt_insn_process_enabled(decoder); in pt_insn_event()
1627 decoder->ip != ev->variant.async_disabled.at) in pt_insn_event()
1632 status = pt_insn_process_disabled(decoder); in pt_insn_event()
1639 if (decoder->ip != ev->variant.async_branch.from) in pt_insn_event()
1642 status = pt_insn_process_async_branch(decoder); in pt_insn_event()
1650 decoder->ip != ev->variant.async_paging.ip) in pt_insn_event()
1655 status = pt_insn_process_paging(decoder); in pt_insn_event()
1663 decoder->ip != ev->variant.async_vmcs.ip) in pt_insn_event()
1668 status = pt_insn_process_vmcs(decoder); in pt_insn_event()
1675 status = pt_insn_process_overflow(decoder); in pt_insn_event()
1682 status = pt_insn_process_exec_mode(decoder); in pt_insn_event()
1689 status = pt_insn_process_tsx(decoder); in pt_insn_event()
1696 status = pt_insn_process_stop(decoder); in pt_insn_event()
1703 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_event()
1704 decoder->ip != ev->variant.exstop.ip) in pt_insn_event()
1710 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_event()
1711 decoder->ip != ev->variant.mwait.ip) in pt_insn_event()
1737 decoder->process_event = 0; in pt_insn_event()
1745 if (decoder->process_insn) { in pt_insn_event()
1746 status = pt_insn_check_insn_event(decoder, &decoder->insn, in pt_insn_event()
1747 &decoder->iext); in pt_insn_event()
1758 status = pt_insn_proceed_postponed(decoder); in pt_insn_event()
1764 return pt_insn_check_ip_event(decoder, NULL, NULL); in pt_insn_event()