drm/i915: Bail if we do not setup the RCS engine
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Apr 2017 16:56:58 +0000 (17:56 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 11 Apr 2017 17:59:00 +0000 (18:59 +0100)
In places, we assume that RCS exists. This has been true forever, but
let us catch this failure during bringup by adding an explicit check
that we do have an RCS engine.

v2: Make use of HAS_ENGINE (Tvrtko)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170411165658.23828-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_engine_cs.c

index 71e89a93fe18557b5f69d8c346f2d983e7d5bc63..15970f1b09d2b31102ef30a41fc994bd6371f1ef 100644 (file)
@@ -153,10 +153,10 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
 int intel_engines_init_early(struct drm_i915_private *dev_priv)
 {
        struct intel_device_info *device_info = mkwrite_device_info(dev_priv);
-       unsigned int ring_mask = INTEL_INFO(dev_priv)->ring_mask;
-       unsigned int mask = 0;
+       const unsigned int ring_mask = INTEL_INFO(dev_priv)->ring_mask;
        struct intel_engine_cs *engine;
        enum intel_engine_id id;
+       unsigned int mask = 0;
        unsigned int i;
        int err;
 
@@ -183,6 +183,12 @@ int intel_engines_init_early(struct drm_i915_private *dev_priv)
        if (WARN_ON(mask != ring_mask))
                device_info->ring_mask = mask;
 
+       /* We always presume we have at least RCS available for later probing */
+       if (WARN_ON(!HAS_ENGINE(dev_priv, RCS))) {
+               err = -ENODEV;
+               goto cleanup;
+       }
+
        device_info->num_rings = hweight32(mask);
 
        return 0;