Lines Matching full:packet

48  * The packet @decoder must be synchronized onto the trace stream at the
51 * It uses @packet to hold trace packets during its search. If the search is
52 * successful, @packet will contain the first (and hopefully only) FUP packet in
53 * this PSB+. Otherwise, @packet may contain anything.
55 * Returns one if a FUP packet is found (@packet will contain it).
56 * Returns zero if no FUP packet is found (@packet is undefined).
59 static int pt_qry_find_header_fup(struct pt_packet *packet, in pt_qry_find_header_fup() argument
62 if (!packet || !decoder) in pt_qry_find_header_fup()
68 errcode = pt_pkt_next(decoder, packet, sizeof(*packet)); in pt_qry_find_header_fup()
72 switch (packet->type) { in pt_qry_find_header_fup()
74 /* Ignore the packet. */ in pt_qry_find_header_fup()
217 * establish the correct context for the subsequent packet. in pt_qry_status_flags()
281 * - a branching related packet. */ in pt_qry_read_ahead()
285 /* - an event related packet. */ in pt_qry_read_ahead()
294 * Move beyond the packet and clear @decoder->next to in pt_qry_read_ahead()
296 * packet. in pt_qry_read_ahead()
350 /* Read ahead until the first query-relevant packet. */ in pt_qry_start()
371 const struct pt_packet_tsc *packet, in pt_qry_apply_tsc() argument
381 errcode = pt_tcal_update_tsc(tcal, packet, config); in pt_qry_apply_tsc()
386 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_tsc()
388 errcode = pt_time_update_tsc(time, packet, config); in pt_qry_apply_tsc()
397 const struct pt_packet_tsc *packet, in pt_qry_apply_header_tsc() argument
407 errcode = pt_tcal_header_tsc(tcal, packet, config); in pt_qry_apply_header_tsc()
412 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_header_tsc()
414 errcode = pt_time_update_tsc(time, packet, config); in pt_qry_apply_header_tsc()
422 const struct pt_packet_cbr *packet, in pt_qry_apply_cbr() argument
432 errcode = pt_tcal_update_cbr(tcal, packet, config); in pt_qry_apply_cbr()
437 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_cbr()
439 errcode = pt_time_update_cbr(time, packet, config); in pt_qry_apply_cbr()
448 const struct pt_packet_cbr *packet, in pt_qry_apply_header_cbr() argument
458 errcode = pt_tcal_header_cbr(tcal, packet, config); in pt_qry_apply_header_cbr()
463 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_header_cbr()
465 errcode = pt_time_update_cbr(time, packet, config); in pt_qry_apply_header_cbr()
473 const struct pt_packet_tma *packet, in pt_qry_apply_tma() argument
483 errcode = pt_tcal_update_tma(tcal, packet, config); in pt_qry_apply_tma()
488 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_tma()
490 errcode = pt_time_update_tma(time, packet, config); in pt_qry_apply_tma()
498 const struct pt_packet_mtc *packet, in pt_qry_apply_mtc() argument
508 errcode = pt_tcal_update_mtc(tcal, packet, config); in pt_qry_apply_mtc()
513 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_mtc()
515 errcode = pt_time_update_mtc(time, packet, config); in pt_qry_apply_mtc()
523 const struct pt_packet_cyc *packet, in pt_qry_apply_cyc() argument
534 errcode = pt_tcal_update_cyc(tcal, packet, config); in pt_qry_apply_cyc()
541 * This will be tracked as packet loss in struct pt_time. in pt_qry_apply_cyc()
552 * timing and are tracked as packet losses in struct pt_time. in pt_qry_apply_cyc()
554 errcode = pt_time_update_cyc(time, packet, config, fcr); in pt_qry_apply_cyc()
583 * by a preceding packet. in pt_qry_sync_forward()
740 /* We're done when we decoded a TNT packet. */ in pt_qry_cache_tnt()
744 /* Read ahead until the next query-relevant packet. */ in pt_qry_cache_tnt()
750 /* Preserve the time at the TNT packet. */ in pt_qry_cache_tnt()
753 /* Read ahead until the next query-relevant packet. */ in pt_qry_cache_tnt()
768 /* We cache the latest tnt packet in the decoder. Let's re-fill the in pt_qry_cond_branch()
813 /* We may see a single TNT packet if the current tnt is empty. in pt_qry_indirect_branch()
832 /* We're done when we found a TIP packet that isn't part of an in pt_qry_indirect_branch()
850 /* Read ahead until the next query-relevant packet. */ in pt_qry_indirect_branch()
856 /* Preserve the time at the TIP packet. */ in pt_qry_indirect_branch()
859 /* Read ahead until the next query-relevant packet. */ in pt_qry_indirect_branch()
901 /* We must not see a TIP or TNT packet unless it belongs in pt_qry_event()
932 /* Read ahead until the next query-relevant packet. */ in pt_qry_event()
941 /* Read ahead until the next query-relevant packet. */ in pt_qry_event()
989 struct pt_packet packet; in pt_qry_decode_unknown() local
995 size = pt_pkt_read_unknown(&packet, decoder->pos, &decoder->config); in pt_qry_decode_unknown()
1033 /* We're done once we reach an psbend packet. */ in pt_qry_read_psb_header()
1082 /* The next packet following the PSB header will be of type PSBEND. in pt_qry_decode_psb()
1084 * Decoding this packet will publish the PSB events what have been in pt_qry_decode_psb()
1114 /* Decode a generic IP packet.
1122 struct pt_packet_ip packet; in pt_qry_decode_ip() local
1128 size = pt_pkt_read_ip(&packet, decoder->pos, &decoder->config); in pt_qry_decode_ip()
1132 errcode = pt_last_ip_update_ip(&decoder->ip, &packet, &decoder->config); in pt_qry_decode_ip()
1210 * If none of the events consumed the packet, we're done. in pt_qry_decode_tip()
1215 /* We're done with this packet. Clear the flag we set previously in pt_qry_decode_tip()
1226 struct pt_packet_tnt packet; in pt_qry_decode_tnt_8() local
1232 size = pt_pkt_read_tnt_8(&packet, decoder->pos, &decoder->config); in pt_qry_decode_tnt_8()
1236 errcode = pt_tnt_cache_update_tnt(&decoder->tnt, &packet, in pt_qry_decode_tnt_8()
1247 struct pt_packet_tnt packet; in pt_qry_decode_tnt_64() local
1253 size = pt_pkt_read_tnt_64(&packet, decoder->pos, &decoder->config); in pt_qry_decode_tnt_64()
1257 errcode = pt_tnt_cache_update_tnt(&decoder->tnt, &packet, in pt_qry_decode_tnt_64()
1308 * We use the consume packet decoder flag to indicate this. in pt_qry_decode_tip_pge()
1311 /* This packet signals a standalone enabled event. */ in pt_qry_decode_tip_pge()
1362 /* We must consume the packet. */ in pt_qry_decode_tip_pge()
1449 /* This packet signals a standalone disabled event. */ in pt_qry_decode_tip_pgd()
1493 struct pt_packet packet; in scan_for_erratum_bdm70() local
1496 errcode = pt_pkt_next(decoder, &packet, sizeof(packet)); in scan_for_erratum_bdm70()
1505 switch (packet.type) { in scan_for_erratum_bdm70()
1558 struct pt_packet_ip packet; in pt_qry_header_fup() local
1564 size = pt_pkt_read_ip(&packet, decoder->pos, &decoder->config); in pt_qry_header_fup()
1578 errcode = pt_last_ip_update_ip(&decoder->ip, &packet, &decoder->config); in pt_qry_header_fup()
1583 if (packet.ipc != pt_ipc_suppressed) in pt_qry_header_fup()
1659 * If none of the events consumed the packet, we're done. in pt_qry_decode_fup()
1664 /* We're done with this packet. Clear the flag we set previously in pt_qry_decode_fup()
1696 struct pt_packet_pip packet; in pt_qry_decode_pip() local
1703 size = pt_pkt_read_pip(&packet, decoder->pos, &decoder->config); in pt_qry_decode_pip()
1707 /* Paging events are either standalone or bind to the same TIP packet in pt_qry_decode_pip()
1716 event->variant.paging.cr3 = packet.cr3; in pt_qry_decode_pip()
1717 event->variant.paging.non_root = packet.nr; in pt_qry_decode_pip()
1726 event->variant.async_paging.cr3 = packet.cr3; in pt_qry_decode_pip()
1727 event->variant.async_paging.non_root = packet.nr; in pt_qry_decode_pip()
1740 struct pt_packet_pip packet; in pt_qry_header_pip() local
1747 size = pt_pkt_read_pip(&packet, decoder->pos, &decoder->config); in pt_qry_header_pip()
1757 event->variant.async_paging.cr3 = packet.cr3; in pt_qry_header_pip()
1758 event->variant.async_paging.non_root = packet.nr; in pt_qry_header_pip()
1891 * Creates and publishes an overflow event at @packet's IP payload.
1897 * - set ip to @packet's IP payload
1903 const struct pt_packet_ip *packet, in skd010_recover() argument
1911 if (!decoder || !packet || !tcal || !time) in skd010_recover()
1917 /* Extract the IP payload from the packet. */ in skd010_recover()
1918 errcode = pt_last_ip_update_ip(&ip, packet, &decoder->config); in skd010_recover()
1978 /* Scan ahead for a packet at which to resume after an overflow.
1992 * recover by synchronizing at a later packet and a different IP. If we can't
2024 struct pt_packet packet; in skd010_scan_for_ovf_resume() local
2031 errcode = pt_pkt_next(pkt, &packet, sizeof(packet)); in skd010_scan_for_ovf_resume()
2042 switch (packet.type) { in skd010_scan_for_ovf_resume()
2054 offset + packet.size); in skd010_scan_for_ovf_resume()
2063 * find an IP packet at which to resume tracing. in skd010_scan_for_ovf_resume()
2082 switch (packet.payload.mode.leaf) { in skd010_scan_for_ovf_resume()
2084 /* A MODE.EXEC packet binds to TIP, i.e. in skd010_scan_for_ovf_resume()
2108 /* A MODE.TSX packet may be standalone or bind in skd010_scan_for_ovf_resume()
2118 /* If we find the FUP this packet binds to, we in skd010_scan_for_ovf_resume()
2137 /* If we got a MODE.TSX packet before, we synchronize at in skd010_scan_for_ovf_resume()
2143 &packet.payload.ip, in skd010_scan_for_ovf_resume()
2152 return skd010_recover(decoder, &packet.payload.ip, in skd010_scan_for_ovf_resume()
2157 * packets after the TIP packet. in skd010_scan_for_ovf_resume()
2159 return skd010_recover(decoder, &packet.payload.ip, in skd010_scan_for_ovf_resume()
2161 offset + packet.size); in skd010_scan_for_ovf_resume()
2167 errcode = pt_qry_find_header_fup(&packet, pkt); in skd010_scan_for_ovf_resume()
2185 if (packet.type != ppt_fup) in skd010_scan_for_ovf_resume()
2191 return skd010_recover(decoder, &packet.payload.ip, in skd010_scan_for_ovf_resume()
2207 /* We can't skip this packet. */ in skd010_scan_for_ovf_resume()
2214 /* Ignore this packet. */ in skd010_scan_for_ovf_resume()
2219 if (!packet.payload.exstop.ip) in skd010_scan_for_ovf_resume()
2224 /* To skip this packet, we'd need to take care of the in skd010_scan_for_ovf_resume()
2231 if (!packet.payload.ptw.ip) in skd010_scan_for_ovf_resume()
2234 /* To skip this packet, we'd need to take care of the in skd010_scan_for_ovf_resume()
2242 &packet.payload.tsc, in skd010_scan_for_ovf_resume()
2252 &packet.payload.cbr, in skd010_scan_for_ovf_resume()
2262 &packet.payload.tma, in skd010_scan_for_ovf_resume()
2272 &packet.payload.mtc, in skd010_scan_for_ovf_resume()
2282 &packet.payload.cyc, in skd010_scan_for_ovf_resume()
2329 struct pt_packet packet; in apl12_tracing_is_disabled() local
2332 status = pt_pkt_next(decoder, &packet, sizeof(packet)); in apl12_tracing_is_disabled()
2341 switch (packet.type) { in apl12_tracing_is_disabled()
2367 status = pt_qry_find_header_fup(&packet, decoder); in apl12_tracing_is_disabled()
2385 /* We can't skip this packet. */ in apl12_tracing_is_disabled()
2420 struct pt_packet packet; in apl12_resume_disabled() local
2423 errcode = pt_pkt_next(pkt, &packet, sizeof(packet)); in apl12_resume_disabled()
2432 /* The offset is the start of the next packet. */ in apl12_resume_disabled()
2439 * The current @packet will be the FUP after which we started in apl12_resume_disabled()
2451 switch (packet.type) { in apl12_resume_disabled()
2470 &packet.payload.tsc, in apl12_resume_disabled()
2481 &packet.payload.cbr, in apl12_resume_disabled()
2492 &packet.payload.tma, in apl12_resume_disabled()
2503 &packet.payload.mtc, in apl12_resume_disabled()
2514 &packet.payload.cyc, in apl12_resume_disabled()
2538 * find one, the erratum applies and we proceed from after the FUP packet.
2578 * We search for a TIP.PGD and, if we found one, resume from after that packet
2582 * If we don't find a TIP.PGD but instead some other packet that indicates that
2603 struct pt_packet packet; in apl11_apply() local
2606 errcode = pt_pkt_next(pkt, &packet, sizeof(packet)); in apl11_apply()
2610 switch (packet.type) { in apl11_apply()
2664 &packet.payload.tsc, in apl11_apply()
2674 &packet.payload.cbr, in apl11_apply()
2684 &packet.payload.tma, in apl11_apply()
2694 &packet.payload.mtc, in apl11_apply()
2704 &packet.payload.cyc, in apl11_apply()
2716 * This function is called when we diagnose a bad packet while searching for a
2757 struct pt_packet packet; in pt_pkt_find_ovf_fup() local
2760 errcode = pt_pkt_next(decoder, &packet, sizeof(packet)); in pt_pkt_find_ovf_fup()
2764 switch (packet.type) { in pt_pkt_find_ovf_fup()
2807 * Scans the trace for a FUP or for a packet that indicates that tracing is
2810 * Return the relative offset of the packet following the found FUP on success.
2886 /* We must consume the OVF before we search for the binding packet. */ in pt_qry_decode_ovf()
2899 * as we see a non-timing non-FUP packet, we know that tracing has been in pt_qry_decode_ovf()
2908 * at a later packet and a different IP. in pt_qry_decode_ovf()
2928 /* Report the original error from searching for the FUP packet in pt_qry_decode_ovf()
2955 const struct pt_packet_mode_exec *packet) in pt_qry_decode_mode_exec() argument
2959 if (!decoder || !packet) in pt_qry_decode_mode_exec()
2968 event->variant.exec_mode.mode = pt_get_exec_mode(packet); in pt_qry_decode_mode_exec()
2974 const struct pt_packet_mode_tsx *packet) in pt_qry_decode_mode_tsx() argument
2978 if (!decoder || !packet) in pt_qry_decode_mode_tsx()
3001 event->variant.tsx.speculative = packet->intx; in pt_qry_decode_mode_tsx()
3002 event->variant.tsx.aborted = packet->abrt; in pt_qry_decode_mode_tsx()
3009 struct pt_packet_mode packet; in pt_qry_decode_mode() local
3015 size = pt_pkt_read_mode(&packet, decoder->pos, &decoder->config); in pt_qry_decode_mode()
3020 switch (packet.leaf) { in pt_qry_decode_mode()
3022 errcode = pt_qry_decode_mode_exec(decoder, &packet.bits.exec); in pt_qry_decode_mode()
3026 errcode = pt_qry_decode_mode_tsx(decoder, &packet.bits.tsx); in pt_qry_decode_mode()
3039 struct pt_packet_mode packet; in pt_qry_header_mode() local
3046 size = pt_pkt_read_mode(&packet, decoder->pos, &decoder->config); in pt_qry_header_mode()
3055 switch (packet.leaf) { in pt_qry_header_mode()
3059 pt_get_exec_mode(&packet.bits.exec); in pt_qry_header_mode()
3064 event->variant.tsx.speculative = packet.bits.tsx.intx; in pt_qry_header_mode()
3065 event->variant.tsx.aborted = packet.bits.tsx.abrt; in pt_qry_header_mode()
3097 struct pt_packet_tsc packet; in pt_qry_decode_tsc() local
3103 size = pt_pkt_read_tsc(&packet, decoder->pos, &decoder->config); in pt_qry_decode_tsc()
3108 &packet, &decoder->config); in pt_qry_decode_tsc()
3118 struct pt_packet_tsc packet; in pt_qry_header_tsc() local
3124 size = pt_pkt_read_tsc(&packet, decoder->pos, &decoder->config); in pt_qry_header_tsc()
3129 &packet, &decoder->config); in pt_qry_header_tsc()
3139 struct pt_packet_cbr packet; in pt_qry_decode_cbr() local
3146 size = pt_pkt_read_cbr(&packet, decoder->pos, &decoder->config); in pt_qry_decode_cbr()
3151 &packet, &decoder->config); in pt_qry_decode_cbr()
3160 event->variant.cbr.ratio = packet.ratio; in pt_qry_decode_cbr()
3174 struct pt_packet_cbr packet; in pt_qry_header_cbr() local
3181 size = pt_pkt_read_cbr(&packet, decoder->pos, &decoder->config); in pt_qry_header_cbr()
3186 &packet, &decoder->config); in pt_qry_header_cbr()
3195 event->variant.cbr.ratio = packet.ratio; in pt_qry_header_cbr()
3203 struct pt_packet_tma packet; in pt_qry_decode_tma() local
3209 size = pt_pkt_read_tma(&packet, decoder->pos, &decoder->config); in pt_qry_decode_tma()
3214 &packet, &decoder->config); in pt_qry_decode_tma()
3224 struct pt_packet_mtc packet; in pt_qry_decode_mtc() local
3230 size = pt_pkt_read_mtc(&packet, decoder->pos, &decoder->config); in pt_qry_decode_mtc()
3235 &packet, &decoder->config); in pt_qry_decode_mtc()
3244 const struct pt_packet_cyc *packet, int size) in check_erratum_skd007() argument
3249 if (!decoder || !packet || size < 0) in check_erratum_skd007()
3256 payload = (uint16_t) packet->value; in check_erratum_skd007()
3262 /* Skip this CYC packet. */ in check_erratum_skd007()
3282 struct pt_packet_cyc packet; in pt_qry_decode_cyc() local
3291 size = pt_pkt_read_cyc(&packet, decoder->pos, config); in pt_qry_decode_cyc()
3296 errcode = check_erratum_skd007(decoder, &packet, size); in pt_qry_decode_cyc()
3305 * to the beginning of the OVF packet. in pt_qry_decode_cyc()
3313 &packet, config); in pt_qry_decode_cyc()
3348 struct pt_packet_vmcs packet; in pt_qry_header_vmcs() local
3355 size = pt_pkt_read_vmcs(&packet, decoder->pos, &decoder->config); in pt_qry_header_vmcs()
3364 event->variant.async_vmcs.base = packet.base; in pt_qry_header_vmcs()
3372 struct pt_packet_vmcs packet; in pt_qry_decode_vmcs() local
3379 size = pt_pkt_read_vmcs(&packet, decoder->pos, &decoder->config); in pt_qry_decode_vmcs()
3399 event->variant.async_vmcs.base = packet.base; in pt_qry_decode_vmcs()
3405 /* VMCS events bind to the same TIP packet as an in-flight async in pt_qry_decode_vmcs()
3415 event->variant.async_vmcs.base = packet.base; in pt_qry_decode_vmcs()
3429 event->variant.vmcs.base = packet.base; in pt_qry_decode_vmcs()
3443 struct pt_packet_mnt packet; in pt_qry_decode_mnt() local
3450 size = pt_pkt_read_mnt(&packet, decoder->pos, &decoder->config); in pt_qry_decode_mnt()
3459 event->variant.mnt.payload = packet.payload; in pt_qry_decode_mnt()
3474 struct pt_packet_mnt packet; in pt_qry_header_mnt() local
3481 size = pt_pkt_read_mnt(&packet, decoder->pos, &decoder->config); in pt_qry_header_mnt()
3490 event->variant.mnt.payload = packet.payload; in pt_qry_header_mnt()
3499 struct pt_packet_exstop packet; in pt_qry_decode_exstop() local
3506 size = pt_pkt_read_exstop(&packet, decoder->pos, &decoder->config); in pt_qry_decode_exstop()
3510 if (packet.ip) { in pt_qry_decode_exstop()
3535 struct pt_packet_mwait packet; in pt_qry_decode_mwait() local
3542 size = pt_pkt_read_mwait(&packet, decoder->pos, &decoder->config); in pt_qry_decode_mwait()
3551 event->variant.mwait.hints = packet.hints; in pt_qry_decode_mwait()
3552 event->variant.mwait.ext = packet.ext; in pt_qry_decode_mwait()
3560 struct pt_packet_pwre packet; in pt_qry_decode_pwre() local
3567 size = pt_pkt_read_pwre(&packet, decoder->pos, &decoder->config); in pt_qry_decode_pwre()
3576 event->variant.pwre.state = packet.state; in pt_qry_decode_pwre()
3577 event->variant.pwre.sub_state = packet.sub_state; in pt_qry_decode_pwre()
3579 if (packet.hw) in pt_qry_decode_pwre()
3590 struct pt_packet_pwrx packet; in pt_qry_decode_pwrx() local
3597 size = pt_pkt_read_pwrx(&packet, decoder->pos, &decoder->config); in pt_qry_decode_pwrx()
3606 event->variant.pwrx.last = packet.last; in pt_qry_decode_pwrx()
3607 event->variant.pwrx.deepest = packet.deepest; in pt_qry_decode_pwrx()
3609 if (packet.interrupt) in pt_qry_decode_pwrx()
3611 if (packet.store) in pt_qry_decode_pwrx()
3613 if (packet.autonomous) in pt_qry_decode_pwrx()
3624 struct pt_packet_ptw packet; in pt_qry_decode_ptw() local
3631 size = pt_pkt_read_ptw(&packet, decoder->pos, &decoder->config); in pt_qry_decode_ptw()
3635 pls = pt_ptw_size(packet.plc); in pt_qry_decode_ptw()
3639 if (packet.ip) { in pt_qry_decode_ptw()
3655 event->variant.ptwrite.payload = packet.payload; in pt_qry_decode_ptw()