Lines Matching defs:iter

296 	struct trace_remote_iterator *iter;
298 iter = container_of(dwork, struct trace_remote_iterator, poll_work);
299 ring_buffer_poll_remote(iter->remote->trace_buffer, iter->cpu);
301 msecs_to_jiffies(iter->remote->poll_ms));
304 static void __free_ring_buffer_iter(struct trace_remote_iterator *iter, int cpu)
307 ring_buffer_read_finish(iter->rb_iter);
312 if (iter->rb_iters[cpu])
313 ring_buffer_read_finish(iter->rb_iters[cpu]);
316 kfree(iter->rb_iters);
319 static int __alloc_ring_buffer_iter(struct trace_remote_iterator *iter, int cpu)
322 iter->rb_iter = ring_buffer_read_start(iter->remote->trace_buffer, cpu, GFP_KERNEL);
324 return iter->rb_iter ? 0 : -ENOMEM;
327 iter->rb_iters = kzalloc_objs(*iter->rb_iters, nr_cpu_ids);
328 if (!iter->rb_iters)
332 iter->rb_iters[cpu] = ring_buffer_read_start(iter->remote->trace_buffer, cpu,
334 if (!iter->rb_iters[cpu]) {
336 if (!trace_remote_has_cpu(iter->remote, cpu))
339 __free_ring_buffer_iter(iter, RING_BUFFER_ALL_CPUS);
350 struct trace_remote_iterator *iter = NULL;
367 iter = kzalloc_obj(*iter);
368 if (iter) {
369 iter->remote = remote;
370 iter->cpu = cpu;
371 iter->type = type;
372 trace_seq_init(&iter->seq);
377 INIT_DELAYED_WORK(&iter->poll_work, __poll_remote);
378 schedule_delayed_work(&iter->poll_work, msecs_to_jiffies(remote->poll_ms));
381 ret = __alloc_ring_buffer_iter(iter, cpu);
388 return iter;
393 kfree(iter);
399 static void trace_remote_iter_free(struct trace_remote_iterator *iter)
403 if (!iter)
406 remote = iter->remote;
410 switch (iter->type) {
412 cancel_delayed_work_sync(&iter->poll_work);
415 __free_ring_buffer_iter(iter, iter->cpu);
419 kfree(iter);
423 static void trace_remote_iter_read_start(struct trace_remote_iterator *iter)
425 struct trace_remote *remote = iter->remote;
426 int cpu = iter->cpu;
429 if (cpu == RING_BUFFER_ALL_CPUS && iter->type == TRI_CONSUMING)
438 * No need for the remote lock here, iter holds a reference on
446 if (iter->type == TRI_CONSUMING)
452 static void trace_remote_iter_read_finished(struct trace_remote_iterator *iter)
454 struct trace_remote *remote = iter->remote;
455 int cpu = iter->cpu;
460 * No need for the remote lock here, iter holds a reference on
463 if (iter->type == TRI_CONSUMING)
470 if (cpu == RING_BUFFER_ALL_CPUS && iter->type == TRI_CONSUMING)
476 static struct ring_buffer_iter *__get_rb_iter(struct trace_remote_iterator *iter, int cpu)
478 return iter->cpu != RING_BUFFER_ALL_CPUS ? iter->rb_iter : iter->rb_iters[cpu];
482 __peek_event(struct trace_remote_iterator *iter, int cpu, u64 *ts, unsigned long *lost_events)
487 switch (iter->type) {
489 return ring_buffer_peek(iter->remote->trace_buffer, cpu, ts, lost_events);
491 rb_iter = __get_rb_iter(iter, cpu);
507 static bool trace_remote_iter_read_event(struct trace_remote_iterator *iter)
509 struct trace_buffer *trace_buffer = iter->remote->trace_buffer;
511 int cpu = iter->cpu;
517 rb_evt = __peek_event(iter, cpu, &iter->ts, &iter->lost_events);
521 iter->evt_cpu = cpu;
522 iter->evt = ring_buffer_event_data(rb_evt);
526 iter->ts = U64_MAX;
534 rb_evt = __peek_event(iter, cpu, &ts, &lost_events);
538 if (ts >= iter->ts)
541 iter->ts = ts;
542 iter->evt_cpu = cpu;
543 iter->evt = ring_buffer_event_data(rb_evt);
544 iter->lost_events = lost_events;
547 return iter->ts != U64_MAX;
550 static void trace_remote_iter_move(struct trace_remote_iterator *iter)
552 struct trace_buffer *trace_buffer = iter->remote->trace_buffer;
554 switch (iter->type) {
556 ring_buffer_consume(trace_buffer, iter->evt_cpu, NULL, NULL);
559 ring_buffer_iter_advance(__get_rb_iter(iter, iter->evt_cpu));
566 static int trace_remote_iter_print_event(struct trace_remote_iterator *iter)
570 u64 ts = iter->ts;
572 if (iter->lost_events)
573 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
574 iter->evt_cpu, iter->lost_events);
579 trace_seq_printf(&iter->seq, "[%03d]\t%5llu.%06lu: ", iter->evt_cpu,
582 evt = trace_remote_find_event(iter->remote, iter->evt->id);
584 trace_seq_printf(&iter->seq, "UNKNOWN id=%d\n", iter->evt->id);
586 evt->print(iter->evt, &iter->seq);
588 return trace_seq_has_overflowed(&iter->seq) ? -EOVERFLOW : 0;
594 struct trace_remote_iterator *iter;
599 iter = trace_remote_iter(remote, cpu, TRI_CONSUMING);
600 if (IS_ERR(iter))
601 return PTR_ERR(iter);
603 filp->private_data = iter;
610 struct trace_remote_iterator *iter = filp->private_data;
611 struct trace_remote *remote = iter->remote;
615 trace_remote_iter_free(iter);
622 struct trace_remote_iterator *iter = filp->private_data;
623 struct trace_buffer *trace_buffer = iter->remote->trace_buffer;
627 ret = trace_seq_to_user(&iter->seq, ubuf, cnt);
631 trace_seq_init(&iter->seq);
633 ret = ring_buffer_wait(trace_buffer, iter->cpu, 0, NULL, NULL);
637 trace_remote_iter_read_start(iter);
639 while (trace_remote_iter_read_event(iter)) {
640 int prev_len = iter->seq.seq.len;
642 if (trace_remote_iter_print_event(iter)) {
643 iter->seq.seq.len = prev_len;
647 trace_remote_iter_move(iter);
650 trace_remote_iter_read_finished(iter);
663 struct trace_remote_iterator *iter = m->private;
667 if (!iter || !trace_remote_iter_read_event(iter))
670 trace_remote_iter_move(iter);
671 iter->pos++;
673 return iter;
678 struct trace_remote_iterator *iter = m->private;
681 if (!iter)
684 trace_remote_iter_read_start(iter);
687 iter->pos = -1;
691 i = iter->pos;
693 iter = trace_next(m, NULL, &i);
694 if (!iter)
698 return iter;
703 struct trace_remote_iterator *iter = v;
705 trace_seq_init(&iter->seq);
707 if (trace_remote_iter_print_event(iter)) {
708 seq_printf(m, "[EVENT %d PRINT TOO BIG]\n", iter->evt->id);
712 return trace_print_seq(m, &iter->seq);
717 struct trace_remote_iterator *iter = m->private;
719 if (iter)
720 trace_remote_iter_read_finished(iter);
733 struct trace_remote_iterator *iter = NULL;
742 iter = trace_remote_iter(remote, cpu, TRI_NONCONSUMING);
743 if (IS_ERR(iter))
744 return PTR_ERR(iter);
748 trace_remote_iter_free(iter);
752 ((struct seq_file *)filp->private_data)->private = (void *)iter;
759 struct trace_remote_iterator *iter;
764 iter = ((struct seq_file *)filp->private_data)->private;
767 if (!iter)
770 guard(mutex)(&iter->remote->lock);
772 trace_remote_iter_free(iter);