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: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Родитель
319d9827eb
Коммит
fc16b48be6
|
@ -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]);
|
||||
}
|
||||
|
||||
struct i915_error_state_file_priv {
|
||||
struct drm_device *dev;
|
||||
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)
|
||||
|
||||
int i915_error_state_to_str(struct drm_i915_error_state_buf *m,
|
||||
const struct i915_error_state_file_priv *error_priv)
|
||||
{
|
||||
struct drm_device *dev = error_priv->dev;
|
||||
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) {
|
||||
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,
|
||||
|
@ -958,6 +951,10 @@ static int i915_error_state(struct i915_error_state_file_priv *error_priv,
|
|||
if (error->display)
|
||||
intel_display_print_error_state(m, dev, error->display);
|
||||
|
||||
out:
|
||||
if (m->bytes == 0 && m->err)
|
||||
return m->err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1051,15 +1048,10 @@ static ssize_t i915_error_state_read(struct file *file, char __user *userbuf,
|
|||
|
||||
error_str.start = *pos;
|
||||
|
||||
ret = i915_error_state(error_priv, &error_str);
|
||||
ret = i915_error_state_to_str(&error_str, error_priv);
|
||||
if (ret)
|
||||
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,
|
||||
error_str.buf,
|
||||
error_str.bytes);
|
||||
|
|
|
@ -916,6 +916,11 @@ struct drm_i915_error_state_buf {
|
|||
loff_t pos;
|
||||
};
|
||||
|
||||
struct i915_error_state_file_priv {
|
||||
struct drm_device *dev;
|
||||
struct drm_i915_error_state *error;
|
||||
};
|
||||
|
||||
struct i915_gpu_error {
|
||||
/* For hangcheck timer */
|
||||
#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);
|
||||
__printf(2, 3)
|
||||
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 */
|
||||
extern int i915_save_state(struct drm_device *dev);
|
||||
|
|
Загрузка…
Ссылка в новой задаче