Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc16b48b authored by Mika Kuoppala's avatar Mika Kuoppala Committed by Daniel Vetter
Browse files

drm/i915: export error state to string conversion



In preparation for accessing error state from sysfs, export
error state to string conversion function. Also tuck buffer
error handling inside the function.

Signed-off-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 319d9827
Loading
Loading
Loading
Loading
+8 −16
Original line number Original line Diff line number Diff line
@@ -830,15 +830,8 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m,
	err_printf(m, "  ring->tail: 0x%08x\n", error->cpu_ring_tail[ring]);
	err_printf(m, "  ring->tail: 0x%08x\n", error->cpu_ring_tail[ring]);
}
}


struct i915_error_state_file_priv {
int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
	struct drm_device *dev;
			    const struct i915_error_state_file_priv *error_priv)
	struct drm_i915_error_state *error;
};


static int i915_error_state(struct i915_error_state_file_priv *error_priv,
			    struct drm_i915_error_state_buf *m)

{
{
	struct drm_device *dev = error_priv->dev;
	struct drm_device *dev = error_priv->dev;
	drm_i915_private_t *dev_priv = dev->dev_private;
	drm_i915_private_t *dev_priv = dev->dev_private;
@@ -848,7 +841,7 @@ static int i915_error_state(struct i915_error_state_file_priv *error_priv,


	if (!error) {
	if (!error) {
		err_printf(m, "no error state collected\n");
		err_printf(m, "no error state collected\n");
		return 0;
		goto out;
	}
	}


	err_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
	err_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
@@ -958,6 +951,10 @@ static int i915_error_state(struct i915_error_state_file_priv *error_priv,
	if (error->display)
	if (error->display)
		intel_display_print_error_state(m, dev, error->display);
		intel_display_print_error_state(m, dev, error->display);


out:
	if (m->bytes == 0 && m->err)
		return m->err;

	return 0;
	return 0;
}
}


@@ -1051,15 +1048,10 @@ static ssize_t i915_error_state_read(struct file *file, char __user *userbuf,


	error_str.start = *pos;
	error_str.start = *pos;


	ret = i915_error_state(error_priv, &error_str);
	ret = i915_error_state_to_str(&error_str, error_priv);
	if (ret)
	if (ret)
		goto out;
		goto out;


	if (error_str.bytes == 0 && error_str.err) {
		ret = error_str.err;
		goto out;
	}

	ret_count = simple_read_from_buffer(userbuf, count, &tmp_pos,
	ret_count = simple_read_from_buffer(userbuf, count, &tmp_pos,
					    error_str.buf,
					    error_str.buf,
					    error_str.bytes);
					    error_str.bytes);
+7 −0
Original line number Original line Diff line number Diff line
@@ -916,6 +916,11 @@ struct drm_i915_error_state_buf {
	loff_t pos;
	loff_t pos;
};
};


struct i915_error_state_file_priv {
	struct drm_device *dev;
	struct drm_i915_error_state *error;
};

struct i915_gpu_error {
struct i915_gpu_error {
	/* For hangcheck timer */
	/* For hangcheck timer */
#define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
#define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
@@ -1921,6 +1926,8 @@ int i915_debugfs_init(struct drm_minor *minor);
void i915_debugfs_cleanup(struct drm_minor *minor);
void i915_debugfs_cleanup(struct drm_minor *minor);
__printf(2, 3)
__printf(2, 3)
void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...);
void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...);
int i915_error_state_to_str(struct drm_i915_error_state_buf *estr,
			    const struct i915_error_state_file_priv *error);


/* i915_suspend.c */
/* i915_suspend.c */
extern int i915_save_state(struct drm_device *dev);
extern int i915_save_state(struct drm_device *dev);