Commit b761a7b4 authored by Chris Wilson's avatar Chris Wilson

drm/i915/gt: Ignore incomplete engines after init failure

Do not expose incomplete engines to the user after we fail to setup the
GT.

Fixes: e6ba7648 ("drm/i915: Remove i915->kernel_context")
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Andi Shyti <andi.shyti@intel.com>
Acked-by: default avatarAndi Shyti <andi.shyti@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191226191237.2654510-1-chris@chris-wilson.co.uk
parent d03b224f
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "i915_drv.h" #include "i915_drv.h"
#include "intel_engine.h" #include "intel_engine.h"
#include "intel_engine_user.h" #include "intel_engine_user.h"
#include "intel_gt.h"
struct intel_engine_cs * struct intel_engine_cs *
intel_engine_lookup_user(struct drm_i915_private *i915, u8 class, u8 instance) intel_engine_lookup_user(struct drm_i915_private *i915, u8 class, u8 instance)
...@@ -200,6 +201,9 @@ void intel_engines_driver_register(struct drm_i915_private *i915) ...@@ -200,6 +201,9 @@ void intel_engines_driver_register(struct drm_i915_private *i915)
uabi_node); uabi_node);
char old[sizeof(engine->name)]; char old[sizeof(engine->name)];
if (intel_gt_has_init_error(engine->gt))
continue; /* ignore incomplete engines */
GEM_BUG_ON(engine->class >= ARRAY_SIZE(uabi_classes)); GEM_BUG_ON(engine->class >= ARRAY_SIZE(uabi_classes));
engine->uabi_class = uabi_classes[engine->class]; engine->uabi_class = uabi_classes[engine->class];
......
...@@ -58,9 +58,14 @@ static inline u32 intel_gt_scratch_offset(const struct intel_gt *gt, ...@@ -58,9 +58,14 @@ static inline u32 intel_gt_scratch_offset(const struct intel_gt *gt,
return i915_ggtt_offset(gt->scratch) + field; return i915_ggtt_offset(gt->scratch) + field;
} }
static inline bool intel_gt_is_wedged(struct intel_gt *gt) static inline bool intel_gt_is_wedged(const struct intel_gt *gt)
{ {
return __intel_reset_failed(&gt->reset); return __intel_reset_failed(&gt->reset);
} }
static inline bool intel_gt_has_init_error(const struct intel_gt *gt)
{
return test_bit(I915_WEDGED_ON_INIT, &gt->reset.flags);
}
#endif /* __INTEL_GT_H__ */ #endif /* __INTEL_GT_H__ */
...@@ -1329,10 +1329,10 @@ int intel_gt_terminally_wedged(struct intel_gt *gt) ...@@ -1329,10 +1329,10 @@ int intel_gt_terminally_wedged(struct intel_gt *gt)
if (!intel_gt_is_wedged(gt)) if (!intel_gt_is_wedged(gt))
return 0; return 0;
/* Reset still in progress? Maybe we will recover? */ if (intel_gt_has_init_error(gt))
if (!test_bit(I915_RESET_BACKOFF, &gt->reset.flags))
return -EIO; return -EIO;
/* Reset still in progress? Maybe we will recover? */
if (wait_event_interruptible(gt->reset.queue, if (wait_event_interruptible(gt->reset.queue,
!test_bit(I915_RESET_BACKOFF, !test_bit(I915_RESET_BACKOFF,
&gt->reset.flags))) &gt->reset.flags)))
......
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