Print the GuC captured error state register list (string names and values) when gpu_coredump_state printout is invoked via the i915 debugfs for flushing the gpu error-state that was captured prior. Since GuC could have reported multiple engine register dumps in a single notification event, parse the captured data (appearing as a stream of structures) to identify each dump as a different 'engine-capture-group-output'. Finally, for each 'engine-capture-group-output' that is found, verify if the engine register dump corresponds to the engine_coredump content that was previously populated by the i915_gpu_coredump function. That function would have copied the context's vma's including the bacth buffer during the G2H-context-reset notification that occurred earlier. Perform this verification check by comparing guc_id, lrca and engine- instance obtained from the 'engine-capture-group-output' vs a copy of that same info taken during i915_gpu_coredump. If they match, then print those vma's as well (such as the batch buffers). NOTE: the output format was verified using the gem_exec_capture IGT test. Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220321164527.2500062-14-alan.previn.teres.alexis@intel.com
34 lines
1.2 KiB
C
34 lines
1.2 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2021-2021 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _INTEL_GUC_CAPTURE_H
|
|
#define _INTEL_GUC_CAPTURE_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_i915_error_state_buf;
|
|
struct guc_gt_system_info;
|
|
struct intel_engine_coredump;
|
|
struct intel_context;
|
|
struct intel_gt;
|
|
struct intel_guc;
|
|
|
|
void intel_guc_capture_free_node(struct intel_engine_coredump *ee);
|
|
int intel_guc_capture_print_engine_node(struct drm_i915_error_state_buf *m,
|
|
const struct intel_engine_coredump *ee);
|
|
void intel_guc_capture_get_matching_node(struct intel_gt *gt, struct intel_engine_coredump *ee,
|
|
struct intel_context *ce);
|
|
void intel_guc_capture_process(struct intel_guc *guc);
|
|
int intel_guc_capture_output_min_size_est(struct intel_guc *guc);
|
|
int intel_guc_capture_getlist(struct intel_guc *guc, u32 owner, u32 type, u32 classid,
|
|
void **outptr);
|
|
int intel_guc_capture_getlistsize(struct intel_guc *guc, u32 owner, u32 type, u32 classid,
|
|
size_t *size);
|
|
int intel_guc_capture_getnullheader(struct intel_guc *guc, void **outptr, size_t *size);
|
|
void intel_guc_capture_destroy(struct intel_guc *guc);
|
|
int intel_guc_capture_init(struct intel_guc *guc);
|
|
|
|
#endif /* _INTEL_GUC_CAPTURE_H */
|