Commit 1ce5ba97 authored by Michal Wajdeczko's avatar Michal Wajdeczko Committed by Chris Wilson

drm/i915/guc: Don't open log relay if GuC is not running

As we plan to continue driver load after GuC initialization
failure, we can't assume that GuC log data will be available
just because GuC was initially enabled. We must check that
GuC is still running instead.
Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190818095204.31568-2-michal.wajdeczko@intel.com
parent 0075a20a
...@@ -372,6 +372,7 @@ static int guc_log_relay_create(struct intel_guc_log *log) ...@@ -372,6 +372,7 @@ static int guc_log_relay_create(struct intel_guc_log *log)
int ret; int ret;
lockdep_assert_held(&log->relay.lock); lockdep_assert_held(&log->relay.lock);
GEM_BUG_ON(!log->vma);
/* Keep the size of sub buffers same as shared log buffer */ /* Keep the size of sub buffers same as shared log buffer */
subbuf_size = log->vma->size; subbuf_size = log->vma->size;
...@@ -554,6 +555,9 @@ int intel_guc_log_relay_open(struct intel_guc_log *log) ...@@ -554,6 +555,9 @@ int intel_guc_log_relay_open(struct intel_guc_log *log)
{ {
int ret; int ret;
if (!log->vma)
return -ENODEV;
mutex_lock(&log->relay.lock); mutex_lock(&log->relay.lock);
if (intel_guc_log_relay_enabled(log)) { if (intel_guc_log_relay_enabled(log)) {
......
...@@ -2028,14 +2028,16 @@ DEFINE_SIMPLE_ATTRIBUTE(i915_guc_log_level_fops, ...@@ -2028,14 +2028,16 @@ DEFINE_SIMPLE_ATTRIBUTE(i915_guc_log_level_fops,
static int i915_guc_log_relay_open(struct inode *inode, struct file *file) static int i915_guc_log_relay_open(struct inode *inode, struct file *file)
{ {
struct drm_i915_private *dev_priv = inode->i_private; struct drm_i915_private *i915 = inode->i_private;
struct intel_guc *guc = &i915->gt.uc.guc;
struct intel_guc_log *log = &guc->log;
if (!USES_GUC(dev_priv)) if (!intel_guc_is_running(guc))
return -ENODEV; return -ENODEV;
file->private_data = &dev_priv->gt.uc.guc.log; file->private_data = log;
return intel_guc_log_relay_open(&dev_priv->gt.uc.guc.log); return intel_guc_log_relay_open(log);
} }
static ssize_t static ssize_t
...@@ -2047,16 +2049,15 @@ i915_guc_log_relay_write(struct file *filp, ...@@ -2047,16 +2049,15 @@ i915_guc_log_relay_write(struct file *filp,
struct intel_guc_log *log = filp->private_data; struct intel_guc_log *log = filp->private_data;
intel_guc_log_relay_flush(log); intel_guc_log_relay_flush(log);
return cnt; return cnt;
} }
static int i915_guc_log_relay_release(struct inode *inode, struct file *file) static int i915_guc_log_relay_release(struct inode *inode, struct file *file)
{ {
struct drm_i915_private *dev_priv = inode->i_private; struct drm_i915_private *i915 = inode->i_private;
struct intel_guc *guc = &i915->gt.uc.guc;
intel_guc_log_relay_close(&dev_priv->gt.uc.guc.log);
intel_guc_log_relay_close(&guc->log);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment