struct kref ref;
        int user_handle;
        uint8_t remap_slice;
+       struct drm_i915_private *i915;
 +      int flags;
        struct drm_i915_file_private *file_priv;
        struct i915_ctx_hang_stats hang_stats;
        struct i915_hw_ppgtt *ppgtt;
 
         */
        request->batch_obj = obj;
  
 -      if (!i915.enable_execlists) {
 -              /* Hold a reference to the current context so that we can inspect
 -               * it later in case a hangcheck error event fires.
 -               */
 -              request->ctx = ring->last_context;
 -              if (request->ctx)
 -                      i915_gem_context_reference(request->ctx);
 -      }
 -
        request->emitted_jiffies = jiffies;
+       ring->last_submitted_seqno = request->seqno;
        list_add_tail(&request->list, &ring->request_list);
 -      request->file_priv = NULL;
 -
 -      if (file) {
 -              struct drm_i915_file_private *file_priv = file->driver_priv;
 -
 -              spin_lock(&file_priv->mm.lock);
 -              request->file_priv = file_priv;
 -              list_add_tail(&request->client_list,
 -                            &file_priv->mm.request_list);
 -              spin_unlock(&file_priv->mm.lock);
 -
 -              request->pid = get_pid(task_pid(current));
 -      }
  
        trace_i915_gem_request_add(request);
 -      ring->outstanding_lazy_request = NULL;
  
        i915_queue_hangcheck(ring->dev);
  
 
        while (num_entries) {
                struct i915_page_directory *pd;
                struct i915_page_table *pt;
 -              struct page *page_table;
  
                if (WARN_ON(!ppgtt->pdp.page_directory[pdpe]))
-                       continue;
+                       break;
  
                pd = ppgtt->pdp.page_directory[pdpe];
  
  
                pt = pd->page_table[pde];
  
 -              if (WARN_ON(!pt->page))
 +              if (WARN_ON(!px_page(pt)))
-                       continue;
+                       break;
  
 -              page_table = pt->page;
 -
                last_pte = pte + num_entries;
                if (last_pte > GEN8_PTES)
                        last_pte = GEN8_PTES;
 
         */
        struct list_head request_list;
  
 -      /**
 -       * Do we have some not yet emitted requests outstanding?
 -       */
 -      struct drm_i915_gem_request *outstanding_lazy_request;
+       /**
+        * Seqno of request most recently submitted to request_list.
+        * Used exclusively by hang checker to avoid grabbing lock while
+        * inspecting request list.
+        */
+       u32 last_submitted_seqno;
+ 
        bool gpu_caches_dirty;
  
        wait_queue_head_t irq_queue;