[arch-commits] Commit in linux/trunk (4 files)

Tobias Powalowski tpowa at nymeria.archlinux.org
Sun Mar 17 13:00:07 UTC 2013


    Date: Sunday, March 17, 2013 @ 14:00:07
  Author: tpowa
Revision: 180114

upgpkg: linux 3.8.3-2

fix intel drm #34327

Added:
  linux/trunk/drm-i915-enable-irqs-earlier-when-resuming.patch
  linux/trunk/drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch
Modified:
  linux/trunk/PKGBUILD
  linux/trunk/linux.install

---------------------------------------------------------------------+
 PKGBUILD                                                            |   15 -
 drm-i915-enable-irqs-earlier-when-resuming.patch                    |   82 ++++++
 drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch |  124 ++++++++++
 linux.install                                                       |    2 
 4 files changed, 219 insertions(+), 4 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2013-03-17 11:48:21 UTC (rev 180113)
+++ PKGBUILD	2013-03-17 13:00:07 UTC (rev 180114)
@@ -6,7 +6,7 @@
 #pkgbase=linux-custom       # Build kernel with a different name
 _srcname=linux-3.8
 pkgver=3.8.3
-pkgrel=1
+pkgrel=2
 arch=('i686' 'x86_64')
 url="http://www.kernel.org/"
 license=('GPL2')
@@ -18,13 +18,17 @@
         'config' 'config.x86_64'
         # standard config files for mkinitcpio ramdisk
         'linux.preset'
