Lines Matching refs:log

31 static void guc_log_copy_debuglogs_for_relay(struct intel_guc_log *log);
40 static void _guc_log_init_sizes(struct intel_guc_log *log) in _guc_log_init_sizes() argument
42 struct intel_guc *guc = log_to_guc(log); in _guc_log_init_sizes()
66 log->sizes[i].bytes = sections[i].default_val; in _guc_log_init_sizes()
69 if (log->sizes[GUC_LOG_SECTIONS_DEBUG].bytes >= SZ_1M && in _guc_log_init_sizes()
71 log->sizes[GUC_LOG_SECTIONS_CRASH].bytes = SZ_1M; in _guc_log_init_sizes()
76 if ((log->sizes[i].bytes % SZ_1M) == 0) { in _guc_log_init_sizes()
77 log->sizes[i].units = SZ_1M; in _guc_log_init_sizes()
78 log->sizes[i].flag = sections[i].flag; in _guc_log_init_sizes()
80 log->sizes[i].units = SZ_4K; in _guc_log_init_sizes()
81 log->sizes[i].flag = 0; in _guc_log_init_sizes()
84 if (!IS_ALIGNED(log->sizes[i].bytes, log->sizes[i].units)) in _guc_log_init_sizes()
86 sections[i].name, log->sizes[i].bytes, log->sizes[i].units); in _guc_log_init_sizes()
87 log->sizes[i].count = log->sizes[i].bytes / log->sizes[i].units; in _guc_log_init_sizes()
89 if (!log->sizes[i].count) { in _guc_log_init_sizes()
93 log->sizes[i].count--; in _guc_log_init_sizes()
97 if (log->sizes[i].count > sections[i].max) { in _guc_log_init_sizes()
99 sections[i].name, log->sizes[i].count + 1, sections[i].max + 1); in _guc_log_init_sizes()
100 log->sizes[i].count = sections[i].max; in _guc_log_init_sizes()
104 if (log->sizes[GUC_LOG_SECTIONS_CRASH].units != log->sizes[GUC_LOG_SECTIONS_DEBUG].units) { in _guc_log_init_sizes()
106 log->sizes[GUC_LOG_SECTIONS_CRASH].units, in _guc_log_init_sizes()
107 log->sizes[GUC_LOG_SECTIONS_DEBUG].units); in _guc_log_init_sizes()
108 log->sizes[GUC_LOG_SECTIONS_CRASH].units = log->sizes[GUC_LOG_SECTIONS_DEBUG].units; in _guc_log_init_sizes()
109 log->sizes[GUC_LOG_SECTIONS_CRASH].count = 0; in _guc_log_init_sizes()
112 log->sizes_initialised = true; in _guc_log_init_sizes()
115 static void guc_log_init_sizes(struct intel_guc_log *log) in guc_log_init_sizes() argument
117 if (log->sizes_initialised) in guc_log_init_sizes()
120 _guc_log_init_sizes(log); in guc_log_init_sizes()
123 static u32 intel_guc_log_section_size_crash(struct intel_guc_log *log) in intel_guc_log_section_size_crash() argument
125 guc_log_init_sizes(log); in intel_guc_log_section_size_crash()
127 return log->sizes[GUC_LOG_SECTIONS_CRASH].bytes; in intel_guc_log_section_size_crash()
130 static u32 intel_guc_log_section_size_debug(struct intel_guc_log *log) in intel_guc_log_section_size_debug() argument
132 guc_log_init_sizes(log); in intel_guc_log_section_size_debug()
134 return log->sizes[GUC_LOG_SECTIONS_DEBUG].bytes; in intel_guc_log_section_size_debug()
137 u32 intel_guc_log_section_size_capture(struct intel_guc_log *log) in intel_guc_log_section_size_capture() argument
139 guc_log_init_sizes(log); in intel_guc_log_section_size_capture()
141 return log->sizes[GUC_LOG_SECTIONS_CAPTURE].bytes; in intel_guc_log_section_size_capture()
144 static u32 intel_guc_log_size(struct intel_guc_log *log) in intel_guc_log_size() argument
168 intel_guc_log_section_size_crash(log) + in intel_guc_log_size()
169 intel_guc_log_section_size_debug(log) + in intel_guc_log_size()
170 intel_guc_log_section_size_capture(log); in intel_guc_log_size()
288 static void guc_move_to_next_buf(struct intel_guc_log *log) in guc_move_to_next_buf() argument
297 relay_reserve(log->relay.channel, log->vma->obj->base.size - in guc_move_to_next_buf()
298 intel_guc_log_section_size_capture(log)); in guc_move_to_next_buf()
301 relay_flush(log->relay.channel); in guc_move_to_next_buf()
304 static void *guc_get_write_buffer(struct intel_guc_log *log) in guc_get_write_buffer() argument
315 return relay_reserve(log->relay.channel, 0); in guc_get_write_buffer()
318 bool intel_guc_check_log_buf_overflow(struct intel_guc_log *log, in intel_guc_check_log_buf_overflow() argument
322 unsigned int prev_full_cnt = log->stats[type].sampled_overflow; in intel_guc_check_log_buf_overflow()
328 log->stats[type].overflow = full_cnt; in intel_guc_check_log_buf_overflow()
329 log->stats[type].sampled_overflow += full_cnt - prev_full_cnt; in intel_guc_check_log_buf_overflow()
333 log->stats[type].sampled_overflow += 16; in intel_guc_check_log_buf_overflow()
336 guc_notice_ratelimited(log_to_guc(log), "log buffer overflow\n"); in intel_guc_check_log_buf_overflow()
342 unsigned int intel_guc_get_log_buffer_size(struct intel_guc_log *log, in intel_guc_get_log_buffer_size() argument
347 return intel_guc_log_section_size_debug(log); in intel_guc_get_log_buffer_size()
349 return intel_guc_log_section_size_crash(log); in intel_guc_get_log_buffer_size()
351 return intel_guc_log_section_size_capture(log); in intel_guc_get_log_buffer_size()
359 size_t intel_guc_get_log_buffer_offset(struct intel_guc_log *log, in intel_guc_get_log_buffer_offset() argument
368 offset += intel_guc_get_log_buffer_size(log, i); in intel_guc_get_log_buffer_offset()
374 static void _guc_log_copy_debuglogs_for_relay(struct intel_guc_log *log) in _guc_log_copy_debuglogs_for_relay() argument
376 struct intel_guc *guc = log_to_guc(log); in _guc_log_copy_debuglogs_for_relay()
384 mutex_lock(&log->relay.lock); in _guc_log_copy_debuglogs_for_relay()
386 if (guc_WARN_ON(guc, !intel_guc_log_relay_created(log))) in _guc_log_copy_debuglogs_for_relay()
390 src_data = log->buf_addr; in _guc_log_copy_debuglogs_for_relay()
394 log_buf_snapshot_state = dst_data = guc_get_write_buffer(log); in _guc_log_copy_debuglogs_for_relay()
402 log->relay.full_count++; in _guc_log_copy_debuglogs_for_relay()
420 buffer_size = intel_guc_get_log_buffer_size(log, type); in _guc_log_copy_debuglogs_for_relay()
426 log->stats[type].flush += log_buf_state_local.flush_to_file; in _guc_log_copy_debuglogs_for_relay()
427 new_overflow = intel_guc_check_log_buf_overflow(log, type, full_cnt); in _guc_log_copy_debuglogs_for_relay()
474 guc_move_to_next_buf(log); in _guc_log_copy_debuglogs_for_relay()
477 mutex_unlock(&log->relay.lock); in _guc_log_copy_debuglogs_for_relay()
482 struct intel_guc_log *log = in copy_debug_logs_work() local
485 guc_log_copy_debuglogs_for_relay(log); in copy_debug_logs_work()
488 static int guc_log_relay_map(struct intel_guc_log *log) in guc_log_relay_map() argument
490 lockdep_assert_held(&log->relay.lock); in guc_log_relay_map()
492 if (!log->vma || !log->buf_addr) in guc_log_relay_map()
499 i915_gem_object_get(log->vma->obj); in guc_log_relay_map()
500 log->relay.buf_in_use = true; in guc_log_relay_map()
505 static void guc_log_relay_unmap(struct intel_guc_log *log) in guc_log_relay_unmap() argument
507 lockdep_assert_held(&log->relay.lock); in guc_log_relay_unmap()
509 i915_gem_object_put(log->vma->obj); in guc_log_relay_unmap()
510 log->relay.buf_in_use = false; in guc_log_relay_unmap()
513 void intel_guc_log_init_early(struct intel_guc_log *log) in intel_guc_log_init_early() argument
515 mutex_init(&log->relay.lock); in intel_guc_log_init_early()
516 INIT_WORK(&log->relay.flush_work, copy_debug_logs_work); in intel_guc_log_init_early()
517 log->relay.started = false; in intel_guc_log_init_early()
520 static int guc_log_relay_create(struct intel_guc_log *log) in guc_log_relay_create() argument
522 struct intel_guc *guc = log_to_guc(log); in guc_log_relay_create()
528 lockdep_assert_held(&log->relay.lock); in guc_log_relay_create()
529 GEM_BUG_ON(!log->vma); in guc_log_relay_create()
535 subbuf_size = log->vma->size - intel_guc_log_section_size_capture(log); in guc_log_relay_create()
560 log->relay.channel = guc_log_relay_chan; in guc_log_relay_create()
565 static void guc_log_relay_destroy(struct intel_guc_log *log) in guc_log_relay_destroy() argument
567 lockdep_assert_held(&log->relay.lock); in guc_log_relay_destroy()
569 relay_close(log->relay.channel); in guc_log_relay_destroy()
570 log->relay.channel = NULL; in guc_log_relay_destroy()
573 static void guc_log_copy_debuglogs_for_relay(struct intel_guc_log *log) in guc_log_copy_debuglogs_for_relay() argument
575 struct intel_guc *guc = log_to_guc(log); in guc_log_copy_debuglogs_for_relay()
579 _guc_log_copy_debuglogs_for_relay(log); in guc_log_copy_debuglogs_for_relay()
589 static u32 __get_default_log_level(struct intel_guc_log *log) in __get_default_log_level() argument
591 struct intel_guc *guc = log_to_guc(log); in __get_default_log_level()
614 int intel_guc_log_create(struct intel_guc_log *log) in intel_guc_log_create() argument
616 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_create()
622 GEM_BUG_ON(log->vma); in intel_guc_log_create()
624 guc_log_size = intel_guc_log_size(log); in intel_guc_log_create()
632 log->vma = vma; in intel_guc_log_create()
637 vaddr = i915_gem_object_pin_map_unlocked(log->vma->obj, I915_MAP_WC); in intel_guc_log_create()
640 i915_vma_unpin_and_release(&log->vma, 0); in intel_guc_log_create()
643 log->buf_addr = vaddr; in intel_guc_log_create()
645 log->level = __get_default_log_level(log); in intel_guc_log_create()
647 log->level, str_enabled_disabled(log->level), in intel_guc_log_create()
648 str_yes_no(GUC_LOG_LEVEL_IS_VERBOSE(log->level)), in intel_guc_log_create()
649 GUC_LOG_LEVEL_TO_VERBOSITY(log->level)); in intel_guc_log_create()
658 void intel_guc_log_destroy(struct intel_guc_log *log) in intel_guc_log_destroy() argument
660 log->buf_addr = NULL; in intel_guc_log_destroy()
661 i915_vma_unpin_and_release(&log->vma, I915_VMA_RELEASE_MAP); in intel_guc_log_destroy()
664 int intel_guc_log_set_level(struct intel_guc_log *log, u32 level) in intel_guc_log_set_level() argument
666 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_set_level()
672 GEM_BUG_ON(!log->vma); in intel_guc_log_set_level()
683 if (log->level == level) in intel_guc_log_set_level()
696 log->level = level; in intel_guc_log_set_level()
704 bool intel_guc_log_relay_created(const struct intel_guc_log *log) in intel_guc_log_relay_created() argument
706 return log->buf_addr; in intel_guc_log_relay_created()
709 int intel_guc_log_relay_open(struct intel_guc_log *log) in intel_guc_log_relay_open() argument
713 if (!log->vma) in intel_guc_log_relay_open()
716 mutex_lock(&log->relay.lock); in intel_guc_log_relay_open()
718 if (intel_guc_log_relay_created(log)) { in intel_guc_log_relay_open()
733 ret = guc_log_relay_create(log); in intel_guc_log_relay_open()
737 ret = guc_log_relay_map(log); in intel_guc_log_relay_open()
741 mutex_unlock(&log->relay.lock); in intel_guc_log_relay_open()
746 guc_log_relay_destroy(log); in intel_guc_log_relay_open()
748 mutex_unlock(&log->relay.lock); in intel_guc_log_relay_open()
753 int intel_guc_log_relay_start(struct intel_guc_log *log) in intel_guc_log_relay_start() argument
755 if (log->relay.started) in intel_guc_log_relay_start()
763 queue_work(system_highpri_wq, &log->relay.flush_work); in intel_guc_log_relay_start()
765 log->relay.started = true; in intel_guc_log_relay_start()
770 void intel_guc_log_relay_flush(struct intel_guc_log *log) in intel_guc_log_relay_flush() argument
772 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_relay_flush()
775 if (!log->relay.started) in intel_guc_log_relay_flush()
782 flush_work(&log->relay.flush_work); in intel_guc_log_relay_flush()
788 guc_log_copy_debuglogs_for_relay(log); in intel_guc_log_relay_flush()
796 static void guc_log_relay_stop(struct intel_guc_log *log) in guc_log_relay_stop() argument
798 struct intel_guc *guc = log_to_guc(log); in guc_log_relay_stop()
801 if (!log->relay.started) in guc_log_relay_stop()
806 flush_work(&log->relay.flush_work); in guc_log_relay_stop()
808 log->relay.started = false; in guc_log_relay_stop()
811 void intel_guc_log_relay_close(struct intel_guc_log *log) in intel_guc_log_relay_close() argument
813 guc_log_relay_stop(log); in intel_guc_log_relay_close()
815 mutex_lock(&log->relay.lock); in intel_guc_log_relay_close()
816 GEM_BUG_ON(!intel_guc_log_relay_created(log)); in intel_guc_log_relay_close()
817 guc_log_relay_unmap(log); in intel_guc_log_relay_close()
818 guc_log_relay_destroy(log); in intel_guc_log_relay_close()
819 mutex_unlock(&log->relay.lock); in intel_guc_log_relay_close()
822 void intel_guc_log_handle_flush_event(struct intel_guc_log *log) in intel_guc_log_handle_flush_event() argument
824 if (log->relay.started) in intel_guc_log_handle_flush_event()
825 queue_work(system_highpri_wq, &log->relay.flush_work); in intel_guc_log_handle_flush_event()
852 void intel_guc_log_info(struct intel_guc_log *log, struct drm_printer *p) in intel_guc_log_info() argument
856 if (!intel_guc_log_relay_created(log)) { in intel_guc_log_info()
863 drm_printf(p, "\tRelay full count: %u\n", log->relay.full_count); in intel_guc_log_info()
868 log->stats[type].flush, in intel_guc_log_info()
869 log->stats[type].sampled_overflow); in intel_guc_log_info()
881 int intel_guc_log_dump(struct intel_guc_log *log, struct drm_printer *p, in intel_guc_log_dump() argument
884 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_dump()
896 else if (guc->log.vma) in intel_guc_log_dump()
897 obj = guc->log.vma->obj; in intel_guc_log_dump()