Hide gpu error specifics in i915_gpu_error.c. This is also cleaner wrt
conditional compilation, as i915_gpu_error.c is only built with
DRM_I915_CAPTURE_ERROR=y.

Signed-off-by: Jani Nikula <jani.nik...@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c   | 108 +------------------------
 drivers/gpu/drm/i915/i915_gpu_error.c | 111 +++++++++++++++++++++++++-
 drivers/gpu/drm/i915/i915_gpu_error.h |   8 +-
 3 files changed, 119 insertions(+), 108 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index bfe92d2402ea..db99c2ef66db 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -51,6 +51,7 @@
 #include "i915_debugfs.h"
 #include "i915_debugfs_params.h"
 #include "i915_driver.h"
+#include "i915_gpu_error.h"
 #include "i915_irq.h"
 #include "i915_reg.h"
 #include "i915_scheduler.h"
@@ -299,107 +300,6 @@ static int i915_gem_object_info(struct seq_file *m, void 
*data)
        return 0;
 }
 
-#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
-static ssize_t gpu_state_read(struct file *file, char __user *ubuf,
-                             size_t count, loff_t *pos)
-{
-       struct i915_gpu_coredump *error;
-       ssize_t ret;
-       void *buf;
-
-       error = file->private_data;
-       if (!error)
-               return 0;
-
-       /* Bounce buffer required because of kernfs __user API convenience. */
-       buf = kmalloc(count, GFP_KERNEL);
-       if (!buf)
-               return -ENOMEM;
-
-       ret = i915_gpu_coredump_copy_to_buffer(error, buf, *pos, count);
-       if (ret <= 0)
-               goto out;
-
-       if (!copy_to_user(ubuf, buf, ret))
-               *pos += ret;
-       else
-               ret = -EFAULT;
-
-out:
-       kfree(buf);
-       return ret;
-}
-
-static int gpu_state_release(struct inode *inode, struct file *file)
-{
-       i915_gpu_coredump_put(file->private_data);
-       return 0;
-}
-
-static int i915_gpu_info_open(struct inode *inode, struct file *file)
-{
-       struct drm_i915_private *i915 = inode->i_private;
-       struct i915_gpu_coredump *gpu;
-       intel_wakeref_t wakeref;
-
-       gpu = NULL;
-       with_intel_runtime_pm(&i915->runtime_pm, wakeref)
-               gpu = i915_gpu_coredump(to_gt(i915), ALL_ENGINES, 
CORE_DUMP_FLAG_NONE);
-
-       if (IS_ERR(gpu))
-               return PTR_ERR(gpu);
-
-       file->private_data = gpu;
-       return 0;
-}
-
-static const struct file_operations i915_gpu_info_fops = {
-       .owner = THIS_MODULE,
-       .open = i915_gpu_info_open,
-       .read = gpu_state_read,
-       .llseek = default_llseek,
-       .release = gpu_state_release,
-};
-
-static ssize_t
-i915_error_state_write(struct file *filp,
-                      const char __user *ubuf,
-                      size_t cnt,
-                      loff_t *ppos)
-{
-       struct i915_gpu_coredump *error = filp->private_data;
-
-       if (!error)
-               return 0;
-
-       drm_dbg(&error->i915->drm, "Resetting error state\n");
-       i915_reset_error_state(error->i915);
-
-       return cnt;
-}
-
-static int i915_error_state_open(struct inode *inode, struct file *file)
-{
-       struct i915_gpu_coredump *error;
-
-       error = i915_first_error_state(inode->i_private);
-       if (IS_ERR(error))
-               return PTR_ERR(error);
-
-       file->private_data  = error;
-       return 0;
-}
-
-static const struct file_operations i915_error_state_fops = {
-       .owner = THIS_MODULE,
-       .open = i915_error_state_open,
-       .read = gpu_state_read,
-       .write = i915_error_state_write,
-       .llseek = default_llseek,
-       .release = gpu_state_release,
-};
-#endif
-
 static int i915_frequency_info(struct seq_file *m, void *unused)
 {
        struct drm_i915_private *i915 = node_to_i915(m->private);
@@ -839,10 +739,6 @@ static const struct i915_debugfs_files {
        {"i915_perf_noa_delay", &i915_perf_noa_delay_fops},
        {"i915_wedged", &i915_wedged_fops},
        {"i915_gem_drop_caches", &i915_drop_caches_fops},
-#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
-       {"i915_error_state", &i915_error_state_fops},
-       {"i915_gpu_info", &i915_gpu_info_fops},
-#endif
 };
 
 void i915_debugfs_register(struct drm_i915_private *dev_priv)
@@ -865,4 +761,6 @@ void i915_debugfs_register(struct drm_i915_private 
*dev_priv)
        drm_debugfs_create_files(i915_debugfs_list,
                                 ARRAY_SIZE(i915_debugfs_list),
                                 minor->debugfs_root, minor);
+
+       i915_gpu_error_debugfs_register(dev_priv);
 }
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
index 889db834f07d..f195df91d9e6 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -2140,7 +2140,7 @@ __i915_gpu_coredump(struct intel_gt *gt, 
intel_engine_mask_t engine_mask, u32 du
        return error;
 }
 
