Module Name: src
Committed By: riastradh
Date: Sun Sep 8 16:00:22 UTC 2013
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [riastradh-drm2]: i915_dma.c
i915_drv.h i915_gem.c i915_gem_stolen.c intel_pm.c
src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: i915_gem_gtt.c
Log Message:
Fix a bunch of i915 error branches.
Some of these fixes are necessary only on NetBSD because we require
mutex_destroy, while Linux doesn't.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.25 -r1.1.1.1.2.26 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
cvs rdiff -u -r1.1.1.1.2.15 -r1.1.1.1.2.16 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h
cvs rdiff -u -r1.1.1.1.2.10 -r1.1.1.1.2.11 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
cvs rdiff -u -r1.1.1.1.2.2 -r1.1.1.1.2.3 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c
cvs rdiff -u -r1.1.1.1.2.5 -r1.1.1.1.2.6 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c
cvs rdiff -u -r1.1.2.2 -r1.1.2.3 \
src/sys/external/bsd/drm2/i915drm/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_dma.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.25 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.26
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.1.1.1.2.25 Sun Sep 8 15:54:20 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c Sun Sep 8 16:00:22 2013
@@ -1396,6 +1396,7 @@ cleanup_gem:
mutex_unlock(&dev->struct_mutex);
i915_gem_cleanup_aliasing_ppgtt(dev);
cleanup_gem_stolen:
+ intel_modeset_cleanup(dev);
i915_gem_cleanup_stolen(dev);
cleanup_vga_switcheroo:
#ifndef __NetBSD__ /* XXX vga */
@@ -1725,7 +1726,7 @@ int i915_driver_load(struct drm_device *
ret = i915_load_modeset_init(dev);
if (ret < 0) {
DRM_ERROR("failed to init modeset\n");
- goto out_gem_unload;
+ goto out_vblank_cleanup;
}
}
@@ -1743,6 +1744,9 @@ int i915_driver_load(struct drm_device *
return 0;
+out_vblank_cleanup:
+ drm_vblank_cleanup(dev);
+
out_gem_unload:
if (dev_priv->mm.inactive_shrinker.shrink)
unregister_shrinker(&dev_priv->mm.inactive_shrinker);
@@ -1760,6 +1764,9 @@ out_gem_unload:
intel_teardown_gmbus(dev);
intel_teardown_mchbar(dev);
+#ifdef __NetBSD__ /* XXX gt fini */
+ intel_gt_fini(dev);
+#endif
destroy_workqueue(dev_priv->wq);
out_mtrrfree:
#ifndef __NetBSD__ /* XXX gtt */
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.1.1.1.2.15 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.1.1.1.2.16
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.1.1.1.2.15 Sun Sep 8 15:52:20 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h Sun Sep 8 16:00:22 2013
@@ -1360,6 +1360,9 @@ void i915_handle_error(struct drm_device
extern void intel_irq_init(struct drm_device *dev);
extern void intel_gt_init(struct drm_device *dev);
+#ifdef __NetBSD__ /* XXX gt fini */
+extern void intel_gt_fini(struct drm_device *dev);
+#endif
extern void intel_gt_reset(struct drm_device *dev);
void i915_error_state_free(struct kref *error_ref);
@@ -1625,6 +1628,9 @@ void i915_gem_init_global_gtt(struct drm
unsigned long start,
unsigned long mappable_end,
unsigned long end);
+#ifdef __NetBSD__ /* XXX fini global gtt */
+void i915_gem_fini_global_gtt(struct drm_device *dev);
+#endif
int i915_gem_gtt_init(struct drm_device *dev);
void i915_gem_gtt_fini(struct drm_device *dev);
static inline void i915_gem_chipset_flush(struct drm_device *dev)
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.1.1.1.2.10 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.1.1.1.2.11
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.1.1.1.2.10 Sun Sep 8 15:56:02 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c Sun Sep 8 16:00:22 2013
@@ -4462,6 +4462,9 @@ int i915_gem_init(struct drm_device *dev
ret = i915_gem_init_aliasing_ppgtt(dev);
if (ret) {
+#ifdef __NetBSD__ /* XXX fini global gtt */
+ i915_gem_fini_global_gtt(dev);
+#endif
mutex_unlock(&dev->struct_mutex);
return ret;
}
@@ -4481,6 +4484,10 @@ int i915_gem_init(struct drm_device *dev
}
ret = i915_gem_init_hw(dev);
+#ifdef __NetBSD__ /* XXX fini global gtt */
+ if (ret)
+ i915_gem_fini_global_gtt(dev);
+#endif
mutex_unlock(&dev->struct_mutex);
if (ret) {
i915_gem_cleanup_aliasing_ppgtt(dev);
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c:1.1.1.1.2.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c:1.1.1.1.2.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c:1.1.1.1.2.2 Tue Jul 23 21:28:22 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem_stolen.c Sun Sep 8 16:00:22 2013
@@ -171,8 +171,11 @@ static void i915_cleanup_compression(str
void i915_gem_cleanup_stolen(struct drm_device *dev)
{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
if (I915_HAS_FBC(dev) && i915_powersave)
i915_cleanup_compression(dev);
+ drm_mm_takedown(&dev_priv->mm.stolen);
}
int i915_gem_init_stolen(struct drm_device *dev)
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.1.1.1.2.5 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.1.1.1.2.6
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.1.1.1.2.5 Sun Sep 8 15:59:47 2013
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c Sun Sep 8 16:00:22 2013
@@ -3386,6 +3386,10 @@ void intel_gpu_ips_init(struct drm_i915_
void intel_gpu_ips_teardown(void)
{
+#ifdef __NetBSD__
+ if (i915_mch_dev == NULL)
+ return;
+#endif
spin_lock_irq(&mchdev_lock);
i915_mch_dev = NULL;
spin_unlock_irq(&mchdev_lock);
@@ -4450,6 +4454,16 @@ void intel_gt_init(struct drm_device *de
intel_gen6_powersave_work);
}
+#ifdef __NetBSD__ /* XXX gt fini */
+void
+intel_gt_fini(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ spin_lock_destroy(&dev_priv->gt_lock);
+}
+#endif
+
int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u8 mbox, u32 *val)
{
WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock));
Index: src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c
diff -u src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c:1.1.2.2 src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c:1.1.2.3
--- src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c:1.1.2.2 Sun Sep 8 15:57:01 2013
+++ src/sys/external/bsd/drm2/i915drm/i915_gem_gtt.c Sun Sep 8 16:00:22 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: i915_gem_gtt.c,v 1.1.2.2 2013/09/08 15:57:01 riastradh Exp $ */
+/* $NetBSD: i915_gem_gtt.c,v 1.1.2.3 2013/09/08 16:00:22 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_gtt.c,v 1.1.2.2 2013/09/08 15:57:01 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_gtt.c,v 1.1.2.3 2013/09/08 16:00:22 riastradh Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -240,6 +240,14 @@ i915_gem_init_global_gtt(struct drm_devi
((end - start) >> PAGE_SHIFT));
}
+void
+i915_gem_fini_global_gtt(struct drm_device *dev)
+{
+ struct drm_i915_private *const dev_priv = dev->dev_private;
+
+ drm_mm_takedown(&dev_priv->mm.gtt_space);
+}
+
static void
i915_gtt_color_adjust(struct drm_mm_node *node, unsigned long color,
unsigned long *start, unsigned long *end)