Lines Matching +full:sample +full:- +full:time
1 // SPDX-License-Identifier: GPL-2.0
4 * Auxtrace support for s390 CPU-Measurement Sampling Facility
17 * see Documentation/perf.data-file-format.txt.
26 * Perf events are not necessarily in time stamp order, as they can be
28 * processed in time order they need to be sorted first.
31 * time stamp lower than this record are processed (and displayed) before
49 * entries, the queue number and a time stamp. However the stack is sorted by
50 * the time stamps. The highest time stamp is at the bottom the lowest
51 * (nearest) time stamp is at the top. That sort order is maintained at all
58 * Each record is handled by s390_cpumsf_process_event(). The time stamp of
59 * the perf record is compared with the time stamp located on the auxtrace_heap
60 * top element. If that time stamp is lower than the time stamp from the
61 * record sample, the auxtrace queues will be processed. As auxtrace queues
64 * position in the auxtrace_buffer of that queue is remembered and the time
72 * Each sampling-data entry in the auxiliary trace data generates a perf sample.
73 * This sample is filled
75 * etc. This sample is processed with perf_session__deliver_synth_event() to
79 * auxiliary traces entries until the time stamp of this record is reached
80 * auxtrace_heap top. This is triggered by ordered_event->deliver().
84 * Event processing of PERF_RECORD_XXX entries relies on time stamp entries.
95 * | - Those generated by perf record command (type number equal or higher
98 * | - Those generated by the kernel are handled by
102 * | Extract time stamp from sample data.
105 * | If timestamp is positive the sample is entered into an ordered_event
108 * | Other timestamps (0 or -1) are handled immediately by
120 * | time stamps from the auxiliary trace buffers. This enables
127 * a sample with IP and call back chain data into GUI data pool.
137 * This enables time synchronization between the data in the perf.data file and
162 #include "s390-cpumsf.h"
163 #include "s390-cpumsf-kernel.h"
164 #include "s390-cpumcf-kernel.h"
166 #include "util/sample.h"
197 struct perf_sample *sample) in s390_cpumcf_dumpctr() argument
203 if (!sf->use_logfile || sf->queues.nr_queues <= sample->cpu) in s390_cpumcf_dumpctr()
206 q = &sf->queues.queue_array[sample->cpu]; in s390_cpumcf_dumpctr()
207 sfq = q->priv; in s390_cpumcf_dumpctr()
211 if (!sfq->logfile_ctr) { in s390_cpumcf_dumpctr()
214 rc = (sf->logdir) in s390_cpumcf_dumpctr()
216 sf->logdir, sample->cpu) in s390_cpumcf_dumpctr()
217 : asprintf(&name, "aux.ctr.%02x", sample->cpu); in s390_cpumcf_dumpctr()
219 sfq->logfile_ctr = fopen(name, "w"); in s390_cpumcf_dumpctr()
220 if (sfq->logfile_ctr == NULL) { in s390_cpumcf_dumpctr()
228 if (sfq->logfile_ctr) { in s390_cpumcf_dumpctr()
229 /* See comment above for -4 */ in s390_cpumcf_dumpctr()
230 size_t n = fwrite(sample->raw_data, sample->raw_size - 4, 1, in s390_cpumcf_dumpctr()
231 sfq->logfile_ctr); in s390_cpumcf_dumpctr()
240 /* Display s390 CPU measurement facility basic-sampling data entry
253 local.def = be16toh(basicp->def); in s390_cpumsf_basic_show()
262 local.ia = be64toh(basicp->ia); in s390_cpumsf_basic_show()
263 local.gpp = be64toh(basicp->gpp); in s390_cpumsf_basic_show()
264 local.hpp = be64toh(basicp->hpp); in s390_cpumsf_basic_show()
267 if (basic->def != 1) { in s390_cpumsf_basic_show()
274 pos, basic->def, basic->U, in s390_cpumsf_basic_show()
275 basic->T ? 'T' : ' ', in s390_cpumsf_basic_show()
276 basic->W ? 'W' : ' ', in s390_cpumsf_basic_show()
277 basic->P ? 'P' : ' ', in s390_cpumsf_basic_show()
278 basic->I ? 'I' : ' ', in s390_cpumsf_basic_show()
279 basic->AS, basic->prim_asn, basic->ia, basic->CL, in s390_cpumsf_basic_show()
280 basic->hpp, basic->gpp); in s390_cpumsf_basic_show()
284 /* Display s390 CPU measurement facility diagnostic-sampling data entry.
296 local.def = be16toh(diagp->def); in s390_cpumsf_diag_show()
300 if (diag->def < S390_CPUMSF_DIAG_DEF_FIRST) { in s390_cpumsf_diag_show()
305 pos, diag->def, diag->I ? 'I' : ' '); in s390_cpumsf_diag_show()
313 /* te->t set: TOD in STCKE format, bytes 8-15 in trailer_timestamp()
314 * to->t not set: TOD in STCK format, bytes 0-7 in trailer_timestamp()
318 memcpy(&ts, &te->timestamp[idx], sizeof(ts)); in trailer_timestamp()
328 const unsigned long long flags = be64toh(te->flags); in s390_cpumsf_trailer_show()
336 memcpy(&local.timestamp, te->timestamp, sizeof(te->timestamp)); in s390_cpumsf_trailer_show()
337 local.overflow = be64toh(te->overflow); in s390_cpumsf_trailer_show()
338 local.clock_base = be64toh(te->progusage[0]) >> 63 & 1; in s390_cpumsf_trailer_show()
339 local.progusage2 = be64toh(te->progusage2); in s390_cpumsf_trailer_show()
342 if (te->bsdes != sizeof(struct hws_basic_entry)) { in s390_cpumsf_trailer_show()
347 " dsdes:%d Overflow:%lld Time:%#llx\n" in s390_cpumsf_trailer_show()
350 te->f ? 'F' : ' ', in s390_cpumsf_trailer_show()
351 te->a ? 'A' : ' ', in s390_cpumsf_trailer_show()
352 te->t ? 'T' : ' ', in s390_cpumsf_trailer_show()
353 te->bsdes, te->dsdes, te->overflow, in s390_cpumsf_trailer_show()
354 trailer_timestamp(te, te->clock_base), in s390_cpumsf_trailer_show()
355 te->clock_base, te->progusage2); in s390_cpumsf_trailer_show()
359 /* Test a sample data block. It must be 4KB or a multiple thereof in size and
360 * 4KB page aligned. Each sample data page has a trailer entry at the
361 * end which contains the sample entry data sizes.
363 * Return true if the sample data block passes the checks and set the
380 if (len & (S390_CPUMSF_PAGESZ - 1)) /* Illegal size */ in s390_cpumsf_validate()
382 if (be16toh(basic->def) != 1) /* No basic set entry, must be first */ in s390_cpumsf_validate()
386 - sizeof(*te)); in s390_cpumsf_validate()
387 *bsdes = be16toh(te->bsdes); in s390_cpumsf_validate()
388 *dsdes = be16toh(te->dsdes); in s390_cpumsf_validate()
389 if (!te->bsdes && !te->dsdes) { in s390_cpumsf_validate()
423 size_t payload = S390_CPUMSF_PAGESZ - sizeof(struct hws_trailer_entry); in s390_cpumsf_reached_trailer()
425 if (payload - (pos & (S390_CPUMSF_PAGESZ - 1)) < entry_sz) in s390_cpumsf_reached_trailer()
446 if (!s390_cpumsf_validate(sf->machine_type, buf, len, &bsdes, in s390_cpumsf_dump()
450 len, sf->machine_type, bsdes, dsdes); in s390_cpumsf_dump()
478 & ~(S390_CPUMSF_PAGESZ - 1); in s390_cpumsf_dump()
479 pos -= sizeof(te); in s390_cpumsf_dump()
507 struct perf_sample sample = { in s390_cpumsf_make_event() local
508 .ip = basic->ia, in s390_cpumsf_make_event()
509 .pid = basic->hpp & S390_LPP_PID_MASK, in s390_cpumsf_make_event()
510 .tid = basic->hpp & S390_LPP_PID_MASK, in s390_cpumsf_make_event()
512 .cpu = sfq->cpu, in s390_cpumsf_make_event()
518 if (basic->CL == 1) /* Native LPAR mode */ in s390_cpumsf_make_event()
519 sample.cpumode = basic->P ? PERF_RECORD_MISC_USER in s390_cpumsf_make_event()
521 else if (basic->CL == 2) /* Guest kernel/user space */ in s390_cpumsf_make_event()
522 sample.cpumode = basic->P ? PERF_RECORD_MISC_GUEST_USER in s390_cpumsf_make_event()
524 else if (basic->gpp || basic->prim_asn != 0xffff) in s390_cpumsf_make_event()
526 sample.cpumode = basic->P ? PERF_RECORD_MISC_GUEST_USER in s390_cpumsf_make_event()
529 sample.cpumode = basic->P ? PERF_RECORD_MISC_USER in s390_cpumsf_make_event()
532 event.sample.header.type = PERF_RECORD_SAMPLE; in s390_cpumsf_make_event()
533 event.sample.header.misc = sample.cpumode; in s390_cpumsf_make_event()
534 event.sample.header.size = sizeof(struct perf_event_header); in s390_cpumsf_make_event()
537 __func__, pos, sample.ip, basic->P, basic->CL, sample.pid, in s390_cpumsf_make_event()
538 sample.tid, sample.cpumode, sample.cpu); in s390_cpumsf_make_event()
539 if (perf_session__deliver_synth_event(sfq->sf->session, &event, in s390_cpumsf_make_event()
540 &sample)) { in s390_cpumsf_make_event()
554 - sizeof(*te)); in get_trailer_time()
557 clock_base = be64toh(te->progusage[0]) >> 63 & 0x1; in get_trailer_time()
558 progusage2 = be64toh(te->progusage[1]); in get_trailer_time()
560 clock_base = te->clock_base; in get_trailer_time()
561 progusage2 = te->progusage2; in get_trailer_time()
566 /* Correct calculation to convert time stamp in trailer entry to in get_trailer_time()
570 aux_time = trailer_timestamp(te, clock_base) - progusage2; in get_trailer_time()
576 * pointer to the queue, the second parameter is the time stamp. This
577 * is the time stamp:
578 * - of the event that triggered this processing.
579 * - or the time stamp when the last processing of this queue stopped.
582 * (see buffer->use_data and buffer->use_size).
585 * reflect the time stamp of the last processed auxiliary data entry
587 * returned time stamp to record the last processed entry in this
592 * time stamp from the trailer entry until which position
596 * returns the maximum time stamp.
598 * maximum time stamp.
602 struct s390_cpumsf *sf = sfq->sf; in s390_cpumsf_samples()
603 unsigned char *buf = sfq->buffer->use_data; in s390_cpumsf_samples()
604 size_t len = sfq->buffer->use_size; in s390_cpumsf_samples()
611 if (!s390_cpumsf_validate(sf->machine_type, buf, len, &bsdes, in s390_cpumsf_samples()
614 return -1; in s390_cpumsf_samples()
617 /* Get trailer entry time stamp and check if entries in in s390_cpumsf_samples()
619 * time stamp of the first entry is too high, whole buffer in s390_cpumsf_samples()
620 * can be skipped. In this case return time stamp. in s390_cpumsf_samples()
625 (s64)sfq->buffer->data_offset); in s390_cpumsf_samples()
640 err = -EBADF; in s390_cpumsf_samples()
649 & ~(S390_CPUMSF_PAGESZ - 1); in s390_cpumsf_samples()
660 sfq->buffer->use_data += pos; in s390_cpumsf_samples()
661 sfq->buffer->use_size -= pos; in s390_cpumsf_samples()
668 sfq->buffer->use_size = 0; in s390_cpumsf_samples()
669 sfq->buffer->use_data = NULL; in s390_cpumsf_samples()
676 * This is the time stamp until which the auxiliary entries should
688 * maximum time stamp.
701 queue = &sfq->sf->queues.queue_array[sfq->queue_nr]; in s390_cpumsf_run_decoder()
705 * and decoding might stop in between. This depends on the time in s390_cpumsf_run_decoder()
707 * data and the time stamp of the event triggering the decoding. in s390_cpumsf_run_decoder()
709 if (sfq->buffer == NULL) { in s390_cpumsf_run_decoder()
710 sfq->buffer = buffer = auxtrace_buffer__next(queue, in s390_cpumsf_run_decoder()
711 sfq->buffer); in s390_cpumsf_run_decoder()
717 if (buffer->data) { in s390_cpumsf_run_decoder()
718 buffer->use_size = buffer->size; in s390_cpumsf_run_decoder()
719 buffer->use_data = buffer->data; in s390_cpumsf_run_decoder()
721 if (sfq->logfile) { /* Write into log file */ in s390_cpumsf_run_decoder()
722 size_t rc = fwrite(buffer->data, buffer->size, 1, in s390_cpumsf_run_decoder()
723 sfq->logfile); in s390_cpumsf_run_decoder()
728 buffer = sfq->buffer; in s390_cpumsf_run_decoder()
730 if (!buffer->data) { in s390_cpumsf_run_decoder()
731 int fd = perf_data__fd(sfq->sf->session->data); in s390_cpumsf_run_decoder()
733 buffer->data = auxtrace_buffer__get_data(buffer, fd); in s390_cpumsf_run_decoder()
734 if (!buffer->data) in s390_cpumsf_run_decoder()
735 return -ENOMEM; in s390_cpumsf_run_decoder()
736 buffer->use_size = buffer->size; in s390_cpumsf_run_decoder()
737 buffer->use_data = buffer->data; in s390_cpumsf_run_decoder()
739 if (sfq->logfile) { /* Write into log file */ in s390_cpumsf_run_decoder()
740 size_t rc = fwrite(buffer->data, buffer->size, 1, in s390_cpumsf_run_decoder()
741 sfq->logfile); in s390_cpumsf_run_decoder()
747 __func__, sfq->queue_nr, buffer->buffer_nr, buffer->offset, in s390_cpumsf_run_decoder()
748 buffer->size, buffer->use_size); in s390_cpumsf_run_decoder()
751 /* If non-zero, there is either an error (err < 0) or the buffer is in s390_cpumsf_run_decoder()
758 sfq->buffer = NULL; in s390_cpumsf_run_decoder()
759 list_del_init(&buffer->list); in s390_cpumsf_run_decoder()
776 sfq->sf = sf; in s390_cpumsf_alloc_queue()
777 sfq->queue_nr = queue_nr; in s390_cpumsf_alloc_queue()
778 sfq->cpu = -1; in s390_cpumsf_alloc_queue()
779 if (sf->use_logfile) { in s390_cpumsf_alloc_queue()
783 rc = (sf->logdir) in s390_cpumsf_alloc_queue()
785 sf->logdir, queue_nr) in s390_cpumsf_alloc_queue()
788 sfq->logfile = fopen(name, "w"); in s390_cpumsf_alloc_queue()
789 if (sfq->logfile == NULL) { in s390_cpumsf_alloc_queue()
792 sf->use_logfile = false; in s390_cpumsf_alloc_queue()
803 struct s390_cpumsf_queue *sfq = queue->priv; in s390_cpumsf_setup_queue()
805 if (list_empty(&queue->head)) in s390_cpumsf_setup_queue()
811 return -ENOMEM; in s390_cpumsf_setup_queue()
812 queue->priv = sfq; in s390_cpumsf_setup_queue()
814 if (queue->cpu != -1) in s390_cpumsf_setup_queue()
815 sfq->cpu = queue->cpu; in s390_cpumsf_setup_queue()
817 return auxtrace_heap__add(&sf->heap, queue_nr, ts); in s390_cpumsf_setup_queue()
825 for (i = 0; i < sf->queues.nr_queues; i++) { in s390_cpumsf_setup_queues()
826 ret = s390_cpumsf_setup_queue(sf, &sf->queues.queue_array[i], in s390_cpumsf_setup_queues()
836 if (!sf->queues.new_data) in s390_cpumsf_update_queues()
839 sf->queues.new_data = false; in s390_cpumsf_update_queues()
853 if (!sf->heap.heap_cnt) in s390_cpumsf_process_queues()
856 if (sf->heap.heap_array[0].ordinal >= timestamp) in s390_cpumsf_process_queues()
859 queue_nr = sf->heap.heap_array[0].queue_nr; in s390_cpumsf_process_queues()
860 queue = &sf->queues.queue_array[queue_nr]; in s390_cpumsf_process_queues()
861 sfq = queue->priv; in s390_cpumsf_process_queues()
863 auxtrace_heap__pop(&sf->heap); in s390_cpumsf_process_queues()
864 if (sf->heap.heap_cnt) { in s390_cpumsf_process_queues()
865 ts = sf->heap.heap_array[0].ordinal + 1; in s390_cpumsf_process_queues()
874 auxtrace_heap__add(&sf->heap, queue_nr, ts); in s390_cpumsf_process_queues()
878 ret = auxtrace_heap__add(&sf->heap, queue_nr, ts); in s390_cpumsf_process_queues()
893 strncpy(msg, "Lost Auxiliary Trace Buffer", sizeof(msg) - 1); in s390_cpumsf_synth_error()
897 err = perf_session__deliver_synth_event(sf->session, &event, NULL); in s390_cpumsf_synth_error()
904 static int s390_cpumsf_lost(struct s390_cpumsf *sf, struct perf_sample *sample) in s390_cpumsf_lost() argument
906 return s390_cpumsf_synth_error(sf, 1, sample->cpu, in s390_cpumsf_lost()
907 sample->pid, sample->tid, 0, in s390_cpumsf_lost()
908 sample->time); in s390_cpumsf_lost()
914 struct perf_sample *sample, in s390_cpumsf_process_event() argument
917 struct s390_cpumsf *sf = container_of(session->auxtrace, in s390_cpumsf_process_event()
920 u64 timestamp = sample->time; in s390_cpumsf_process_event()
928 if (!tool->ordered_events) { in s390_cpumsf_process_event()
930 return -EINVAL; in s390_cpumsf_process_event()
933 if (event->header.type == PERF_RECORD_SAMPLE && in s390_cpumsf_process_event()
934 sample->raw_size) { in s390_cpumsf_process_event()
936 ev_bc000 = evlist__event2evsel(session->evlist, event); in s390_cpumsf_process_event()
938 ev_bc000->core.attr.config == PERF_EVENT_CPUM_CF_DIAG) in s390_cpumsf_process_event()
939 err = s390_cpumcf_dumpctr(sf, sample); in s390_cpumsf_process_event()
943 if (event->header.type == PERF_RECORD_AUX && in s390_cpumsf_process_event()
944 event->aux.flags & PERF_AUX_FLAG_TRUNCATED) in s390_cpumsf_process_event()
945 return s390_cpumsf_lost(sf, sample); in s390_cpumsf_process_event()
960 struct s390_cpumsf *sf = container_of(session->auxtrace, in s390_cpumsf_process_auxtrace_event()
964 int fd = perf_data__fd(session->data); in s390_cpumsf_process_auxtrace_event()
969 if (sf->data_queued) in s390_cpumsf_process_auxtrace_event()
972 if (perf_data__is_pipe(session->data)) { in s390_cpumsf_process_auxtrace_event()
976 if (data_offset == -1) in s390_cpumsf_process_auxtrace_event()
977 return -errno; in s390_cpumsf_process_auxtrace_event()
980 err = auxtrace_queues__add_event(&sf->queues, session, event, in s390_cpumsf_process_auxtrace_event()
988 s390_cpumsf_dump_event(sf, buffer->data, in s390_cpumsf_process_auxtrace_event()
989 buffer->size); in s390_cpumsf_process_auxtrace_event()
1008 struct s390_cpumsf *sf = container_of(session->auxtrace, in s390_cpumsf_free_queues()
1011 struct auxtrace_queues *queues = &sf->queues; in s390_cpumsf_free_queues()
1014 for (i = 0; i < queues->nr_queues; i++) { in s390_cpumsf_free_queues()
1016 queues->queue_array[i].priv; in s390_cpumsf_free_queues()
1019 if (sfq->logfile) { in s390_cpumsf_free_queues()
1020 fclose(sfq->logfile); in s390_cpumsf_free_queues()
1021 sfq->logfile = NULL; in s390_cpumsf_free_queues()
1023 if (sfq->logfile_ctr) { in s390_cpumsf_free_queues()
1024 fclose(sfq->logfile_ctr); in s390_cpumsf_free_queues()
1025 sfq->logfile_ctr = NULL; in s390_cpumsf_free_queues()
1028 zfree(&queues->queue_array[i].priv); in s390_cpumsf_free_queues()
1035 struct s390_cpumsf *sf = container_of(session->auxtrace, in s390_cpumsf_free()
1039 auxtrace_heap__free(&sf->heap); in s390_cpumsf_free()
1041 session->auxtrace = NULL; in s390_cpumsf_free()
1042 zfree(&sf->logdir); in s390_cpumsf_free()
1050 return evsel->core.attr.type == PERF_TYPE_RAW && in s390_cpumsf_evsel_is_auxtrace()
1051 evsel->core.attr.config == PERF_EVENT_CPUM_SF_DIAG; in s390_cpumsf_evsel_is_auxtrace()
1071 if (!itops || !itops->set) in check_auxtrace_itrace()
1073 ison = itops->inject || itops->instructions || itops->branches || in check_auxtrace_itrace()
1074 itops->transactions || itops->ptwrites || in check_auxtrace_itrace()
1075 itops->pwr_events || itops->errors || in check_auxtrace_itrace()
1076 itops->dont_decode || itops->calls || itops->returns || in check_auxtrace_itrace()
1077 itops->callchain || itops->thread_stack || in check_auxtrace_itrace()
1078 itops->last_branch || itops->add_callchain || in check_auxtrace_itrace()
1079 itops->add_last_branch; in check_auxtrace_itrace()
1082 pr_err("Unsupported --itrace options specified\n"); in check_auxtrace_itrace()
1098 sf->logdir = strdup(value); in s390_cpumsf__config()
1099 if (sf->logdir == NULL) { in s390_cpumsf__config()
1104 rc = stat(sf->logdir, &stbuf); in s390_cpumsf__config()
1105 if (rc == -1 || !S_ISDIR(stbuf.st_mode)) { in s390_cpumsf__config()
1108 zfree(&sf->logdir); in s390_cpumsf__config()
1116 struct perf_record_auxtrace_info *auxtrace_info = &event->auxtrace_info; in s390_cpumsf_process_auxtrace_info()
1120 if (auxtrace_info->header.size < sizeof(struct perf_record_auxtrace_info)) in s390_cpumsf_process_auxtrace_info()
1121 return -EINVAL; in s390_cpumsf_process_auxtrace_info()
1125 return -ENOMEM; in s390_cpumsf_process_auxtrace_info()
1127 if (!check_auxtrace_itrace(session->itrace_synth_opts)) { in s390_cpumsf_process_auxtrace_info()
1128 err = -EINVAL; in s390_cpumsf_process_auxtrace_info()
1131 sf->use_logfile = session->itrace_synth_opts->log; in s390_cpumsf_process_auxtrace_info()
1132 if (sf->use_logfile) in s390_cpumsf_process_auxtrace_info()
1135 err = auxtrace_queues__init(&sf->queues); in s390_cpumsf_process_auxtrace_info()
1139 sf->session = session; in s390_cpumsf_process_auxtrace_info()
1140 sf->machine = &session->machines.host; /* No kvm support */ in s390_cpumsf_process_auxtrace_info()
1141 sf->auxtrace_type = auxtrace_info->type; in s390_cpumsf_process_auxtrace_info()
1142 sf->pmu_type = PERF_TYPE_RAW; in s390_cpumsf_process_auxtrace_info()
1143 sf->machine_type = s390_cpumsf_get_type(session->evlist->env->cpuid); in s390_cpumsf_process_auxtrace_info()
1145 sf->auxtrace.process_event = s390_cpumsf_process_event; in s390_cpumsf_process_auxtrace_info()
1146 sf->auxtrace.process_auxtrace_event = s390_cpumsf_process_auxtrace_event; in s390_cpumsf_process_auxtrace_info()
1147 sf->auxtrace.flush_events = s390_cpumsf_flush; in s390_cpumsf_process_auxtrace_info()
1148 sf->auxtrace.free_events = s390_cpumsf_free_events; in s390_cpumsf_process_auxtrace_info()
1149 sf->auxtrace.free = s390_cpumsf_free; in s390_cpumsf_process_auxtrace_info()
1150 sf->auxtrace.evsel_is_auxtrace = s390_cpumsf_evsel_is_auxtrace; in s390_cpumsf_process_auxtrace_info()
1151 session->auxtrace = &sf->auxtrace; in s390_cpumsf_process_auxtrace_info()
1156 err = auxtrace_queues__process_index(&sf->queues, session); in s390_cpumsf_process_auxtrace_info()
1160 if (sf->queues.populated) in s390_cpumsf_process_auxtrace_info()
1161 sf->data_queued = true; in s390_cpumsf_process_auxtrace_info()
1166 auxtrace_queues__free(&sf->queues); in s390_cpumsf_process_auxtrace_info()
1167 session->auxtrace = NULL; in s390_cpumsf_process_auxtrace_info()
1169 zfree(&sf->logdir); in s390_cpumsf_process_auxtrace_info()