Lines Matching defs:tidq

223 	struct cs_etm_traceid_queue *tidq;
228 tidq = etmq->traceid_queues[idx];
229 cs_etm__clear_packet_queue(&tidq->packet_queue);
234 struct cs_etm_traceid_queue *tidq,
241 cs_etm__clear_packet_queue(&tidq->packet_queue);
244 tidq->tid = queue->tid;
245 tidq->pid = -1;
246 tidq->trace_chan_id = trace_chan_id;
248 tidq->packet = zalloc(sizeof(struct cs_etm_packet));
249 if (!tidq->packet)
252 tidq->prev_packet = zalloc(sizeof(struct cs_etm_packet));
253 if (!tidq->prev_packet)
261 tidq->last_branch = zalloc(sz);
262 if (!tidq->last_branch)
264 tidq->last_branch_rb = zalloc(sz);
265 if (!tidq->last_branch_rb)
269 tidq->event_buf = malloc(PERF_SAMPLE_MAX_SIZE);
270 if (!tidq->event_buf)
276 zfree(&tidq->last_branch_rb);
277 zfree(&tidq->last_branch);
278 zfree(&tidq->prev_packet);
279 zfree(&tidq->packet);
290 struct cs_etm_traceid_queue *tidq, **traceid_queues;
309 tidq = malloc(sizeof(*tidq));
310 if (!tidq)
313 memset(tidq, 0, sizeof(*tidq));
325 if (cs_etm__init_traceid_queue(etmq, tidq, trace_chan_id))
341 traceid_queues[idx] = tidq;
352 free(tidq);
360 struct cs_etm_traceid_queue *tidq;
362 tidq = cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id);
363 if (tidq)
364 return &tidq->packet_queue;
370 struct cs_etm_traceid_queue *tidq)
380 tmp = tidq->packet;
381 tidq->packet = tidq->prev_packet;
382 tidq->prev_packet = tmp;
553 struct cs_etm_traceid_queue *tidq;
561 tidq = etmq->traceid_queues[idx];
562 thread__zput(tidq->thread);
563 zfree(&tidq->event_buf);
564 zfree(&tidq->last_branch);
565 zfree(&tidq->last_branch_rb);
566 zfree(&tidq->prev_packet);
567 zfree(&tidq->packet);
568 zfree(&tidq);
677 struct cs_etm_traceid_queue *tidq;
684 tidq = cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id);
685 if (!tidq)
688 thread = tidq->thread;
887 struct cs_etm_traceid_queue *tidq)
889 struct branch_stack *bs_src = tidq->last_branch_rb;
890 struct branch_stack *bs_dst = tidq->last_branch;
910 nr = etmq->etm->synth_opts.last_branch_sz - tidq->last_branch_pos;
912 &bs_src->entries[tidq->last_branch_pos],
925 sizeof(struct branch_entry) * tidq->last_branch_pos);
930 void cs_etm__reset_last_branch_rb(struct cs_etm_traceid_queue *tidq)
932 tidq->last_branch_pos = 0;
933 tidq->last_branch_rb->nr = 0;
991 struct cs_etm_traceid_queue *tidq)
993 struct branch_stack *bs = tidq->last_branch_rb;
1002 if (!tidq->last_branch_pos)
1003 tidq->last_branch_pos = etmq->etm->synth_opts.last_branch_sz;
1005 tidq->last_branch_pos -= 1;
1007 be = &bs->entries[tidq->last_branch_pos];
1008 be->from = cs_etm__last_executed_instr(tidq->prev_packet);
1009 be->to = cs_etm__first_executed_instr(tidq->packet);
1073 struct cs_etm_traceid_queue *tidq)
1075 if ((!tidq->thread) && (tidq->tid != -1))
1076 tidq->thread = machine__find_thread(etm->machine, -1,
1077 tidq->tid);
1079 if (tidq->thread)
1080 tidq->pid = tidq->thread->pid_;
1088 struct cs_etm_traceid_queue *tidq;
1090 tidq = cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id);
1091 if (!tidq)
1101 tidq->tid = tid;
1102 thread__zput(tidq->thread);
1104 cs_etm__set_pid_tid_cpu(etm, tidq);
1143 struct cs_etm_traceid_queue *tidq,
1148 union perf_event *event = tidq->event_buf;
1156 sample.pid = tidq->pid;
1157 sample.tid = tidq->tid;
1161 sample.cpu = tidq->packet->cpu;
1162 sample.flags = tidq->prev_packet->flags;
1165 cs_etm__copy_insn(etmq, tidq->trace_chan_id, tidq->packet, &sample);
1168 sample.branch_stack = tidq->last_branch;
1192 struct cs_etm_traceid_queue *tidq)
1197 union perf_event *event = tidq->event_buf;
1205 ip = cs_etm__last_executed_instr(tidq->prev_packet);
1212 sample.pid = tidq->pid;
1213 sample.tid = tidq->tid;
1214 sample.addr = cs_etm__first_executed_instr(tidq->packet);
1218 sample.cpu = tidq->packet->cpu;
1219 sample.flags = tidq->prev_packet->flags;
1222 cs_etm__copy_insn(etmq, tidq->trace_chan_id, tidq->prev_packet,
1374 struct cs_etm_traceid_queue *tidq)
1378 u8 trace_chan_id = tidq->trace_chan_id;
1382 instrs_prev = tidq->period_instructions;
1384 tidq->period_instructions += tidq->packet->instr_count;
1391 tidq->prev_packet->sample_type == CS_ETM_RANGE &&
1392 tidq->prev_packet->last_instr_taken_branch)
1393 cs_etm__update_last_branch_rb(etmq, tidq);
1396 tidq->period_instructions >= etm->instructions_sample_period) {
1419 * tidq->packet->instr_count
1427 * tidq->packet->instr_count represents the number of
1441 * to tidq->period_instructions for next round calculation.
1454 cs_etm__copy_last_branch_rb(etmq, tidq);
1456 while (tidq->period_instructions >=
1465 tidq->packet, offset - 1);
1467 etmq, tidq, addr,
1473 tidq->period_instructions -=
1482 if (tidq->prev_packet->sample_type == CS_ETM_DISCONTINUITY)
1486 if (tidq->prev_packet->sample_type == CS_ETM_RANGE &&
1487 tidq->prev_packet->last_instr_taken_branch)
1491 ret = cs_etm__synth_branch_sample(etmq, tidq);
1497 cs_etm__packet_swap(etm, tidq);
1502 static int cs_etm__exception(struct cs_etm_traceid_queue *tidq)
1515 if (tidq->prev_packet->sample_type == CS_ETM_RANGE)
1516 tidq->prev_packet->last_instr_taken_branch = true;
1522 struct cs_etm_traceid_queue *tidq)
1528 if (tidq->prev_packet->sample_type == CS_ETM_EMPTY)
1532 tidq->prev_packet->sample_type == CS_ETM_RANGE) {
1536 cs_etm__copy_last_branch_rb(etmq, tidq);
1545 addr = cs_etm__last_executed_instr(tidq->prev_packet);
1548 etmq, tidq, addr,
1549 tidq->period_instructions);
1553 tidq->period_instructions = 0;
1558 tidq->prev_packet->sample_type == CS_ETM_RANGE) {
1559 err = cs_etm__synth_branch_sample(etmq, tidq);
1565 cs_etm__packet_swap(etm, tidq);
1569 cs_etm__reset_last_branch_rb(tidq);
1575 struct cs_etm_traceid_queue *tidq)
1589 tidq->prev_packet->sample_type == CS_ETM_RANGE) {
1593 cs_etm__copy_last_branch_rb(etmq, tidq);
1599 addr = cs_etm__last_executed_instr(tidq->prev_packet);
1602 etmq, tidq, addr,
1603 tidq->period_instructions);
1607 tidq->period_instructions = 0;
1711 struct cs_etm_traceid_queue *tidq, u64 magic)
1713 u8 trace_chan_id = tidq->trace_chan_id;
1714 struct cs_etm_packet *packet = tidq->packet;
1715 struct cs_etm_packet *prev_packet = tidq->prev_packet;
1736 static bool cs_etm__is_async_exception(struct cs_etm_traceid_queue *tidq,
1739 struct cs_etm_packet *packet = tidq->packet;
1763 struct cs_etm_traceid_queue *tidq,
1766 u8 trace_chan_id = tidq->trace_chan_id;
1767 struct cs_etm_packet *packet = tidq->packet;
1768 struct cs_etm_packet *prev_packet = tidq->prev_packet;
1812 struct cs_etm_traceid_queue *tidq)
1814 struct cs_etm_packet *packet = tidq->packet;
1815 struct cs_etm_packet *prev_packet = tidq->prev_packet;
1816 u8 trace_chan_id = tidq->trace_chan_id;
1919 if (cs_etm__is_syscall(etmq, tidq, magic))
1927 else if (cs_etm__is_async_exception(tidq, magic))
1936 else if (cs_etm__is_sync_exception(etmq, tidq, magic))
2019 struct cs_etm_traceid_queue *tidq)
2024 packet_queue = &tidq->packet_queue;
2029 tidq->packet);
2044 ret = cs_etm__set_sample_flags(etmq, tidq);
2048 switch (tidq->packet->sample_type) {
2055 cs_etm__sample(etmq, tidq);
2064 cs_etm__exception(tidq);
2071 cs_etm__flush(etmq, tidq);
2092 struct cs_etm_traceid_queue *tidq;
2097 tidq = etmq->traceid_queues[idx];
2100 cs_etm__process_traceid_queue(etmq, tidq);
2106 cs_etm__flush(etmq, tidq);
2113 struct cs_etm_traceid_queue *tidq;
2115 tidq = cs_etm__etmq_get_traceid_queue(etmq, CS_ETM_PER_THREAD_TRACEID);
2116 if (!tidq)
2136 err = cs_etm__process_traceid_queue(etmq, tidq);
2142 err = cs_etm__end_block(etmq, tidq);
2157 struct cs_etm_traceid_queue *tidq;
2162 tidq = cs_etm__etmq_get_traceid_queue(etmq,
2165 if (!tidq)
2168 if ((tid == -1) || (tidq->tid == tid)) {
2169 cs_etm__set_pid_tid_cpu(etm, tidq);
2185 struct cs_etm_traceid_queue *tidq;
2204 tidq = cs_etm__etmq_get_traceid_queue(etmq, trace_chan_id);
2205 if (!tidq) {
2219 ret = cs_etm__process_traceid_queue(etmq, tidq);