From: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Wed, 15 Jul 2015 14:36:50 +0000 (+0200)
Subject: Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued
X-Git-Tag: v4.3-rc1~75^2~36^2~7
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ca6e4405779e;p=users%2Fjedix%2Flinux-maple.git

Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued

Backmerge fixes since it's getting out of hand again with the massive
split due to atomic between -next and 4.2-rc. All the bugfixes in
4.2-rc are addressed already (by converting more towards atomic
instead of minimal duct-tape) so just always pick the version in next
for the conflicts in modeset code.

All the other conflicts are just adjacent lines changed.

Conflicts:
	drivers/gpu/drm/i915/i915_drv.h
	drivers/gpu/drm/i915/i915_gem_gtt.c
	drivers/gpu/drm/i915/intel_display.c
	drivers/gpu/drm/i915/intel_drv.h
	drivers/gpu/drm/i915/intel_ringbuffer.h

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---

ca6e4405779ed56ebac941570615abd667c72c02
diff --cc drivers/gpu/drm/i915/i915_drv.h
index 4af33d59d507,5f27290201e0..01fbdc57462a
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@@ -866,7 -826,7 +866,8 @@@ struct intel_context 
  	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;
diff --cc drivers/gpu/drm/i915/i915_gem.c
index aaabf3c259d5,52b446b27b4d..d9f2701b4593
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@@ -2548,10 -2538,34 +2554,11 @@@ void __i915_add_request(struct drm_i915
  	 */
  	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);
  
diff --cc drivers/gpu/drm/i915/i915_gem_gtt.c
index ed65f24867b4,56b52a4767d4..c2a291e09bd9
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@@ -583,9 -513,10 +583,9 @@@ static void gen8_ppgtt_clear_range(stru
  	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];
  
@@@ -594,9 -525,11 +594,9 @@@
  
  		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;
diff --cc drivers/gpu/drm/i915/intel_ringbuffer.h
index 0ea89ea30182,4be66f60504d..2e85fda94963
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@@ -292,6 -271,17 +292,13 @@@ struct  intel_engine_cs 
  	 */
  	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;