-        'change-default-console-loglevel.patch')
+        'change-default-console-loglevel.patch'
+        'drm-i915-enable-irqs-earlier-when-resuming.patch'
+        'drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch')
 md5sums=('1c738edfc54e7c65faeb90c436104e2f'
          'ba18b5d27ed303f5e5a9cda32a451031'
          '307107a8b15060e6fc0e48bdaacaed06'
          '03b1dad90f3558dba3031901398c1ca4'
          'eb14dcfd80c00852ef81ded6e826826a'
-         'f3def2cefdcbb954c21d8505d23cc83c')
+         'f3def2cefdcbb954c21d8505d23cc83c'
+         '40e7b328977ad787a0b5584f193d63fe'
+         '8b9159931fab0c191a86dbd5a46fa328')
 
 _kernelname=${pkgbase#linux}
 
@@ -42,6 +46,11 @@
   # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
   patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch"
 
+  # revert 2 patches which breaks displays
+  # FS 34327
+  patch -Rp1 -i "${srcdir}/drm-i915-enable-irqs-earlier-when-resuming.patch"
+  patch -Rp1 -i "${srcdir}/drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch"
+
   if [ "${CARCH}" = "x86_64" ]; then
     cat "${srcdir}/config.x86_64" > ./.config
   else

Added: drm-i915-enable-irqs-earlier-when-resuming.patch
===================================================================
--- drm-i915-enable-irqs-earlier-when-resuming.patch	                        (rev 0)
+++ drm-i915-enable-irqs-earlier-when-resuming.patch	2013-03-17 13:00:07 UTC (rev 180114)
@@ -0,0 +1,82 @@
+From 15239099d7a7a9ecdc1ccb5b187ae4cda5488ff9 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter at ffwll.ch>
+Date: Tue, 5 Mar 2013 09:50:58 +0100
+Subject: drm/i915: enable irqs earlier when resuming
+
+From: Daniel Vetter <daniel.vetter at ffwll.ch>
+
+commit 15239099d7a7a9ecdc1ccb5b187ae4cda5488ff9 upstream.
+
+We need it to restore the ilk rc6 context, since the gpu wait no
+requires interrupts. But in general having interrupts around should
+help in code sanity, since more and more stuff is interrupt driven.
+
+This regression has been introduced in
+
+commit 3e9605018ab3e333d51cc90fccfde2031886763b
+Author: Chris Wilson <chris at chris-wilson.co.uk>
+Date:   Tue Nov 27 16:22:54 2012 +0000
+
+    drm/i915: Rearrange code to only have a single method for waiting upon the ring
+
+Like in the driver load code we need to make sure that hotplug
+interrupts don't cause havoc with our modeset state, hence block them
+with the existing infrastructure. Again we ignore races where we might
+loose hotplug interrupts ...
+
+Note that the driver load part of the regression has already been
+fixed in
+
+commit 52d7ecedac3f96fb562cb482c139015372728638
+Author: Daniel Vetter <daniel.vetter at ffwll.ch>
+Date:   Sat Dec 1 21:03:22 2012 +0100
+
+    drm/i915: reorder setup sequence to have irqs for output setup
+
+v2: Add a note to the commit message about which patch fixed the
+driver load part of the regression. Stable kernels need to backport
+both patches.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=54691
+Cc: Chris Wilson <chris at chris-wilson.co.uk>
+Cc: Mika Kuoppala <mika.kuoppala at intel.com>
+Reported-and-Tested-by: Ilya Tumaykin <itumaykin at gmail.com>
+Reviewed-by: Chris wilson <chris at chris-wilson.co.uk> (v1)
+Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/i915_drv.c |   13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -486,6 +486,7 @@ static int i915_drm_freeze(struct drm_de
+ 		intel_modeset_disable(dev);
+ 
+ 		drm_irq_uninstall(dev);
++		dev_priv->enable_hotplug_processing = false;
+ 	}
+ 
+ 	i915_save_state(dev);
+@@ -562,9 +563,19 @@ static int __i915_drm_thaw(struct drm_de
+ 		error = i915_gem_init_hw(dev);
+ 		mutex_unlock(&dev->struct_mutex);
+ 
++		/* We need working interrupts for modeset enabling ... */
++		drm_irq_install(dev);
++
+ 		intel_modeset_init_hw(dev);
+ 		intel_modeset_setup_hw_state(dev, false);
+-		drm_irq_install(dev);
++
++		/*
++		 * ... but also need to make sure that hotplug processing
++		 * doesn't cause havoc. Like in the driver load code we don't
++		 * bother with the tiny race here where we might loose hotplug
++		 * notifications.
++		 * */
++		dev_priv->enable_hotplug_processing = true;
+ 	}
+ 
+ 	intel_opregion_init(dev);

Added: drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch
===================================================================
--- drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch	                        (rev 0)
+++ drm-i915-reorder-setup-sequence-to-have-irqs-for-output-setup.patch	2013-03-17 13:00:07 UTC (rev 180114)
@@ -0,0 +1,124 @@
+From 52d7ecedac3f96fb562cb482c139015372728638 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter at ffwll.ch>
+Date: Sat, 1 Dec 2012 21:03:22 +0100
+Subject: drm/i915: reorder setup sequence to have irqs for output setup
+
+From: Daniel Vetter <daniel.vetter at ffwll.ch>
+
+commit 52d7ecedac3f96fb562cb482c139015372728638 upstream.
+
+Otherwise the new&shiny irq-driven gmbus and dp aux code won't work that
+well. Noticed since the dp aux code doesn't have an automatic fallback
+with a timeout (since the hw provides for that already).
+
+v2: Simple move drm_irq_install before intel_modeset_gem_init, as
+suggested by Ben Widawsky.
+
+v3: Now that interrupts are enabled before all connectors are fully
+set up, we might fall over serving a HPD interrupt while things are
+still being set up. Instead of jumping through massive hoops and
+complicating the code with a separate hpd irq enable step, simply
+block out the hotplug work item from doing anything until things are
+in place.
+
+v4: Actually, we can enable hotplug processing only after the fbdev is
+fully set up, since we call down into the fbdev from the hotplug work
+functions. So stick the hpd enabling right next to the poll helper
+initialization.
+
+v5: We need to enable irqs before intel_modeset_init, since that
+function sets up the outputs.
+
+v6: Fixup cleanup sequence, too.
+
+Reviewed-by: Imre Deak <imre.deak at intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/i915_dma.c |   23 ++++++++++++++---------
+ drivers/gpu/drm/i915/i915_drv.h |    1 +
+ drivers/gpu/drm/i915/i915_irq.c |    4 ++++
+ 3 files changed, 19 insertions(+), 9 deletions(-)
+
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -1297,19 +1297,21 @@ static int i915_load_modeset_init(struct
+ 	if (ret)
+ 		goto cleanup_vga_switcheroo;
+ 
++	ret = drm_irq_install(dev);
++	if (ret)
++		goto cleanup_gem_stolen;
++
++	/* Important: The output setup functions called by modeset_init need
++	 * working irqs for e.g. gmbus and dp aux transfers. */
+ 	intel_modeset_init(dev);
+ 
+ 	ret = i915_gem_init(dev);
+ 	if (ret)
+-		goto cleanup_gem_stolen;
+-
+-	intel_modeset_gem_init(dev);
++		goto cleanup_irq;
+ 
+ 	INIT_WORK(&dev_priv->console_resume_work, intel_console_resume);
+ 
+-	ret = drm_irq_install(dev);
+-	if (ret)
+-		goto cleanup_gem;
++	intel_modeset_gem_init(dev);
+ 
+ 	/* Always safe in the mode setting case. */
+ 	/* FIXME: do pre/post-mode set stuff in core KMS code */
+@@ -1317,7 +1319,10 @@ static int i915_load_modeset_init(struct
+ 
+ 	ret = intel_fbdev_init(dev);
+ 	if (ret)
+-		goto cleanup_irq;
++		goto cleanup_gem;
++
++	/* Only enable hotplug handling once the fbdev is fully set up. */
++	dev_priv->enable_hotplug_processing = true;
+ 
+ 	drm_kms_helper_poll_init(dev);
+ 
+@@ -1326,13 +1331,13 @@ static int i915_load_modeset_init(struct
+ 
+ 	return 0;
+ 
+-cleanup_irq:
+-	drm_irq_uninstall(dev);
+ cleanup_gem:
+ 	mutex_lock(&dev->struct_mutex);
+ 	i915_gem_cleanup_ringbuffer(dev);
+ 	mutex_unlock(&dev->struct_mutex);
+ 	i915_gem_cleanup_aliasing_ppgtt(dev);
++cleanup_irq:
++	drm_irq_uninstall(dev);
+ cleanup_gem_stolen:
+ 	i915_gem_cleanup_stolen(dev);
+ cleanup_vga_switcheroo:
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -672,6 +672,7 @@ typedef struct drm_i915_private {
+ 
+ 	u32 hotplug_supported_mask;
+ 	struct work_struct hotplug_work;
++	bool enable_hotplug_processing;
+ 
+ 	int num_pipe;
+ 	int num_pch_pll;
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -287,6 +287,10 @@ static void i915_hotplug_work_func(struc
+ 	struct drm_mode_config *mode_config = &dev->mode_config;
+ 	struct intel_encoder *encoder;
+ 
++	/* HPD irq before everything is fully set up. */
++	if (!dev_priv->enable_hotplug_processing)
++		return;
++
+ 	mutex_lock(&mode_config->mutex);
+ 	DRM_DEBUG_KMS("running encoder hotplug functions\n");
+ 

Modified: linux.install
===================================================================
--- linux.install	2013-03-17 11:48:21 UTC (rev 180113)
+++ linux.install	2013-03-17 13:00:07 UTC (rev 180114)
@@ -2,7 +2,7 @@
 # arg 2:  the old package version
 
 KERNEL_NAME=
-KERNEL_VERSION=3.8.3-1-ARCH
+KERNEL_VERSION=3.8.3-2-ARCH
 
 # set a sane PATH to ensure that critical utils like depmod will be found
 export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'




More information about the arch-commits mailing list