There was a size check to warn if the GuC error state capture buffer allocation would be too small to fit a reasonable amount of capture data for the current platform. Unfortunately, the test was done too early in the boot sequence and was actually testing 'if(-ENODEV > size)'. Move the check to be later. The check is only used to print a warning message, so it doesn't really matter how early or late it is done. Note that it is not possible to dynamically size the buffer because the allocation needs to be done before the engine information is available (at least, it would be in the intended two-phase GuC init process). Now that the check works, it is reporting size too small for newer platforms. The check includes a 3x oversample multiplier to allow for multiple error captures to be bufferd by GuC before i915 has a chance to read them out. This is less important than simply being big enough to fit the first capture. So a) bump the default size to be large enough for one capture minimum and b) make the warning only if one capture won't fit, instead use a notice for the 3x size. Note that the size estimate is a worst case scenario. Actual captures will likely be smaller. Lastly, use drm_warn istead of DRM_WARN as the former provides more infmration and the latter is deprecated. Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220728022028.2190627-3-John.C.Harrison@Intel.com
32 lines
1.1 KiB
C
32 lines
1.1 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_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 */
|