CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2016-04-15 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Fri Apr 15 08:02:34 UTC 2016

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: intel_pm.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1156):
sys/external/bsd/drm2/dist/drm/i915/intel_pm.c: revision 1.9
Cast uint8_t to uint32_t before shifting left by 24.
Otherwise this is undefined behaviour unless int is 32-bit and the
uint8_t value happens to be <=127.


To generate a diff of this commit:
cvs rdiff -u -r1.4.2.4 -r1.4.2.5 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.4.2.4 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.4.2.5
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.4.2.4	Thu Feb 11 22:52:58 2016
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c	Fri Apr 15 08:02:34 2016
@@ -4487,8 +4487,8 @@ static void intel_init_emon(struct drm_d
 	pxw[15] = 0;
 
 	for (i = 0; i < 4; i++) {
-		u32 val = (pxw[i*4] << 24) | (pxw[(i*4)+1] << 16) |
-			(pxw[(i*4)+2] << 8) | (pxw[(i*4)+3]);
+		u32 val = ((u32)pxw[i*4] << 24) | ((u32)pxw[(i*4)+1] << 16) |
+			((u32)pxw[(i*4)+2] << 8) | ((u32)pxw[(i*4)+3]);
 		I915_WRITE(PXW + (i * 4), val);
 	}
 



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2016-02-11 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Thu Feb 11 23:23:11 UTC 2016

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_dma.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1091):
sys/external/bsd/drm2/dist/drm/i915/i915_dma.c: revisions 1.17, 1.18
Zero out the guard for bus_space_unmap before calling i915_dma_cleanup() which
calls i915_free_hws(), which then tries to unmap. Perhaps this fixes PR/50060.
--
fix the same bug on the linux side, print the error, and return the -tive
error to mimick linux.


To generate a diff of this commit:
cvs rdiff -u -r1.10.2.4 -r1.10.2.5 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.10.2.4 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.10.2.5
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.10.2.4	Thu Apr 23 07:31:17 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c	Thu Feb 11 23:23:11 2016
@@ -1137,11 +1137,11 @@ static int i915_set_status_page(struct d
 	BUS_SPACE_MAP_PREFETCHABLE,
 	_priv->dri1.gfx_hws_cpu_bsh);
 	if (ret) {
-		i915_dma_cleanup(dev);
 		ring->status_page.gfx_addr = 0;
+		i915_dma_cleanup(dev);
 		DRM_ERROR("can not ioremap virtual address for"
-" G33 hw status page\n");
-		return ret;
+		" G33 hw status page, error %d\n", ret);
+		return -ret;
 	}
 
 	__CTASSERT(PAGE_SIZE == 4096);
