Skip to content

Commit

Permalink
drm/i915/guc: Don't open log relay if GuC is not running
Browse files Browse the repository at this point in the history
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: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190818095204.31568-2-michal.wajdeczko@intel.com
  • Loading branch information
Michal Wajdeczko authored and Chris Wilson committed Aug 18, 2019
1 parent 0075a20 commit 1ce5ba9
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
4 changes: 4 additions & 0 deletions drivers/gpu/drm/i915/gt/uc/intel_guc_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ static int guc_log_relay_create(struct intel_guc_log *log)
int ret;

lockdep_assert_held(&log->relay.lock);
GEM_BUG_ON(!log->vma);

/* Keep the size of sub buffers same as shared log buffer */
subbuf_size = log->vma->size;
Expand Down Expand Up @@ -554,6 +555,9 @@ int intel_guc_log_relay_open(struct intel_guc_log *log)
{
int ret;

if (!log->vma)
return -ENODEV;

mutex_lock(&log->relay.lock);

if (intel_guc_log_relay_enabled(log)) {
Expand Down
17 changes: 9 additions & 8 deletions drivers/gpu/drm/i915/i915_debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
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;

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
Expand All @@ -2047,16 +2049,15 @@ i915_guc_log_relay_write(struct file *filp,
struct intel_guc_log *log = filp->private_data;

intel_guc_log_relay_flush(log);

return cnt;
}

static int i915_guc_log_relay_release(struct inode *inode, struct file *file)
{
struct drm_i915_private *dev_priv = inode->i_private;

intel_guc_log_relay_close(&dev_priv->gt.uc.guc.log);
struct drm_i915_private *i915 = inode->i_private;
struct intel_guc *guc = &i915->gt.uc.guc;

intel_guc_log_relay_close(&guc->log);
return 0;
}

Expand Down

0 comments on commit 1ce5ba9

Please sign in to comment.