Lines Matching full:vpa

3  * VPA DTL PMU support
41 struct powerpc_vpadtl *vpa; member
91 static void powerpc_vpadtl_dump(struct powerpc_vpadtl *vpa __maybe_unused, in powerpc_vpadtl_dump()
99 ". ... VPA DTL PMU data: size %zu bytes, entries is %zu\n", in powerpc_vpadtl_dump()
163 static void powerpc_vpadtl_dump_event(struct powerpc_vpadtl *vpa, unsigned char *buf, in powerpc_vpadtl_dump_event() argument
167 powerpc_vpadtl_dump(vpa, buf, len); in powerpc_vpadtl_dump_event()
180 struct powerpc_vpadtl *vpa, u64 save, int cpu) in powerpc_vpadtl_sample() argument
188 sample.id = vpa->sample_id; in powerpc_vpadtl_sample()
200 if (perf_session__deliver_synth_event(vpa->session, &event, &sample)) { in powerpc_vpadtl_sample()
211 struct auxtrace_queues *queues = &vpaq->vpa->queues; in powerpc_vpadtl_get_buffer()
226 int fd = perf_data__fd(vpaq->vpa->session->data); in powerpc_vpadtl_get_buffer()
247 * The first entry in the queue for VPA DTL PMU has the boot timebase,
314 struct powerpc_vpadtl *vpa = vpaq->vpa; in powerpc_vpadtl_run_decoder() local
327 * Error is detected when decoding VPA PMU trace. Continue to in powerpc_vpadtl_run_decoder()
353 ret = powerpc_vpadtl_sample(record, vpa, vpaq_timestamp, vpaq->cpu); in powerpc_vpadtl_run_decoder()
369 static int powerpc_vpadtl_process_queues(struct powerpc_vpadtl *vpa, u64 timestamp) in powerpc_vpadtl_process_queues() argument
379 if (!vpa->heap.heap_cnt) in powerpc_vpadtl_process_queues()
382 if (vpa->heap.heap_array[0].ordinal >= timestamp) in powerpc_vpadtl_process_queues()
385 queue_nr = vpa->heap.heap_array[0].queue_nr; in powerpc_vpadtl_process_queues()
386 queue = &vpa->queues.queue_array[queue_nr]; in powerpc_vpadtl_process_queues()
389 auxtrace_heap__pop(&vpa->heap); in powerpc_vpadtl_process_queues()
391 if (vpa->heap.heap_cnt) { in powerpc_vpadtl_process_queues()
392 ts = vpa->heap.heap_array[0].ordinal + 1; in powerpc_vpadtl_process_queues()
401 auxtrace_heap__add(&vpa->heap, queue_nr, ts); in powerpc_vpadtl_process_queues()
406 ret = auxtrace_heap__add(&vpa->heap, queue_nr, ts); in powerpc_vpadtl_process_queues()
416 static struct powerpc_vpadtl_queue *powerpc_vpadtl__alloc_queue(struct powerpc_vpadtl *vpa, in powerpc_vpadtl__alloc_queue() argument
425 vpaq->vpa = vpa; in powerpc_vpadtl__alloc_queue()
446 static int powerpc_vpadtl__setup_queue(struct powerpc_vpadtl *vpa, in powerpc_vpadtl__setup_queue() argument
455 vpaq = powerpc_vpadtl__alloc_queue(vpa, queue_nr); in powerpc_vpadtl__setup_queue()
476 ret = auxtrace_heap__add(&vpa->heap, queue_nr, vpaq->timestamp); in powerpc_vpadtl__setup_queue()
485 static int powerpc_vpadtl__setup_queues(struct powerpc_vpadtl *vpa) in powerpc_vpadtl__setup_queues() argument
490 for (i = 0; i < vpa->queues.nr_queues; i++) { in powerpc_vpadtl__setup_queues()
491 ret = powerpc_vpadtl__setup_queue(vpa, &vpa->queues.queue_array[i], i); in powerpc_vpadtl__setup_queues()
499 static int powerpc_vpadtl__update_queues(struct powerpc_vpadtl *vpa) in powerpc_vpadtl__update_queues() argument
501 if (vpa->queues.new_data) { in powerpc_vpadtl__update_queues()
502 vpa->queues.new_data = false; in powerpc_vpadtl__update_queues()
503 return powerpc_vpadtl__setup_queues(vpa); in powerpc_vpadtl__update_queues()
514 struct powerpc_vpadtl *vpa = session_to_vpa(session); in powerpc_vpadtl_process_event() local
521 pr_err("VPA requires ordered events\n"); in powerpc_vpadtl_process_event()
526 err = powerpc_vpadtl__update_queues(vpa); in powerpc_vpadtl_process_event()
530 err = powerpc_vpadtl_process_queues(vpa, sample->time); in powerpc_vpadtl_process_event()
543 struct powerpc_vpadtl *vpa = session_to_vpa(session); in powerpc_vpadtl_process_auxtrace_event() local
560 err = auxtrace_queues__add_event(&vpa->queues, session, event, in powerpc_vpadtl_process_auxtrace_event()
568 powerpc_vpadtl_dump_event(vpa, buffer->data, buffer->size); in powerpc_vpadtl_process_auxtrace_event()
583 struct powerpc_vpadtl *vpa = session_to_vpa(session); in powerpc_vpadtl_free_events() local
584 struct auxtrace_queues *queues = &vpa->queues; in powerpc_vpadtl_free_events()
594 struct powerpc_vpadtl *vpa = session_to_vpa(session); in powerpc_vpadtl_free() local
596 auxtrace_heap__free(&vpa->heap); in powerpc_vpadtl_free()
599 free(vpa); in powerpc_vpadtl_free()
630 powerpc_vpadtl_synth_events(struct powerpc_vpadtl *vpa, struct perf_session *session) in powerpc_vpadtl_synth_events() argument
647 pr_debug("No selected events with VPA trace data\n"); in powerpc_vpadtl_synth_events()
667 vpa->sample_id = id; in powerpc_vpadtl_synth_events()
668 set_event_name(evlist, id, "vpa-dtl"); in powerpc_vpadtl_synth_events()
685 struct powerpc_vpadtl *vpa; in powerpc_vpadtl_process_auxtrace_info() local
692 vpa = zalloc(sizeof(struct powerpc_vpadtl)); in powerpc_vpadtl_process_auxtrace_info()
693 if (!vpa) in powerpc_vpadtl_process_auxtrace_info()
696 err = auxtrace_queues__init(&vpa->queues); in powerpc_vpadtl_process_auxtrace_info()
700 vpa->session = session; in powerpc_vpadtl_process_auxtrace_info()
701 vpa->machine = &session->machines.host; /* No kvm support */ in powerpc_vpadtl_process_auxtrace_info()
702 vpa->auxtrace_type = auxtrace_info->type; in powerpc_vpadtl_process_auxtrace_info()
703 vpa->pmu_type = auxtrace_info->priv[POWERPC_VPADTL_TYPE]; in powerpc_vpadtl_process_auxtrace_info()
705 vpa->auxtrace.process_event = powerpc_vpadtl_process_event; in powerpc_vpadtl_process_auxtrace_info()
706 vpa->auxtrace.process_auxtrace_event = powerpc_vpadtl_process_auxtrace_event; in powerpc_vpadtl_process_auxtrace_info()
707 vpa->auxtrace.flush_events = powerpc_vpadtl_flush; in powerpc_vpadtl_process_auxtrace_info()
708 vpa->auxtrace.free_events = powerpc_vpadtl_free_events; in powerpc_vpadtl_process_auxtrace_info()
709 vpa->auxtrace.free = powerpc_vpadtl_free; in powerpc_vpadtl_process_auxtrace_info()
710 session->auxtrace = &vpa->auxtrace; in powerpc_vpadtl_process_auxtrace_info()
717 err = powerpc_vpadtl_synth_events(vpa, session); in powerpc_vpadtl_process_auxtrace_info()
721 err = auxtrace_queues__process_index(&vpa->queues, session); in powerpc_vpadtl_process_auxtrace_info()
728 auxtrace_queues__free(&vpa->queues); in powerpc_vpadtl_process_auxtrace_info()
732 free(vpa); in powerpc_vpadtl_process_auxtrace_info()