@@ -1151,8 +1151,8 @@ static int i915_set_status_page(struct d
 	dev_priv->dri1.gfx_hws_cpu_addr =
 		ioremap_wc(dev_priv->gtt.mappable_base + hws->addr, 4096);
 	if (dev_priv->dri1.gfx_hws_cpu_addr == NULL) {
-		i915_dma_cleanup(dev);
 		ring->status_page.gfx_addr = 0;
+		i915_dma_cleanup(dev);
 		DRM_ERROR("can not ioremap virtual address for"
 " G33 hw status page\n");
 		return -ENOMEM;



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2015-08-04 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Tue Aug  4 17:18:40 UTC 2015

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_gem.c

Log Message:
Pull up following revision(s) (requested by tsutsui in ticket #931):
sys/external/bsd/drm2/dist/drm/i915/i915_gem.c: revision 1.32
Pull upstream fix to avoid kernel panic on starting X on Intel 855GM machines.
Reported in PR kern/49875, and ok'ed to commit by riastradh@.


To generate a diff of this commit:
cvs rdiff -u -r1.14.2.10 -r1.14.2.11 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.10 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.11
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.10	Thu Jul 30 15:38:39 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c	Tue Aug  4 17:18:39 2015
@@ -4390,6 +4390,15 @@ unlock:
 
 static bool is_pin_display(struct drm_i915_gem_object *obj)
 {
+	struct i915_vma *vma;
+
+	if (list_empty(obj-vma_list))
+		return false;
+
+	vma = i915_gem_obj_to_ggtt(obj);
+	if (!vma)
+		return false;
+
 	/* There are 3 sources that pin objects:
 	 *   1. The display engine (scanouts, sprites, cursors);
 	 *   2. Reservations for execbuffer;
@@ -4401,7 +4410,7 @@ static bool is_pin_display(struct drm_i9
 	 * subtracting the potential reference by the user, any pin_count
 	 * remains, it must be due to another use by the display engine.
 	 */
-	return i915_gem_obj_to_ggtt(obj)-pin_count - !!obj-user_pin_count;
+	return vma-pin_count - !!obj-user_pin_count;
 }
 
 /*
@@ -4415,6 +4424,7 @@ i915_gem_object_pin_to_display_plane(str
  struct intel_ring_buffer *pipelined)
 {
 	u32 old_read_domains, old_write_domain;
+	bool was_pin_display;
 	int ret;
 
 	if (pipelined != obj-ring) {
@@ -4426,6 +4436,7 @@ i915_gem_object_pin_to_display_plane(str
 	/* Mark the pin_display early so that we account for the
 	 * display coherency whilst setting up the cache domains.
 	 */
+	was_pin_display = obj-pin_display;
 	obj-pin_display = true;
 
 	/* The display engine is not coherent with the LLC cache on gen6.  As
@@ -4468,7 +4479,8 @@ i915_gem_object_pin_to_display_plane(str
 	return 0;
 
 err_unpin_display:
-	obj-pin_display = is_pin_display(obj);
+	WARN_ON(was_pin_display != is_pin_display(obj));
+	obj-pin_display = was_pin_display;
 	return ret;
 }
 
@@ -5684,6 +5696,9 @@ struct i915_vma *i915_gem_obj_to_ggtt(st
 {
 	struct i915_vma *vma;
 
+	/* This WARN has probably outlived its usefulness (callers already
+	 * WARN if they don't find the GGTT vma they expect). When removing,
+	 * remember to remove the pre-check in is_pin_display() as well */
 	if (WARN_ON(list_empty(obj-vma_list)))
 		return NULL;
 



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2015-07-30 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Thu Jul 30 15:21:50 UTC 2015

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: intel_pm.c

Log Message:
Pull up following revision(s) (requested by abs in ticket #892):
sys/external/bsd/drm2/dist/drm/i915/intel_pm.c: revision 1.7
Avoid NULL dev_priv-vlv_pctx- deref in a WARN check on Lenovo B50-30,
add an additional check for the NULL dev_priv-vlv_pctx.
System now boots (though does not recognise any of the USB(3) ports)


To generate a diff of this commit:
cvs rdiff -u -r1.4.2.2 -r1.4.2.3 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.4.2.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.4.2.3
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.4.2.2	Fri Mar  6 21:39:08 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c	Thu Jul 30 15:21:50 2015
@@ -3625,6 +3625,8 @@ static void valleyview_check_pctx(struct
 {
 	unsigned long pctx_addr = I915_READ(VLV_PCBR)  ~4095;
 
+	if (WARN_ON(!dev_priv-vlv_pctx))
+		return;
 	WARN_ON(pctx_addr != dev_priv-mm.stolen_base +
 			 dev_priv-vlv_pctx-stolen-start);
 }



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2015-07-30 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Thu Jul 30 15:38:39 UTC 2015

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_gem.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #901):
sys/external/bsd/drm2/dist/drm/i915/i915_gem.c: revision 1.30
Remove workaround for PR kern/49195.
Problem seems to have been properly fixed in rev. 1.25.


To generate a diff of this commit:
cvs rdiff -u -r1.14.2.9 -r1.14.2.10 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.9 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.10
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.9	Sun Jul  5 21:31:48 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c	Thu Jul 30 15:38:39 2015
@@ -2815,21 +2815,10 @@ void i915_vma_move_to_active(struct i915
 static void
 i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
 {
-	struct drm_device *dev = obj-base.dev;
-	struct drm_i915_private *dev_priv = dev-dev_private;
+	struct drm_i915_private *dev_priv = obj-base.dev-dev_private;
 	struct i915_address_space *vm;
 	struct i915_vma *vma;
 
-	if ((obj-base.write_domain  I915_GEM_DOMAIN_GTT) != 0) {
-		printk(KERN_ERR %s: %p 0x%x flushing gtt\n, __func__, obj,
-			obj-base.write_domain);
-		i915_gem_object_flush_gtt_write_domain(obj);
-	}
-	if ((obj-base.write_domain  I915_GEM_DOMAIN_CPU) != 0) {
-		printk(KERN_ERR %s: %p 0x%x flushing cpu\n, __func__, obj,
-			obj-base.write_domain);
-		i915_gem_object_flush_cpu_write_domain(obj, false);
-	}
 	BUG_ON(obj-base.write_domain  ~I915_GEM_GPU_DOMAINS);
 	BUG_ON(!obj-active);
 



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2015-05-22 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Fri May 22 17:28:37 UTC 2015

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_gem_gtt.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #797):
sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c: revision 1.4
Fix kassert: npdp may be GEN8_LEGACY_PDPS exactly.
Tripped over by msaitoh, our first Broadwell user, apparently.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.3.2.1 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c:1.3.2.1
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c:1.3	Mon Jul 21 20:01:18 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_gtt.c	Fri May 22 17:28:37 2015
@@ -575,7 +575,7 @@ gen8_ppgtt_allocate_page_directories(str
 
 	ppgtt-u.gen8-npdp = npdp;
 
-	KASSERT(nsegs  GEN8_LEGACY_PDPS);
+	KASSERT(nsegs = GEN8_LEGACY_PDPS);
 	CTASSERT(GEN8_LEGACY_PDPS == __arraycount(ppgtt-u.gen8-pd_segs));
 
 	/* XXX errno NetBSD-Linux */



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-12-30 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Tue Dec 30 11:57:49 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_gem.c

Log Message:
Pull up following revision(s) (requested by nonaka in ticket #362):
sys/external/bsd/drm2/dist/drm/i915/i915_gem.c: revision 1.19
Also need to flush an object from CPU domain.


To generate a diff of this commit:
cvs rdiff -u -r1.14.2.3 -r1.14.2.4 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.3 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.4
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.3	Mon Nov 10 19:45:54 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c	Tue Dec 30 11:57:49 2014
@@ -2851,6 +2851,13 @@ i915_gem_object_move_to_inactive(struct 
 #endif
 		i915_gem_object_flush_gtt_write_domain(obj);
 	}
+	if ((obj-base.write_domain  I915_GEM_DOMAIN_CPU) != 0) {
+#if 0
+		printk(KERN_ERR %s: %p 0x%x flushing cpu\n, __func__, obj,
+			obj-base.write_domain);
+#endif
+		i915_gem_object_flush_cpu_write_domain(obj, false);
+	}
 	BUG_ON(obj-base.write_domain  ~I915_GEM_GPU_DOMAINS);
 	BUG_ON(!obj-active);
 



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-11-28 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Fri Nov 28 10:01:27 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: intel_opregion.c

Log Message:
Pull up following revision(s) (requested by nonaka in ticket #271):
sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c: revision 1.8
Avoid NULL pointer dereference when acpivga isn't attached.


To generate a diff of this commit:
cvs rdiff -u -r1.5.2.1 -r1.5.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c:1.5.2.1 src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c:1.5.2.2
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c:1.5.2.1	Tue Nov 11 09:06:32 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c	Fri Nov 28 10:01:27 2014
@@ -674,7 +674,9 @@ static void intel_didl_outputs(struct dr
 
 #ifdef __NetBSD__
 	ad = dev-pdev-pd_ad;
-	if (ad == NULL || !device_is_a(ad-ad_device, acpivga))
+	if (ad == NULL ||
+	ad-ad_device == NULL ||
+	!device_is_a(ad-ad_device, acpivga))
 		return;
 #else
 	handle = ACPI_HANDLE(dev-pdev-dev);



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-11-05 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Wed Nov  5 17:52:10 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: intel_panel.c

Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #177):
sys/external/bsd/drm2/dist/drm/i915/intel_panel.c: revision 1.6
Merge 
https://github.com/torvalds/linux/commit/2e7eeeb59a92d09144fdb7d2dc1af77a10a7945b#diff-528092536eaeb3c5f7ff6dfeed53786d

 drm/i915: set backlight duty cycle after backlight enable for gen4
 For reasons I can't claim to fully understand gen4 seems to require
 backlight duty cycle setting after the backlight has been enabled, or
 else black screen follows. I don't have documentation for the correct
 sequence on gen4 either. Confirmed on Dell Latitude D630 and MacBook4,1.
 Without this patch, the screen on my T61 (i965) would be blank at boot
 unless I booted with the AC adapter unplugged.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.2.1 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_panel.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_panel.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_panel.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/intel_panel.c:1.4.2.1
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_panel.c:1.4	Wed Jul 16 20:56:25 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_panel.c	Wed Nov  5 17:52:10 2014
@@ -730,9 +730,6 @@ static void i965_enable_backlight(struct
 	ctl = freq  16;
 	I915_WRITE(BLC_PWM_CTL, ctl);
 
-	/* XXX: combine this into above write? */
-	intel_panel_actually_set_backlight(connector, panel-backlight.level);
-
 	ctl2 = BLM_PIPE(pipe);
 	if (panel-backlight.combination_mode)
 		ctl2 |= BLM_COMBINATION_MODE;
@@ -741,6 +738,8 @@ static void i965_enable_backlight(struct
 	I915_WRITE(BLC_PWM_CTL2, ctl2);
 	POSTING_READ(BLC_PWM_CTL2);
 	I915_WRITE(BLC_PWM_CTL2, ctl2 | BLM_PWM_ENABLE);
+
+	intel_panel_actually_set_backlight(connector, panel-backlight.level);
 }
 
 static void vlv_enable_backlight(struct intel_connector *connector)



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-11-05 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Wed Nov  5 17:57:13 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_gem.c

Log Message:
Pull up following revision(s) (requested by sborrill in ticket #178):
sys/external/bsd/drm2/dist/drm/i915/i915_gem.c: revision 1.18
When moving an object to inactive, make sure that we first flush it from
the GTT domain in case it belonged there. Also, fix some compilation issues
when turning on WATCH_GTT and WATCH_LISTS, although this is a lost cause;
most of the code has rotted beyond repair.


To generate a diff of this commit:
cvs rdiff -u -r1.14.2.1 -r1.14.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.1 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.2
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.14.2.1	Fri Aug 22 10:35:59 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c	Wed Nov  5 17:57:13 2014
@@ -58,6 +58,7 @@
 #include linux/time.h
 #include linux/err.h
 #include linux/bitops.h
+#include linux/printk.h
 #include asm/param.h
 #include asm/page.h
 
@@ -2826,10 +2827,18 @@ void i915_vma_move_to_active(struct i915
 static void
 i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
 {
-	struct drm_i915_private *dev_priv = obj-base.dev-dev_private;
+	struct drm_device *dev = obj-base.dev;
+	struct drm_i915_private *dev_priv = dev-dev_private;
 	struct i915_address_space *vm;
 	struct i915_vma *vma;
 
+	if ((obj-base.write_domain  I915_GEM_DOMAIN_GTT) != 0) {
+#if 0
+		printk(KERN_ERR %s: %p 0x%x flushing gtt\n, __func__, obj,
+			obj-base.write_domain);
+#endif
+		i915_gem_object_flush_gtt_write_domain(obj);
+	}
 	BUG_ON(obj-base.write_domain  ~I915_GEM_GPU_DOMAINS);
 	BUG_ON(!obj-active);
 
@@ -3934,7 +3943,7 @@ static void i915_gem_verify_gtt(struct d
 	struct drm_i915_gem_object *obj;
 	int err = 0;
 
-	list_for_each_entry(obj, dev_priv-mm.gtt_list, global_list) {
+	list_for_each_entry(obj, dev_priv-mm.bound_list, global_list) {
 		if (obj-gtt_space == NULL) {
 			printk(KERN_ERR object found on GTT list with no space reserved\n);
 			err++;



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-09-21 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Sun Sep 21 18:10:52 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_irq.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #99):
sys/external/bsd/drm2/dist/drm/i915/i915_irq.c: revision 1.7
Fix i915 locking around error handling.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.6.2.1 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.1
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6	Wed Jul 16 20:56:25 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c	Sun Sep 21 18:10:52 2014
@@ -1099,7 +1099,9 @@ static void notify_ring(struct drm_devic
 {
 	unsigned long flags;
 	spin_lock_irqsave(dev_priv-irq_lock, flags);
-	/* XXX Set a flag under the lock...  */
+	/*
+	 * XXX Set a flag under the lock or push the lock out to callers.
+	 */
 	DRM_SPIN_WAKEUP_ALL(ring-irq_queue, dev_priv-irq_lock);
 	spin_unlock_irqrestore(dev_priv-irq_lock, flags);
 }
@@ -1315,8 +1317,10 @@ static void snb_gt_irq_handler(struct dr
 	if (gt_iir  (GT_BLT_CS_ERROR_INTERRUPT |
 		  GT_BSD_CS_ERROR_INTERRUPT |
 		  GT_RENDER_CS_MASTER_ERROR_INTERRUPT)) {
+		spin_lock(dev_priv-irq_lock);
 		i915_handle_error(dev, false, GT error interrupt 0x%08x,
   gt_iir);
+		spin_unlock(dev_priv-irq_lock);
 	}
 
 	if (gt_iir  GT_PARITY_ERROR(dev))
@@ -1589,9 +1593,11 @@ static void gen6_rps_irq_handler(struct 
 			notify_ring(dev_priv-dev, dev_priv-ring[VECS]);
 
 		if (pm_iir  PM_VEBOX_CS_ERROR_INTERRUPT) {
+			spin_lock(dev_priv-irq_lock);
 			i915_handle_error(dev_priv-dev, false,
 	  VEBOX CS error interrupt 0x%08x,
 	  pm_iir);
+			spin_unlock(dev_priv-irq_lock);
 		}
 	}
 }
@@ -2357,6 +2363,8 @@ void i915_handle_error(struct drm_device
 	va_list args;
 	char error_msg[80];
 
+	assert_spin_locked(dev_priv-irq_lock);
+
 	va_start(args, fmt);
 	vscnprintf(error_msg, sizeof(error_msg), fmt, args);
 	va_end(args);
@@ -2734,6 +2742,8 @@ static void i915_hangcheck_elapsed(unsig
 	if (!i915.enable_hangcheck)
 		return;
 
+	spin_lock(dev_priv-irq_lock);
+
 	for_each_ring(ring, dev_priv, i) {
 		u64 acthd;
 		u32 seqno;
@@ -2747,9 +2757,7 @@ static void i915_hangcheck_elapsed(unsig
 		if (ring-hangcheck.seqno == seqno) {
 			if (ring_idle(ring, seqno)) {
 ring-hangcheck.action = HANGCHECK_IDLE;
-
 #ifdef __NetBSD__
-spin_lock(dev_priv-irq_lock);
 if (DRM_SPIN_WAITERS_P(ring-irq_queue,
 	dev_priv-irq_lock)) {
 	if (!test_and_set_bit(ring-id, dev_priv-gpu_error.missed_irq_rings)) {
@@ -2765,7 +2773,6 @@ static void i915_hangcheck_elapsed(unsig
 } else {
 	busy = false;
 }
-spin_unlock(dev_priv-irq_lock);
 #else
 if (waitqueue_active(ring-irq_queue)) {
 	/* Issue a wake-up to catch stuck h/w. */
@@ -2845,6 +2852,8 @@ static void i915_hangcheck_elapsed(unsig
 	if (rings_hung)
 		return i915_handle_error(dev, true, Ring hung);
 
+	spin_unlock(dev_priv-irq_lock);
+
 	if (busy_count)
 		/* Reset timer case chip hangs without another request
 		 * being added */



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-09-21 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Sun Sep 21 18:11:38 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_irq.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #99):
sys/external/bsd/drm2/dist/drm/i915/i915_irq.c: revision 1.9
Lock irq_lock around i915_error_wake_up in i915_error_work_func.


To generate a diff of this commit:
cvs rdiff -u -r1.6.2.1 -r1.6.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.1 src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.2
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.1	Sun Sep 21 18:10:52 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c	Sun Sep 21 18:11:37 2014
@@ -2250,7 +2250,9 @@ static void i915_error_work_func(struct 
 		 * Note: The wake_up also serves as a memory barrier so that
 		 * waiters see the update value of the reset counter atomic_t.
 		 */
+		spin_lock(dev_priv-irq_lock);
 		i915_error_wake_up(dev_priv, true);
+		spin_unlock(dev_priv-irq_lock);
 	}
 }
 



CVS commit: [netbsd-7] src/sys/external/bsd/drm2/dist/drm/i915

2014-09-21 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Sun Sep 21 18:12:18 UTC 2014

Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_irq.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #99):
sys/external/bsd/drm2/dist/drm/i915/i915_irq.c: revision 1.8
Fix two mistakes in previous.
- i915_error_wake_up is given irq_lock, so it need not take that.
- Unlock irq_lock on exit from i915_hangcheck_elapsed if ring_hung.
XXX This introduces the lock order irq_lock - pending_flip_lock.
How about just using irq_lock for pending flips?


To generate a diff of this commit:
cvs rdiff -u -r1.6.2.2 -r1.6.2.3 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.6.2.2	Sun Sep 21 18:11:37 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c	Sun Sep 21 18:12:18 2014
@@ -2138,11 +2138,10 @@ static void i915_error_wake_up(struct dr
 	 * a gpu reset pending so that i915_error_work_func can acquire them).
 	 */
 
+	assert_spin_locked(dev_priv-irq_lock);
 #ifdef __NetBSD__
-	spin_lock(dev_priv-irq_lock);
 	for_each_ring(ring, dev_priv, i)
 		DRM_SPIN_WAKEUP_ALL(ring-irq_queue, dev_priv-irq_lock);
-	spin_unlock(dev_priv-irq_lock);
 
 	spin_lock(dev_priv-pending_flip_lock);
 	DRM_SPIN_WAKEUP_ALL(dev_priv-pending_flip_queue,
@@ -2851,8 +2850,11 @@ static void i915_hangcheck_elapsed(unsig
 		}
 	}
 
-	if (rings_hung)
-		return i915_handle_error(dev, true, Ring hung);
+	if (rings_hung) {
+		i915_handle_error(dev, true, Ring hung);
+		spin_unlock(dev_priv-irq_lock);
+		return;
+	}
 
 	spin_unlock(dev_priv-irq_lock);