@@ -63,6 +63,207 @@
#define ALLOW_FAIL (__GFP_KSWAPD_RECLAIM | __GFP_RETRY_MAYFAIL | __GFP_NOWARN)
#define ATOMIC_MAYFAIL (GFP_ATOMIC | __GFP_NOWARN)
+struct i915_vma_coredump {
+ struct i915_vma_coredump *next;
+
+ char name[20];
+
+ u64 gtt_offset;
+ u64 gtt_size;
+ u32 gtt_page_sizes;
+
+ int unused;
+ struct list_head page_list;
+};
+
+struct i915_request_coredump {
+ unsigned long flags;
+ pid_t pid;
+ u32 context;
+ u32 seqno;
+ u32 head;
+ u32 tail;
+ struct i915_sched_attr sched_attr;
+};
+
+struct __guc_capture_parsed_output;
+
+struct intel_engine_coredump {
+ const struct intel_engine_cs *engine;
+
+ bool hung;
+ bool simulated;
+ u32 reset_count;
+
+ /* position of active request inside the ring */
+ u32 rq_head, rq_post, rq_tail;
+
+ /* Register state */
+ u32 ccid;
+ u32 start;
+ u32 tail;
+ u32 head;
+ u32 ctl;
+ u32 mode;
+ u32 hws;
+ u32 ipeir;
+ u32 ipehr;
+ u32 esr;
+ u32 bbstate;
+ u32 instpm;
+ u32 instps;
+ u64 bbaddr;
+ u64 acthd;
+ u32 fault_reg;
+ u64 faddr;
+ u32 rc_psmi; /* sleep state */
+ u32 nopid;
+ u32 excc;
+ u32 cmd_cctl;
+ u32 cscmdop;
+ u32 ctx_sr_ctl;
+ u32 dma_faddr_hi;
+ u32 dma_faddr_lo;
+ struct intel_instdone instdone;
+
+ /* GuC matched capture-lists info */
+ struct intel_guc_state_capture *guc_capture;
+ struct __guc_capture_parsed_output *guc_capture_node;
+
+ struct i915_gem_context_coredump {
+ char comm[TASK_COMM_LEN];
+
+ u64 total_runtime;
+ u64 avg_runtime;
+
+ pid_t pid;
+ int active;
+ int guilty;
+ struct i915_sched_attr sched_attr;
+ u32 hwsp_seqno;
+ } context;
+
+ struct i915_vma_coredump *vma;
+
+ struct i915_request_coredump execlist[EXECLIST_MAX_PORTS];
+ unsigned int num_ports;
+
+ struct {
+ u32 gfx_mode;
+ union {
+ u64 pdp[4];
+ u32 pp_dir_base;
+ };
+ } vm_info;
+
+ struct intel_engine_coredump *next;
+};
+
+struct intel_ctb_coredump {
+ u32 raw_head, head;
+ u32 raw_tail, tail;
+ u32 raw_status;
+ u32 desc_offset;
+ u32 cmds_offset;
+ u32 size;
+};
+
+struct intel_gt_coredump {
+ const struct intel_gt *_gt;
+ bool awake;
+ bool simulated;
+
+ struct intel_gt_info info;
+
+ /* Generic register state */
+ u32 eir;
+ u32 pgtbl_er;
+ u32 ier;
+ u32 gtier[6], ngtier;
+ u32 forcewake;
+ u32 error; /* gen6+ */
+ u32 err_int; /* gen7 */
+ u32 fault_data0; /* gen8, gen9 */
+ u32 fault_data1; /* gen8, gen9 */
+ u32 done_reg;
+ u32 gac_eco;
+ u32 gam_ecochk;
+ u32 gab_ctl;
+ u32 gfx_mode;
+ u32 gtt_cache;
+ u32 aux_err; /* gen12 */
+ u32 gam_done; /* gen12 */
+ u32 clock_frequency;
+ u32 clock_period_ns;
+
+ /* Display related */
+ u32 derrmr;
+ u32 sfc_done[I915_MAX_SFC]; /* gen12 */
+
+ u32 nfence;
+ u64 fence[I915_MAX_NUM_FENCES];
+
+ struct intel_engine_coredump *engine;
+
+ struct intel_uc_coredump {
+ struct intel_uc_fw guc_fw;
+ struct intel_uc_fw huc_fw;
+ struct guc_info {
+ struct intel_ctb_coredump ctb[2];
+ struct i915_vma_coredump *vma_ctb;
+ struct i915_vma_coredump *vma_log;
+ u32 timestamp;
+ u16 last_fence;
+ bool is_guc_capture;
+ } guc;
+ } *uc;
+
+ struct intel_gt_coredump *next;
+};
+
+struct i915_gpu_coredump {
+ struct kref ref;
+ ktime_t time;
+ ktime_t boottime;
+ ktime_t uptime;
+ unsigned long capture;
+
+ struct drm_i915_private *i915;
+
+ struct intel_gt_coredump *gt;
+
+ char error_msg[128];
+ bool simulated;
+ bool wakelock;
+ bool suspended;
+ int iommu;
+ u32 reset_count;
+ u32 suspend_count;
+
+ struct intel_device_info device_info;
+ struct intel_runtime_info runtime_info;
+ struct intel_display_device_info display_device_info;
+ struct intel_display_runtime_info display_runtime_info;
+ struct intel_driver_caps driver_caps;
+ struct i915_params params;
+
+ struct intel_overlay_error_state *overlay;
+
+ struct scatterlist *sgl, *fit;
+};
+
+struct drm_i915_error_state_buf {
+ struct drm_i915_private *i915;
+ struct scatterlist *sgl, *cur, *end;
+
+ char *buf;
+ size_t bytes;
+ size_t size;
+ loff_t iter;
+
+ int err;
+};
+
struct intel_gt_coredump *
intel_gt_coredump_alloc(struct intel_gt *gt, gfp_t gfp, u32 dump_flags);
@@ -8,215 +8,13 @@
#define _I915_GPU_ERROR_H_
#include <linux/atomic.h>
-#include <linux/kref.h>
-#include <linux/ktime.h>
-#include <linux/sched.h>
+#include <linux/types.h>
-#include <drm/drm_mm.h>
-
-#include "display/intel_display_device.h"
-#include "gt/intel_engine.h"
-#include "gt/intel_gt_types.h"
-#include "gt/uc/intel_uc_fw.h"
-
-#include "intel_device_info.h"
-
-#include "i915_gem.h"
-#include "i915_gem_gtt.h"
-#include "i915_params.h"
-#include "i915_scheduler.h"
+#include "gt/intel_engine_types.h"
+struct drm_i915_error_state_buf;
struct drm_i915_private;
-struct intel_overlay_error_state;
-
-struct i915_vma_coredump {
- struct i915_vma_coredump *next;
-
- char name[20];
-
- u64 gtt_offset;
- u64 gtt_size;
- u32 gtt_page_sizes;
-
- int unused;
- struct list_head page_list;
-};
-
-struct i915_request_coredump {
- unsigned long flags;
- pid_t pid;
- u32 context;
- u32 seqno;
- u32 head;
- u32 tail;
- struct i915_sched_attr sched_attr;
-};
-
-struct __guc_capture_parsed_output;
-
-struct intel_engine_coredump {
- const struct intel_engine_cs *engine;
-
- bool hung;
- bool simulated;
- u32 reset_count;
-
- /* position of active request inside the ring */
- u32 rq_head, rq_post, rq_tail;
-
- /* Register state */
- u32 ccid;
- u32 start;
- u32 tail;
- u32 head;
- u32 ctl;
- u32 mode;
- u32 hws;
- u32 ipeir;
- u32 ipehr;
- u32 esr;
- u32 bbstate;
- u32 instpm;
- u32 instps;
- u64 bbaddr;
- u64 acthd;
- u32 fault_reg;
- u64 faddr;
- u32 rc_psmi; /* sleep state */
- u32 nopid;
- u32 excc;
- u32 cmd_cctl;
- u32 cscmdop;
- u32 ctx_sr_ctl;
- u32 dma_faddr_hi;
- u32 dma_faddr_lo;
- struct intel_instdone instdone;
-
- /* GuC matched capture-lists info */
- struct intel_guc_state_capture *guc_capture;
- struct __guc_capture_parsed_output *guc_capture_node;
-
- struct i915_gem_context_coredump {
- char comm[TASK_COMM_LEN];
-
- u64 total_runtime;
- u64 avg_runtime;
-
- pid_t pid;
- int active;
- int guilty;
- struct i915_sched_attr sched_attr;
- u32 hwsp_seqno;
- } context;
-
- struct i915_vma_coredump *vma;
-
- struct i915_request_coredump execlist[EXECLIST_MAX_PORTS];
- unsigned int num_ports;
-
- struct {
- u32 gfx_mode;
- union {
- u64 pdp[4];
- u32 pp_dir_base;
- };
- } vm_info;
-
- struct intel_engine_coredump *next;
-};
-
-struct intel_ctb_coredump {
- u32 raw_head, head;
- u32 raw_tail, tail;
- u32 raw_status;
- u32 desc_offset;
- u32 cmds_offset;
- u32 size;
-};
-
-struct intel_gt_coredump {
- const struct intel_gt *_gt;
- bool awake;
- bool simulated;
-
- struct intel_gt_info info;
-
- /* Generic register state */
- u32 eir;
- u32 pgtbl_er;
- u32 ier;
- u32 gtier[6], ngtier;
- u32 forcewake;
- u32 error; /* gen6+ */
- u32 err_int; /* gen7 */
- u32 fault_data0; /* gen8, gen9 */
- u32 fault_data1; /* gen8, gen9 */
- u32 done_reg;
- u32 gac_eco;
- u32 gam_ecochk;
- u32 gab_ctl;
- u32 gfx_mode;
- u32 gtt_cache;
- u32 aux_err; /* gen12 */
- u32 gam_done; /* gen12 */
- u32 clock_frequency;
- u32 clock_period_ns;
-
- /* Display related */
- u32 derrmr;
- u32 sfc_done[I915_MAX_SFC]; /* gen12 */
-
- u32 nfence;
- u64 fence[I915_MAX_NUM_FENCES];
-
- struct intel_engine_coredump *engine;
-
- struct intel_uc_coredump {
- struct intel_uc_fw guc_fw;
- struct intel_uc_fw huc_fw;
- struct guc_info {
- struct intel_ctb_coredump ctb[2];
- struct i915_vma_coredump *vma_ctb;
- struct i915_vma_coredump *vma_log;
- u32 timestamp;
- u16 last_fence;
- bool is_guc_capture;
- } guc;
- } *uc;
-
- struct intel_gt_coredump *next;
-};
-
-struct i915_gpu_coredump {
- struct kref ref;
- ktime_t time;
- ktime_t boottime;
- ktime_t uptime;
- unsigned long capture;
-
- struct drm_i915_private *i915;
-
- struct intel_gt_coredump *gt;
-
- char error_msg[128];
- bool simulated;
- bool wakelock;
- bool suspended;
- int iommu;
- u32 reset_count;
- u32 suspend_count;
-
- struct intel_device_info device_info;
- struct intel_runtime_info runtime_info;
- struct intel_display_device_info display_device_info;
- struct intel_display_runtime_info display_runtime_info;
- struct intel_driver_caps driver_caps;
- struct i915_params params;
-
- struct intel_overlay_error_state *overlay;
-
- struct scatterlist *sgl, *fit;
-};
+struct i915_gpu_coredump;
struct i915_gpu_error {
/* For reset and error_state handling. */
@@ -233,18 +31,6 @@ struct i915_gpu_error {
atomic_t reset_engine_count[I915_NUM_ENGINES];
};
-struct drm_i915_error_state_buf {
- struct drm_i915_private *i915;
- struct scatterlist *sgl, *cur, *end;
-
- char *buf;
- size_t bytes;
- size_t size;
- loff_t iter;
-
- int err;
-};
-
static inline u32 i915_reset_count(struct i915_gpu_error *error)
{
return atomic_read(&error->reset_count);
With the interfaces cleaned up, we can move the error structs inside i915_gpu_error.c, and drop a number of includes from the header. Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/i915/i915_gpu_error.c | 201 +++++++++++++++++++++++ drivers/gpu/drm/i915/i915_gpu_error.h | 222 +------------------------- 2 files changed, 205 insertions(+), 218 deletions(-)