-struct i915_gpu_coredump *
+static struct i915_gpu_coredump *
 i915_gpu_coredump(struct intel_gt *gt, intel_engine_mask_t engine_mask, u32 
dump_flags)
 {
        static DEFINE_MUTEX(capture_mutex);
@@ -2378,3 +2378,112 @@ void intel_klog_error_capture(struct intel_gt *gt,
        drm_info(&i915->drm, "[Capture/%d.%d] Dumped %zd bytes\n", l_count, 
line++, pos_err);
 }
 #endif
+
+static ssize_t gpu_state_read(struct file *file, char __user *ubuf,
+                             size_t count, loff_t *pos)
+{
+       struct i915_gpu_coredump *error;
+       ssize_t ret;
+       void *buf;
+
+       error = file->private_data;
+       if (!error)
+               return 0;
+
+       /* Bounce buffer required because of kernfs __user API convenience. */
+       buf = kmalloc(count, GFP_KERNEL);
+       if (!buf)
+               return -ENOMEM;
+
+       ret = i915_gpu_coredump_copy_to_buffer(error, buf, *pos, count);
+       if (ret <= 0)
+               goto out;
+
+       if (!copy_to_user(ubuf, buf, ret))
+               *pos += ret;
+       else
+               ret = -EFAULT;
+
+out:
+       kfree(buf);
+       return ret;
+}
+
+static int gpu_state_release(struct inode *inode, struct file *file)
+{
+       i915_gpu_coredump_put(file->private_data);
+       return 0;
+}
+
+static int i915_gpu_info_open(struct inode *inode, struct file *file)
+{
+       struct drm_i915_private *i915 = inode->i_private;
+       struct i915_gpu_coredump *gpu;
+       intel_wakeref_t wakeref;
+
+       gpu = NULL;
+       with_intel_runtime_pm(&i915->runtime_pm, wakeref)
+               gpu = i915_gpu_coredump(to_gt(i915), ALL_ENGINES, 
CORE_DUMP_FLAG_NONE);
+
+       if (IS_ERR(gpu))
+               return PTR_ERR(gpu);
+
+       file->private_data = gpu;
+       return 0;
+}
+
+static const struct file_operations i915_gpu_info_fops = {
+       .owner = THIS_MODULE,
+       .open = i915_gpu_info_open,
+       .read = gpu_state_read,
+       .llseek = default_llseek,
+       .release = gpu_state_release,
+};
+
+static ssize_t
+i915_error_state_write(struct file *filp,
+                      const char __user *ubuf,
+                      size_t cnt,
+                      loff_t *ppos)
+{
+       struct i915_gpu_coredump *error = filp->private_data;
+
+       if (!error)
+               return 0;
+
+       drm_dbg(&error->i915->drm, "Resetting error state\n");
+       i915_reset_error_state(error->i915);
+
+       return cnt;
+}
+
+static int i915_error_state_open(struct inode *inode, struct file *file)
+{
+       struct i915_gpu_coredump *error;
+
+       error = i915_first_error_state(inode->i_private);
+       if (IS_ERR(error))
+               return PTR_ERR(error);
+
+       file->private_data  = error;
+       return 0;
+}
+
+static const struct file_operations i915_error_state_fops = {
+       .owner = THIS_MODULE,
+       .open = i915_error_state_open,
+       .read = gpu_state_read,
+       .write = i915_error_state_write,
+       .llseek = default_llseek,
+       .release = gpu_state_release,
+};
+
+void i915_gpu_error_debugfs_register(struct drm_i915_private *i915)
+{
+       struct drm_minor *minor = i915->drm.primary;
+
+       debugfs_create_file("i915_error_state", 0644, minor->debugfs_root, i915,
+                           &i915_error_state_fops);
+       debugfs_create_file("i915_gpu_info", 0644, minor->debugfs_root, i915,
+                           &i915_gpu_info_fops);
+}
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h 
b/drivers/gpu/drm/i915/i915_gpu_error.h
index 8f9cdf056181..f851189b0ff1 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -278,8 +278,6 @@ static inline void intel_klog_error_capture(struct intel_gt 
*gt,
 __printf(2, 3)
 void i915_error_printf(struct drm_i915_error_state_buf *e, const char *f, ...);
 
-struct i915_gpu_coredump *i915_gpu_coredump(struct intel_gt *gt,
-                                           intel_engine_mask_t engine_mask, 
u32 dump_flags);
 void i915_capture_error_state(struct intel_gt *gt,
                              intel_engine_mask_t engine_mask, u32 dump_flags);
 
@@ -331,6 +329,8 @@ struct i915_gpu_coredump *i915_first_error_state(struct 
drm_i915_private *i915);
 void i915_reset_error_state(struct drm_i915_private *i915);
 void i915_disable_error_state(struct drm_i915_private *i915, int err);
 
+void i915_gpu_error_debugfs_register(struct drm_i915_private *i915);
+
 #else
 
 __printf(2, 3)
@@ -413,6 +413,10 @@ static inline void i915_disable_error_state(struct 
drm_i915_private *i915,
 {
 }
 
+static inline void i915_gpu_error_debugfs_register(struct drm_i915_private 
*i915)
+{
+}
+
 #endif /* IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) */
 
 #endif /* _I915_GPU_ERROR_H_ */
-- 
2.39.2

Reply via email to