return 0;
 }
 
-int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias)
+int intel_ring_pin(struct intel_ring *ring,
+                  struct drm_i915_private *i915,
+                  unsigned int offset_bias)
 {
-       unsigned int flags;
-       enum i915_map_type map;
+       enum i915_map_type map = HAS_LLC(i915) ? I915_MAP_WB : I915_MAP_WC;
        struct i915_vma *vma = ring->vma;
+       unsigned int flags;
        void *addr;
        int ret;
 
        GEM_BUG_ON(ring->vaddr);
 
-       map = HAS_LLC(ring->engine->i915) ? I915_MAP_WB : I915_MAP_WC;
 
        flags = PIN_GLOBAL;
        if (offset_bias)
        if (!ring)
                return ERR_PTR(-ENOMEM);
 
-       ring->engine = engine;
-
        INIT_LIST_HEAD(&ring->request_list);
 
        ring->size = size;
 
 static int intel_init_ring_buffer(struct intel_engine_cs *engine)
 {
-       struct drm_i915_private *dev_priv = engine->i915;
        struct intel_ring *ring;
        int ret;
 
        if (ret)
                goto error;
 
-       ring = intel_engine_create_ring(engine, 32 * PAGE_SIZE);
-       if (IS_ERR(ring)) {
-               ret = PTR_ERR(ring);
-               goto error;
-       }
-
-       if (HWS_NEEDS_PHYSICAL(dev_priv)) {
+       if (HWS_NEEDS_PHYSICAL(engine->i915)) {
                WARN_ON(engine->id != RCS);
                ret = init_phys_status_page(engine);
                if (ret)
                        goto error;
        }
 
+       ring = intel_engine_create_ring(engine, 32 * PAGE_SIZE);
+       if (IS_ERR(ring)) {
+               ret = PTR_ERR(ring);
+               goto error;
+       }
+
        /* Ring wraparound at offset 0 sometimes hangs. No idea why. */
-       ret = intel_ring_pin(ring, I915_GTT_PAGE_SIZE);
+       ret = intel_ring_pin(ring, engine->i915, I915_GTT_PAGE_SIZE);
        if (ret) {
                intel_ring_free(ring);
                goto error;
 
        struct i915_vma *vma;
        void *vaddr;
 
-       struct intel_engine_cs *engine;
-
        struct list_head request_list;
 
        u32 head;
 
 struct intel_ring *
 intel_engine_create_ring(struct intel_engine_cs *engine, int size);
-int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias);
+int intel_ring_pin(struct intel_ring *ring,
+                  struct drm_i915_private *i915,
+                  unsigned int offset_bias);
 void intel_ring_unpin(struct intel_ring *ring);
 void intel_ring_free(struct intel_ring *ring);