Lines Matching +full:re +full:- +full:config

2  * Copyright (c) 2013-2019, Intel Corporation
35 #include "intel-pt.h"
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()
71 return -pte_internal; in pt_insn_status()
73 status = decoder->status; in pt_insn_status()
80 if (!decoder->enabled) in pt_insn_status()
83 /* Forward end-of-trace indications. in pt_insn_status()
85 * Postpone it as long as we're still processing events, though. in pt_insn_status()
87 if ((status & pts_eos) && !decoder->process_event) in pt_insn_status()
99 return -pte_internal; in pt_insn_init_qry_flags()
102 qflags->variant.query.keep_tcal_on_ovf = in pt_insn_init_qry_flags()
103 flags->variant.insn.keep_tcal_on_ovf; in pt_insn_init_qry_flags()
111 struct pt_config config; in pt_insn_decoder_init() local
115 return -pte_internal; in pt_insn_decoder_init()
117 errcode = pt_config_from_user(&config, uconfig); in pt_insn_decoder_init()
122 decoder->flags = config.flags; in pt_insn_decoder_init()
125 errcode = pt_insn_init_qry_flags(&config.flags, &decoder->flags); in pt_insn_decoder_init()
129 errcode = pt_qry_decoder_init(&decoder->query, &config); in pt_insn_decoder_init()
133 pt_image_init(&decoder->default_image, NULL); in pt_insn_decoder_init()
134 decoder->image = &decoder->default_image; in pt_insn_decoder_init()
136 errcode = pt_msec_cache_init(&decoder->scache); in pt_insn_decoder_init()
150 pt_msec_cache_fini(&decoder->scache); in pt_insn_decoder_fini()
151 pt_image_fini(&decoder->default_image); in pt_insn_decoder_fini()
152 pt_qry_decoder_fini(&decoder->query); in pt_insn_decoder_fini()
155 struct pt_insn_decoder *pt_insn_alloc_decoder(const struct pt_config *config) in pt_insn_alloc_decoder() argument
164 errcode = pt_insn_decoder_init(decoder, config); in pt_insn_alloc_decoder()
184 * If we're not already processing events, check the current time against the
199 return -pte_internal; in pt_insn_tick()
201 /* We're not generating tick events if tracing is disabled. */ in pt_insn_tick()
202 if (!decoder->enabled) in pt_insn_tick()
203 return -pte_internal; in pt_insn_tick()
207 * overwrite the in-progress event. in pt_insn_tick()
216 if (decoder->process_event) in pt_insn_tick()
219 errcode = pt_qry_time(&decoder->query, &tsc, &lost_mtc, &lost_cyc); in pt_insn_tick()
221 /* If we don't have wall-clock time, we use relative time. */ in pt_insn_tick()
222 if (errcode != -pte_no_time) in pt_insn_tick()
226 ev = &decoder->event; in pt_insn_tick()
228 /* We're done if time has not changed since the last event. */ in pt_insn_tick()
229 if (tsc == ev->tsc) in pt_insn_tick()
234 ev->type = ptev_tick; in pt_insn_tick()
235 ev->variant.tick.ip = ip; in pt_insn_tick()
237 /* Indicate if we have wall-clock time or only relative time. */ in pt_insn_tick()
238 if (errcode != -pte_no_time) in pt_insn_tick()
239 ev->has_tsc = 1; in pt_insn_tick()
240 ev->tsc = tsc; in pt_insn_tick()
241 ev->lost_mtc = lost_mtc; in pt_insn_tick()
242 ev->lost_cyc = lost_cyc; in pt_insn_tick()
245 decoder->process_event = 1; in pt_insn_tick()
261 return -pte_internal; in pt_insn_indirect_branch()
263 evip = decoder->ip; in pt_insn_indirect_branch()
265 status = pt_qry_indirect_branch(&decoder->query, ip); in pt_insn_indirect_branch()
269 if (decoder->flags.variant.insn.enable_tick_events) { in pt_insn_indirect_branch()
287 return -pte_internal; in pt_insn_cond_branch()
289 status = pt_qry_cond_branch(&decoder->query, taken); in pt_insn_cond_branch()
293 if (decoder->flags.variant.insn.enable_tick_events) { in pt_insn_cond_branch()
294 errcode = pt_insn_tick(decoder, decoder->ip); in pt_insn_cond_branch()
305 return -pte_internal; in pt_insn_start()
310 decoder->status = status; in pt_insn_start()
313 decoder->enabled = 1; in pt_insn_start()
322 * We do this already here so we can indicate user-events that precede in pt_insn_start()
333 return -pte_invalid; in pt_insn_sync_forward()
337 status = pt_qry_sync_forward(&decoder->query, &decoder->ip); in pt_insn_sync_forward()
347 return -pte_invalid; in pt_insn_sync_backward()
351 status = pt_qry_sync_backward(&decoder->query, &decoder->ip); in pt_insn_sync_backward()
361 return -pte_invalid; in pt_insn_sync_set()
365 status = pt_qry_sync_set(&decoder->query, &decoder->ip, offset); in pt_insn_sync_set()
373 return -pte_invalid; in pt_insn_get_offset()
375 return pt_qry_get_offset(&decoder->query, offset); in pt_insn_get_offset()
382 return -pte_invalid; in pt_insn_get_sync_offset()
384 return pt_qry_get_sync_offset(&decoder->query, offset); in pt_insn_get_sync_offset()
392 return decoder->image; in pt_insn_get_image()
399 return -pte_invalid; in pt_insn_set_image()
402 image = &decoder->default_image; in pt_insn_set_image()
404 decoder->image = image; in pt_insn_set_image()
414 return pt_qry_get_config(&decoder->query); in pt_insn_get_config()
421 return -pte_invalid; in pt_insn_time()
423 return pt_qry_time(&decoder->query, time, lost_mtc, lost_cyc); in pt_insn_time()
429 return -pte_invalid; in pt_insn_core_bus_ratio()
431 return pt_qry_core_bus_ratio(&decoder->query, cbr); in pt_insn_core_bus_ratio()
438 return -pte_invalid; in pt_insn_asid()
440 return pt_asid_to_user(asid, &decoder->asid, size); in pt_insn_asid()
448 return -pte_invalid; in event_pending()
450 if (decoder->process_event) in event_pending()
453 status = decoder->status; in event_pending()
457 status = pt_qry_event(&decoder->query, &decoder->event, in event_pending()
458 sizeof(decoder->event)); in event_pending()
462 decoder->process_event = 1; in event_pending()
463 decoder->status = status; in event_pending()
474 return -pte_internal; in check_erratum_skd022()
476 insn.mode = decoder->mode; in check_erratum_skd022()
477 insn.ip = decoder->ip; in check_erratum_skd022()
479 errcode = pt_insn_decode(&insn, &iext, decoder->image, &decoder->asid); in check_erratum_skd022()
500 return -pte_internal; in handle_erratum_skd022()
509 ev = &decoder->event; in handle_erratum_skd022()
511 ip = ev->variant.async_disabled.ip; in handle_erratum_skd022()
513 ev->type = ptev_disabled; in handle_erratum_skd022()
514 ev->variant.disabled.ip = ip; in handle_erratum_skd022()
524 return -pte_internal; in pt_insn_proceed()
527 decoder->ip += insn->size; in pt_insn_proceed()
529 /* We handle non-branches, non-taken conditional branches, and in pt_insn_proceed()
530 * compressed returns directly in the switch and do some pre-work for in pt_insn_proceed()
535 switch (insn->iclass) { in pt_insn_proceed()
547 decoder->status = status; in pt_insn_proceed()
560 if (iext->variant.branch.displacement || in pt_insn_proceed()
561 !iext->variant.branch.is_direct) in pt_insn_proceed()
562 pt_retstack_push(&decoder->retstack, decoder->ip); in pt_insn_proceed()
572 decoder->status = status; in pt_insn_proceed()
578 return -pte_bad_retcomp; in pt_insn_proceed()
580 return pt_retstack_pop(&decoder->retstack, in pt_insn_proceed()
581 &decoder->ip); in pt_insn_proceed()
594 return -pte_bad_insn; in pt_insn_proceed()
602 if (iext->variant.branch.is_direct) in pt_insn_proceed()
603 decoder->ip += (uint64_t) (int64_t) in pt_insn_proceed()
604 iext->variant.branch.displacement; in pt_insn_proceed()
608 status = pt_insn_indirect_branch(decoder, &decoder->ip); in pt_insn_proceed()
613 decoder->status = status; in pt_insn_proceed()
617 return -pte_noip; in pt_insn_proceed()
626 const struct pt_config *config) in pt_insn_at_skl014() argument
631 if (!ev || !insn || !iext || !config) in pt_insn_at_skl014()
632 return -pte_internal; in pt_insn_at_skl014()
634 if (!ev->ip_suppressed) in pt_insn_at_skl014()
637 switch (insn->iclass) { in pt_insn_at_skl014()
641 if (!iext->variant.branch.is_direct) in pt_insn_at_skl014()
645 ip = insn->ip; in pt_insn_at_skl014()
646 ip += insn->size; in pt_insn_at_skl014()
647 ip += (uint64_t) (int64_t) iext->variant.branch.displacement; in pt_insn_at_skl014()
649 status = pt_filter_addr_check(&config->addr_filter, ip); in pt_insn_at_skl014()
668 const struct pt_config *config) in pt_insn_at_disabled_event() argument
670 if (!ev || !insn || !iext || !config) in pt_insn_at_disabled_event()
671 return -pte_internal; in pt_insn_at_disabled_event()
673 if (ev->ip_suppressed) { in pt_insn_at_disabled_event()
684 if (config->addr_filter.config.addr_cfg && in pt_insn_at_disabled_event()
685 config->errata.skl014 && in pt_insn_at_disabled_event()
686 pt_insn_at_skl014(ev, insn, iext, config)) in pt_insn_at_disabled_event()
689 switch (insn->iclass) { in pt_insn_at_disabled_event()
699 if (iext->variant.branch.is_direct) { in pt_insn_at_disabled_event()
702 ip = insn->ip; in pt_insn_at_disabled_event()
703 ip += insn->size; in pt_insn_at_disabled_event()
705 iext->variant.branch.displacement; in pt_insn_at_disabled_event()
707 if (ip != ev->variant.disabled.ip) in pt_insn_at_disabled_event()
720 return -pte_bad_insn; in pt_insn_at_disabled_event()
732 * Returns a non-negative pt_status_flag bit-vector indicating a pending event
740 return -pte_internal; in pt_insn_postpone()
742 if (!decoder->process_insn) { in pt_insn_postpone()
743 decoder->process_insn = 1; in pt_insn_postpone()
744 decoder->insn = *insn; in pt_insn_postpone()
745 decoder->iext = *iext; in pt_insn_postpone()
758 return -pte_internal; in pt_insn_clear_postponed()
760 decoder->process_insn = 0; in pt_insn_clear_postponed()
761 decoder->bound_paging = 0; in pt_insn_clear_postponed()
762 decoder->bound_vmcs = 0; in pt_insn_clear_postponed()
763 decoder->bound_ptwrite = 0; in pt_insn_clear_postponed()
777 return -pte_internal; in pt_insn_proceed_postponed()
779 if (!decoder->process_insn) in pt_insn_proceed_postponed()
780 return -pte_internal; in pt_insn_proceed_postponed()
783 if (!decoder->enabled) in pt_insn_proceed_postponed()
786 status = pt_insn_proceed(decoder, &decoder->insn, &decoder->iext); in pt_insn_proceed_postponed()
802 * - we suppress pts_eos as long as we're processing events
803 * - we do not set pts_ip_suppressed since tracing must be enabled
805 * Returns a non-negative pt_status_flag bit-vector on success, a negative error
816 return -pte_internal; in pt_insn_check_insn_event()
822 ev = &decoder->event; in pt_insn_check_insn_event()
823 switch (ev->type) { in pt_insn_check_insn_event()
840 /* We're only interested in events that bind to instructions. */ in pt_insn_check_insn_event()
845 &decoder->query.config); in pt_insn_check_insn_event()
849 /* We're at a synchronous disable event location. in pt_insn_check_insn_event()
853 status = pt_insn_next_ip(&decoder->ip, insn, iext); in pt_insn_check_insn_event()
856 decoder->ip = 0ull; in pt_insn_check_insn_event()
866 if (status != -pte_bad_query) in pt_insn_check_insn_event()
869 switch (insn->iclass) { in pt_insn_check_insn_event()
872 decoder->ip = insn->ip + insn->size; in pt_insn_check_insn_event()
884 if (decoder->bound_paging) in pt_insn_check_insn_event()
893 decoder->bound_paging = 1; in pt_insn_check_insn_event()
899 if (decoder->bound_vmcs) in pt_insn_check_insn_event()
908 decoder->bound_vmcs = 1; in pt_insn_check_insn_event()
914 if (decoder->bound_ptwrite) in pt_insn_check_insn_event()
917 if (ev->ip_suppressed) { in pt_insn_check_insn_event()
924 ev->variant.ptwrite.ip = decoder->ip; in pt_insn_check_insn_event()
925 ev->ip_suppressed = 0; in pt_insn_check_insn_event()
934 if (decoder->ip != ev->variant.ptwrite.ip) in pt_insn_check_insn_event()
941 decoder->bound_ptwrite = 1; in pt_insn_check_insn_event()
973 return -pte_internal; in handle_erratum_bdm64()
976 if (!ev->variant.tsx.aborted) in handle_erratum_bdm64()
986 * wrong but we're not able to tell. in handle_erratum_bdm64()
988 status = pt_insn_range_is_contiguous(decoder->ip, ev->variant.tsx.ip, in handle_erratum_bdm64()
989 decoder->mode, decoder->image, in handle_erratum_bdm64()
990 &decoder->asid, bdm64_max_steps); in handle_erratum_bdm64()
1000 decoder->ip = ev->variant.tsx.ip; in handle_erratum_bdm64()
1021 return -pte_internal; in pt_insn_postpone_tsx()
1023 if (ev->ip_suppressed) in pt_insn_postpone_tsx()
1026 if (insn && iext && decoder->query.config.errata.bdm64) { in pt_insn_postpone_tsx()
1032 if (decoder->ip != ev->variant.tsx.ip) in pt_insn_postpone_tsx()
1040 * Check whether an event is pending that binds to @decoder->ip, and, if that is
1043 * Returns a non-negative pt_status_flag bit-vector on success, a negative error
1054 return -pte_internal; in pt_insn_check_ip_event()
1064 ev = &decoder->event; in pt_insn_check_ip_event()
1065 switch (ev->type) { in pt_insn_check_ip_event()
1073 if (ev->variant.async_disabled.at != decoder->ip) in pt_insn_check_ip_event()
1076 if (decoder->query.config.errata.skd022) { in pt_insn_check_ip_event()
1106 if (ev->variant.async_branch.from != decoder->ip) in pt_insn_check_ip_event()
1115 if (!ev->ip_suppressed && in pt_insn_check_ip_event()
1116 ev->variant.exec_mode.ip != decoder->ip) in pt_insn_check_ip_event()
1122 if (decoder->enabled) in pt_insn_check_ip_event()
1128 if (!ev->ip_suppressed && in pt_insn_check_ip_event()
1129 ev->variant.async_paging.ip != decoder->ip) in pt_insn_check_ip_event()
1135 if (decoder->enabled) in pt_insn_check_ip_event()
1141 if (!ev->ip_suppressed && in pt_insn_check_ip_event()
1142 ev->variant.async_vmcs.ip != decoder->ip) in pt_insn_check_ip_event()
1151 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_check_ip_event()
1152 decoder->ip != ev->variant.exstop.ip) in pt_insn_check_ip_event()
1158 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_check_ip_event()
1159 decoder->ip != ev->variant.mwait.ip) in pt_insn_check_ip_event()
1173 * and must wait until the next iteration - as long as tracing in pt_insn_check_ip_event()
1179 if (decoder->enabled) in pt_insn_check_ip_event()
1197 return -pte_internal; in insn_to_user()
1204 memset(uinsn + sizeof(*insn), 0, size - sizeof(*insn)); in insn_to_user()
1221 return -pte_internal; in pt_insn_decode_cached()
1225 * later on, fall back to decoding @insn from @decoder->image. in pt_insn_decode_cached()
1232 return pt_insn_decode(insn, iext, decoder->image, in pt_insn_decode_cached()
1233 &decoder->asid); in pt_insn_decode_cached()
1235 status = pt_msec_read(msec, insn->raw, sizeof(insn->raw), insn->ip); in pt_insn_decode_cached()
1237 if (status != -pte_nomap) in pt_insn_decode_cached()
1240 return pt_insn_decode(insn, iext, decoder->image, in pt_insn_decode_cached()
1241 &decoder->asid); in pt_insn_decode_cached()
1244 /* We initialize @insn->size to the maximal possible size. It will be in pt_insn_decode_cached()
1247 insn->size = (uint8_t) status; in pt_insn_decode_cached()
1251 if (status != -pte_bad_insn) in pt_insn_decode_cached()
1254 return pt_insn_decode(insn, iext, decoder->image, in pt_insn_decode_cached()
1255 &decoder->asid); in pt_insn_decode_cached()
1270 return -pte_internal; in pt_insn_msec_lookup()
1272 scache = &decoder->scache; in pt_insn_msec_lookup()
1273 image = decoder->image; in pt_insn_msec_lookup()
1274 ip = decoder->ip; in pt_insn_msec_lookup()
1278 if (isid != -pte_nomap) in pt_insn_msec_lookup()
1282 &decoder->asid, ip); in pt_insn_msec_lookup()
1297 return -pte_invalid; in pt_insn_next()
1304 if (!decoder->enabled) { in pt_insn_next()
1305 if (decoder->status & pts_eos) in pt_insn_next()
1306 return -pte_eos; in pt_insn_next()
1308 return -pte_no_enable; in pt_insn_next()
1313 /* Zero-initialize the instruction in case of error returns. */ in pt_insn_next()
1321 if (decoder->speculative) in pt_insn_next()
1322 pinsn->speculative = 1; in pt_insn_next()
1323 pinsn->ip = decoder->ip; in pt_insn_next()
1324 pinsn->mode = decoder->mode; in pt_insn_next()
1328 if (isid != -pte_nomap) in pt_insn_next()
1337 pinsn->isid = isid; in pt_insn_next()
1341 /* Provide the incomplete instruction - the IP and mode fields in pt_insn_next()
1357 * If an event is indicated, we're done. in pt_insn_next()
1386 return -pte_internal; in pt_insn_process_enabled()
1388 ev = &decoder->event; in pt_insn_process_enabled()
1391 if (ev->status_update) in pt_insn_process_enabled()
1392 return -pte_bad_context; in pt_insn_process_enabled()
1395 if (ev->ip_suppressed) in pt_insn_process_enabled()
1396 return -pte_noip; in pt_insn_process_enabled()
1399 if (decoder->enabled) in pt_insn_process_enabled()
1400 return -pte_bad_context; in pt_insn_process_enabled()
1402 decoder->ip = ev->variant.enabled.ip; in pt_insn_process_enabled()
1403 decoder->enabled = 1; in pt_insn_process_enabled()
1413 return -pte_internal; in pt_insn_process_disabled()
1415 ev = &decoder->event; in pt_insn_process_disabled()
1418 if (ev->status_update) in pt_insn_process_disabled()
1419 return -pte_bad_context; in pt_insn_process_disabled()
1422 if (!decoder->enabled) in pt_insn_process_disabled()
1423 return -pte_bad_context; in pt_insn_process_disabled()
1425 /* We preserve @decoder->ip. This is where we expect tracing to resume in pt_insn_process_disabled()
1429 decoder->enabled = 0; in pt_insn_process_disabled()
1439 return -pte_internal; in pt_insn_process_async_branch()
1441 ev = &decoder->event; in pt_insn_process_async_branch()
1444 if (ev->status_update) in pt_insn_process_async_branch()
1445 return -pte_bad_context; in pt_insn_process_async_branch()
1448 if (!decoder->enabled) in pt_insn_process_async_branch()
1449 return -pte_bad_context; in pt_insn_process_async_branch()
1451 decoder->ip = ev->variant.async_branch.to; in pt_insn_process_async_branch()
1462 return -pte_internal; in pt_insn_process_paging()
1464 cr3 = decoder->event.variant.paging.cr3; in pt_insn_process_paging()
1465 if (decoder->asid.cr3 != cr3) { in pt_insn_process_paging()
1466 errcode = pt_msec_cache_invalidate(&decoder->scache); in pt_insn_process_paging()
1470 decoder->asid.cr3 = cr3; in pt_insn_process_paging()
1481 return -pte_internal; in pt_insn_process_overflow()
1483 ev = &decoder->event; in pt_insn_process_overflow()
1486 if (ev->status_update) in pt_insn_process_overflow()
1487 return -pte_bad_context; in pt_insn_process_overflow()
1492 if (ev->ip_suppressed) { in pt_insn_process_overflow()
1497 * before, as well, we might have missed the re-enable in the in pt_insn_process_overflow()
1500 decoder->enabled = 0; in pt_insn_process_overflow()
1501 decoder->ip = 0ull; in pt_insn_process_overflow()
1503 /* Tracing is enabled and we're at the IP at which the overflow in pt_insn_process_overflow()
1506 decoder->ip = ev->variant.overflow.ip; in pt_insn_process_overflow()
1507 decoder->enabled = 1; in pt_insn_process_overflow()
1516 decoder->speculative = 0; in pt_insn_process_overflow()
1527 return -pte_internal; in pt_insn_process_exec_mode()
1529 ev = &decoder->event; in pt_insn_process_exec_mode()
1530 mode = ev->variant.exec_mode.mode; in pt_insn_process_exec_mode()
1533 if (ev->status_update && decoder->enabled && in pt_insn_process_exec_mode()
1534 decoder->mode != ptem_unknown && decoder->mode != mode) in pt_insn_process_exec_mode()
1535 return -pte_bad_status_update; in pt_insn_process_exec_mode()
1537 decoder->mode = mode; in pt_insn_process_exec_mode()
1545 return -pte_internal; in pt_insn_process_tsx()
1547 decoder->speculative = decoder->event.variant.tsx.speculative; in pt_insn_process_tsx()
1557 return -pte_internal; in pt_insn_process_stop()
1559 ev = &decoder->event; in pt_insn_process_stop()
1562 if (ev->status_update) in pt_insn_process_stop()
1563 return -pte_bad_context; in pt_insn_process_stop()
1566 if (decoder->enabled) in pt_insn_process_stop()
1567 return -pte_bad_context; in pt_insn_process_stop()
1578 return -pte_internal; in pt_insn_process_vmcs()
1580 vmcs = decoder->event.variant.vmcs.base; in pt_insn_process_vmcs()
1581 if (decoder->asid.vmcs != vmcs) { in pt_insn_process_vmcs()
1582 errcode = pt_msec_cache_invalidate(&decoder->scache); in pt_insn_process_vmcs()
1586 decoder->asid.vmcs = vmcs; in pt_insn_process_vmcs()
1599 return -pte_invalid; in pt_insn_event()
1602 if (!decoder->process_event) in pt_insn_event()
1603 return -pte_bad_query; in pt_insn_event()
1605 ev = &decoder->event; in pt_insn_event()
1606 switch (ev->type) { in pt_insn_event()
1613 return -pte_bad_query; in pt_insn_event()
1620 if (decoder->ip == ev->variant.enabled.ip) in pt_insn_event()
1621 ev->variant.enabled.resumed = 1; in pt_insn_event()
1630 if (!ev->ip_suppressed && in pt_insn_event()
1631 decoder->ip != ev->variant.async_disabled.at) in pt_insn_event()
1632 return -pte_bad_query; in pt_insn_event()
1643 if (decoder->ip != ev->variant.async_branch.from) in pt_insn_event()
1644 return -pte_bad_query; in pt_insn_event()
1653 if (!ev->ip_suppressed && in pt_insn_event()
1654 decoder->ip != ev->variant.async_paging.ip) in pt_insn_event()
1655 return -pte_bad_query; in pt_insn_event()
1666 if (!ev->ip_suppressed && in pt_insn_event()
1667 decoder->ip != ev->variant.async_vmcs.ip) in pt_insn_event()
1668 return -pte_bad_query; in pt_insn_event()
1707 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_event()
1708 decoder->ip != ev->variant.exstop.ip) in pt_insn_event()
1709 return -pte_bad_query; in pt_insn_event()
1714 if (!ev->ip_suppressed && decoder->enabled && in pt_insn_event()
1715 decoder->ip != ev->variant.mwait.ip) in pt_insn_event()
1716 return -pte_bad_query; in pt_insn_event()
1729 /* Copy the event to the user. Make sure we're not writing beyond the in pt_insn_event()
1741 decoder->process_event = 0; in pt_insn_event()
1749 if (decoder->process_insn) { in pt_insn_event()
1750 status = pt_insn_check_insn_event(decoder, &decoder->insn, in pt_insn_event()
1751 &decoder->iext); in pt_insn_event()