Lines Matching refs:log

30 static void guc_log_capture_logs(struct intel_guc_log *log);
75 static inline struct intel_guc *log_to_guc(struct intel_guc_log *log) in log_to_guc() argument
77 return container_of(log, struct intel_guc, log); in log_to_guc()
80 static void guc_log_enable_flush_events(struct intel_guc_log *log) in guc_log_enable_flush_events() argument
82 intel_guc_enable_msg(log_to_guc(log), in guc_log_enable_flush_events()
87 static void guc_log_disable_flush_events(struct intel_guc_log *log) in guc_log_disable_flush_events() argument
89 intel_guc_disable_msg(log_to_guc(log), in guc_log_disable_flush_events()
162 static void guc_move_to_next_buf(struct intel_guc_log *log) in guc_move_to_next_buf() argument
171 relay_reserve(log->relay.channel, log->vma->obj->base.size); in guc_move_to_next_buf()
174 relay_flush(log->relay.channel); in guc_move_to_next_buf()
177 static void *guc_get_write_buffer(struct intel_guc_log *log) in guc_get_write_buffer() argument
188 return relay_reserve(log->relay.channel, 0); in guc_get_write_buffer()
191 static bool guc_check_log_buf_overflow(struct intel_guc_log *log, in guc_check_log_buf_overflow() argument
195 unsigned int prev_full_cnt = log->stats[type].sampled_overflow; in guc_check_log_buf_overflow()
201 log->stats[type].overflow = full_cnt; in guc_check_log_buf_overflow()
202 log->stats[type].sampled_overflow += full_cnt - prev_full_cnt; in guc_check_log_buf_overflow()
206 log->stats[type].sampled_overflow += 16; in guc_check_log_buf_overflow()
230 static void guc_read_update_log_buffer(struct intel_guc_log *log) in guc_read_update_log_buffer() argument
239 mutex_lock(&log->relay.lock); in guc_read_update_log_buffer()
241 if (WARN_ON(!intel_guc_log_relay_enabled(log))) in guc_read_update_log_buffer()
245 log_buf_state = src_data = log->relay.buf_addr; in guc_read_update_log_buffer()
248 log_buf_snapshot_state = dst_data = guc_get_write_buffer(log); in guc_read_update_log_buffer()
256 log->relay.full_count++; in guc_read_update_log_buffer()
279 log->stats[type].flush += log_buf_state_local.flush_to_file; in guc_read_update_log_buffer()
280 new_overflow = guc_check_log_buf_overflow(log, type, full_cnt); in guc_read_update_log_buffer()
327 guc_move_to_next_buf(log); in guc_read_update_log_buffer()
330 mutex_unlock(&log->relay.lock); in guc_read_update_log_buffer()
335 struct intel_guc_log *log = in capture_logs_work() local
338 guc_log_capture_logs(log); in capture_logs_work()
341 static int guc_log_map(struct intel_guc_log *log) in guc_log_map() argument
343 struct intel_guc *guc = log_to_guc(log); in guc_log_map()
348 lockdep_assert_held(&log->relay.lock); in guc_log_map()
350 if (!log->vma) in guc_log_map()
354 ret = i915_gem_object_set_to_wc_domain(log->vma->obj, true); in guc_log_map()
364 vaddr = i915_gem_object_pin_map(log->vma->obj, I915_MAP_WC); in guc_log_map()
370 log->relay.buf_addr = vaddr; in guc_log_map()
375 static void guc_log_unmap(struct intel_guc_log *log) in guc_log_unmap() argument
377 lockdep_assert_held(&log->relay.lock); in guc_log_unmap()
379 i915_gem_object_unpin_map(log->vma->obj); in guc_log_unmap()
380 log->relay.buf_addr = NULL; in guc_log_unmap()
383 void intel_guc_log_init_early(struct intel_guc_log *log) in intel_guc_log_init_early() argument
385 mutex_init(&log->relay.lock); in intel_guc_log_init_early()
386 INIT_WORK(&log->relay.flush_work, capture_logs_work); in intel_guc_log_init_early()
389 static int guc_log_relay_create(struct intel_guc_log *log) in guc_log_relay_create() argument
391 struct intel_guc *guc = log_to_guc(log); in guc_log_relay_create()
397 lockdep_assert_held(&log->relay.lock); in guc_log_relay_create()
400 subbuf_size = log->vma->size; in guc_log_relay_create()
422 log->relay.channel = guc_log_relay_chan; in guc_log_relay_create()
427 static void guc_log_relay_destroy(struct intel_guc_log *log) in guc_log_relay_destroy() argument
429 lockdep_assert_held(&log->relay.lock); in guc_log_relay_destroy()
431 relay_close(log->relay.channel); in guc_log_relay_destroy()
432 log->relay.channel = NULL; in guc_log_relay_destroy()
435 static void guc_log_capture_logs(struct intel_guc_log *log) in guc_log_capture_logs() argument
437 struct intel_guc *guc = log_to_guc(log); in guc_log_capture_logs()
440 guc_read_update_log_buffer(log); in guc_log_capture_logs()
451 int intel_guc_log_create(struct intel_guc_log *log) in intel_guc_log_create() argument
453 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_create()
458 GEM_BUG_ON(log->vma); in intel_guc_log_create()
488 log->vma = vma; in intel_guc_log_create()
490 log->level = i915_modparams.guc_log_level; in intel_guc_log_create()
499 void intel_guc_log_destroy(struct intel_guc_log *log) in intel_guc_log_destroy() argument
501 i915_vma_unpin_and_release(&log->vma); in intel_guc_log_destroy()
504 int intel_guc_log_set_level(struct intel_guc_log *log, u32 level) in intel_guc_log_set_level() argument
506 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_set_level()
511 GEM_BUG_ON(!log->vma); in intel_guc_log_set_level()
522 if (log->level == level) { in intel_guc_log_set_level()
537 log->level = level; in intel_guc_log_set_level()
545 bool intel_guc_log_relay_enabled(const struct intel_guc_log *log) in intel_guc_log_relay_enabled() argument
547 return log->relay.buf_addr; in intel_guc_log_relay_enabled()
550 int intel_guc_log_relay_open(struct intel_guc_log *log) in intel_guc_log_relay_open() argument
554 mutex_lock(&log->relay.lock); in intel_guc_log_relay_open()
556 if (intel_guc_log_relay_enabled(log)) { in intel_guc_log_relay_open()
571 ret = guc_log_relay_create(log); in intel_guc_log_relay_open()
575 ret = guc_log_map(log); in intel_guc_log_relay_open()
579 mutex_unlock(&log->relay.lock); in intel_guc_log_relay_open()
581 guc_log_enable_flush_events(log); in intel_guc_log_relay_open()
588 queue_work(log->relay.flush_wq, &log->relay.flush_work); in intel_guc_log_relay_open()
593 guc_log_relay_destroy(log); in intel_guc_log_relay_open()
595 mutex_unlock(&log->relay.lock); in intel_guc_log_relay_open()
600 void intel_guc_log_relay_flush(struct intel_guc_log *log) in intel_guc_log_relay_flush() argument
602 struct intel_guc *guc = log_to_guc(log); in intel_guc_log_relay_flush()
609 flush_work(&log->relay.flush_work); in intel_guc_log_relay_flush()
616 guc_log_capture_logs(log); in intel_guc_log_relay_flush()
619 void intel_guc_log_relay_close(struct intel_guc_log *log) in intel_guc_log_relay_close() argument
621 guc_log_disable_flush_events(log); in intel_guc_log_relay_close()
622 flush_work(&log->relay.flush_work); in intel_guc_log_relay_close()
624 mutex_lock(&log->relay.lock); in intel_guc_log_relay_close()
625 GEM_BUG_ON(!intel_guc_log_relay_enabled(log)); in intel_guc_log_relay_close()
626 guc_log_unmap(log); in intel_guc_log_relay_close()
627 guc_log_relay_destroy(log); in intel_guc_log_relay_close()
628 mutex_unlock(&log->relay.lock); in intel_guc_log_relay_close()
631 void intel_guc_log_handle_flush_event(struct intel_guc_log *log) in intel_guc_log_handle_flush_event() argument
633 queue_work(log->relay.flush_wq, &log->relay.flush_work); in intel_guc_log_handle_flush_event()