From 41c0069fbcddcdcc5aeca4203fcc936093a461e7 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 27 Mar 2015 09:22:16 -0400 Subject: [PATCH] Linux v4.0-rc5-96-g3c435c1e472b - Fixes hangs due to i915 issues (rhbz 1204050 1206056) --- ...y-refcounting-in-plane_force_disable.patch | 72 -------------- ...ry-to-reference-the-fb-in-get_initia.patch | 94 ------------------- ...mic-state-when-reusing-the-firmware-.patch | 61 ------------ ...egacy-plane-crtc-link-for-initial-fb.patch | 54 ----------- drm-i915-hush-check-crtc-state.patch | 4 +- kernel.spec | 16 +--- sources | 2 +- 7 files changed, 8 insertions(+), 295 deletions(-) delete mode 100644 drm-Fixup-racy-refcounting-in-plane_force_disable.patch delete mode 100644 drm-i915-Don-t-try-to-reference-the-fb-in-get_initia.patch delete mode 100644 drm-i915-Fix-atomic-state-when-reusing-the-firmware-.patch delete mode 100644 drm-i915-Fixup-legacy-plane-crtc-link-for-initial-fb.patch diff --git a/drm-Fixup-racy-refcounting-in-plane_force_disable.patch b/drm-Fixup-racy-refcounting-in-plane_force_disable.patch deleted file mode 100644 index 6c46cb007..000000000 --- a/drm-Fixup-racy-refcounting-in-plane_force_disable.patch +++ /dev/null @@ -1,72 +0,0 @@ -From: Daniel Vetter -Date: Fri, 27 Feb 2015 12:58:13 +0100 -Subject: [PATCH] drm: Fixup racy refcounting in plane_force_disable - -Originally it was impossible to be dropping the last refcount in this -function since there was always one around still from the idr. But in - -commit 83f45fc360c8e16a330474860ebda872d1384c8c -Author: Daniel Vetter -Date: Wed Aug 6 09:10:18 2014 +0200 - - drm: Don't grab an fb reference for the idr - -we've switched to weak references, broke that assumption but forgot to -fix it up. - -Since we still force-disable planes it's only possible to hit this -when racing multiple rmfb with fbdev restoring or similar evil things. -As long as userspace is nice it's impossible to hit the BUG_ON. - -But the BUG_ON would most likely be hit from fbdev code, which usually -invovles the console_lock besides all modeset locks. So very likely -we'd never get the bug reports if this was hit in the wild, hence -better be safe than sorry and backport. - -Spotted by Matt Roper while reviewing other patches. - -[airlied: pull this back into 4.0 - the oops happens there] - -Cc: stable@vger.kernel.org -Cc: Matt Roper -Reviewed-by: Matt Roper -Signed-off-by: Daniel Vetter -Signed-off-by: Dave Airlie ---- - drivers/gpu/drm/drm_crtc.c | 13 +------------ - 1 file changed, 1 insertion(+), 12 deletions(-) - -diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c -index f6d04c7b5115..679b10e34fb5 100644 ---- a/drivers/gpu/drm/drm_crtc.c -+++ b/drivers/gpu/drm/drm_crtc.c -@@ -525,17 +525,6 @@ void drm_framebuffer_reference(struct drm_framebuffer *fb) - } - EXPORT_SYMBOL(drm_framebuffer_reference); - --static void drm_framebuffer_free_bug(struct kref *kref) --{ -- BUG(); --} -- --static void __drm_framebuffer_unreference(struct drm_framebuffer *fb) --{ -- DRM_DEBUG("%p: FB ID: %d (%d)\n", fb, fb->base.id, atomic_read(&fb->refcount.refcount)); -- kref_put(&fb->refcount, drm_framebuffer_free_bug); --} -- - /** - * drm_framebuffer_unregister_private - unregister a private fb from the lookup idr - * @fb: fb to unregister -@@ -1320,7 +1309,7 @@ void drm_plane_force_disable(struct drm_plane *plane) - return; - } - /* disconnect the plane from the fb and crtc: */ -- __drm_framebuffer_unreference(plane->old_fb); -+ drm_framebuffer_unreference(plane->old_fb); - plane->old_fb = NULL; - plane->fb = NULL; - plane->crtc = NULL; --- -2.1.0 - diff --git a/drm-i915-Don-t-try-to-reference-the-fb-in-get_initia.patch b/drm-i915-Don-t-try-to-reference-the-fb-in-get_initia.patch deleted file mode 100644 index ba40a8431..000000000 --- a/drm-i915-Don-t-try-to-reference-the-fb-in-get_initia.patch +++ /dev/null @@ -1,94 +0,0 @@ -From: Damien Lespiau -Date: Thu, 5 Feb 2015 18:30:20 +0000 -Subject: [PATCH] drm/i915: Don't try to reference the fb in - get_initial_plane_config() - -Tvrtko noticed a new warning on boot: - - WARNING: CPU: 1 PID: 353 at include/linux/kref.h:47 drm_framebuffer_reference+0x6c/0x80 [drm]() - Call Trace: - [] dump_stack+0x4f/0x7b - [] warn_slowpath_common+0xaa/0xd0 - [] warn_slowpath_null+0x1a/0x20 - [] drm_framebuffer_reference+0x6c/0x80 [drm] - [] update_state_fb.isra.54+0x47/0x50 [i915] - [] skylake_get_initial_plane_config+0x93c/0x950 [i915] - [] intel_modeset_init+0x1551/0x17c0 [i915] - [] i915_driver_load+0xed0/0x11e0 [i915] - [] ? _raw_spin_unlock_irqrestore+0x51/0x70 - [] drm_dev_register+0x77/0x110 [drm] - [] drm_get_pci_dev+0x11b/0x1f0 [drm] - [] ? trace_hardirqs_on+0xd/0x10 - [] ? _raw_spin_unlock_irqrestore+0x51/0x70 - [] i915_pci_probe+0x56/0x60 [i915] - [] pci_device_probe+0x7c/0x100 - [] driver_probe_device+0x16d/0x380 - -We cannot take a reference at this point, not before -intel_framebuffer_init() and the underlying drm_framebuffer_init(). - -Introduced in: - - commit 706dc7b549175e47f23e913b7f1e52874a7d0f56 - Author: Matt Roper - Date: Tue Feb 3 13:10:04 2015 -0800 - - drm/i915: Ensure plane->state->fb stays in sync with plane->fb - -v2: Don't move update_state_fb(). It was moved around because I - originally put update_state_fb() in intel_alloc_plane_obj() before - finding a better place. (Matt) - -Reviewed-by: Matt Roper -Reported-by: Tvrtko Ursulin -Cc: Matt Roper -Cc: Tvrtko Ursulin -Signed-off-by: Damien Lespiau -Signed-off-by: Daniel Vetter ---- - drivers/gpu/drm/i915/intel_display.c | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index e116dee10cf9..177714a9d778 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -2438,8 +2438,10 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, - if (!intel_crtc->base.primary->fb) - return; - -- if (intel_alloc_plane_obj(intel_crtc, plane_config)) -+ if (intel_alloc_plane_obj(intel_crtc, plane_config)) { -+ update_state_fb(intel_crtc->base.primary); - return; -+ } - - kfree(intel_crtc->base.primary->fb); - intel_crtc->base.primary->fb = NULL; -@@ -6663,7 +6665,6 @@ i9xx_get_initial_plane_config(struct intel_crtc *crtc, - plane_config->size); - - crtc->base.primary->fb = fb; -- update_state_fb(crtc->base.primary); - } - - static void chv_crtc_clock_get(struct intel_crtc *crtc, -@@ -7704,7 +7705,6 @@ skylake_get_initial_plane_config(struct intel_crtc *crtc, - plane_config->size); - - crtc->base.primary->fb = fb; -- update_state_fb(crtc->base.primary); - return; - - error: -@@ -7798,7 +7798,6 @@ ironlake_get_initial_plane_config(struct intel_crtc *crtc, - plane_config->size); - - crtc->base.primary->fb = fb; -- update_state_fb(crtc->base.primary); - } - - static bool ironlake_get_pipe_config(struct intel_crtc *crtc, --- -2.1.0 - diff --git a/drm-i915-Fix-atomic-state-when-reusing-the-firmware-.patch b/drm-i915-Fix-atomic-state-when-reusing-the-firmware-.patch deleted file mode 100644 index 56eddbe99..000000000 --- a/drm-i915-Fix-atomic-state-when-reusing-the-firmware-.patch +++ /dev/null @@ -1,61 +0,0 @@ -From: Damien Lespiau -Date: Thu, 5 Feb 2015 19:24:25 +0000 -Subject: [PATCH] drm/i915: Fix atomic state when reusing the firmware fb - -Right now, we get a warning when taking over the firmware fb: - - [drm:drm_atomic_plane_check] FB set but no CRTC - -with the following backtrace: - - [] drm_atomic_check_only+0x35d/0x510 [drm] - [] drm_atomic_commit+0x17/0x60 [drm] - [] drm_atomic_helper_plane_set_property+0x8d/0xd0 [drm_kms_helper] - [] drm_mode_plane_set_obj_prop+0x2d/0x90 [drm] - [] restore_fbdev_mode+0x6b/0xf0 [drm_kms_helper] - [] drm_fb_helper_restore_fbdev_mode_unlocked+0x29/0x80 [drm_kms_helper] - [] drm_fb_helper_set_par+0x22/0x50 [drm_kms_helper] - [] intel_fbdev_set_par+0x1a/0x60 [i915] - [] fbcon_init+0x4f4/0x580 - -That's because we update the plane state with the fb from the firmware, but we -never associate the plane to that CRTC. - -We don't quite have the full DRM take over from HW state just yet, so -fake enough of the plane atomic state to pass the checks. - -v2: Fix the state on which we set the CRTC in the case we're sharing the - initial fb with another pipe. (Matt) - -Signed-off-by: Damien Lespiau -Reviewed-by: Matt Roper -Signed-off-by: Daniel Vetter - -(Backported to 4.0-rc5) ---- - drivers/gpu/drm/i915/intel_display.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 177714a9d778..805b5e7b0058 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -2439,6 +2439,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, - return; - - if (intel_alloc_plane_obj(intel_crtc, plane_config)) { -+ intel_crtc->base.primary->state->crtc = &intel_crtc->base; - update_state_fb(intel_crtc->base.primary); - return; - } -@@ -2469,6 +2470,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, - - drm_framebuffer_reference(c->primary->fb); - intel_crtc->base.primary->fb = c->primary->fb; -+ intel_crtc->base.primary->state->crtc = &intel_crtc->base; - obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe); - break; - } --- -2.1.0 - diff --git a/drm-i915-Fixup-legacy-plane-crtc-link-for-initial-fb.patch b/drm-i915-Fixup-legacy-plane-crtc-link-for-initial-fb.patch deleted file mode 100644 index afacbd1fc..000000000 --- a/drm-i915-Fixup-legacy-plane-crtc-link-for-initial-fb.patch +++ /dev/null @@ -1,54 +0,0 @@ -From: Daniel Vetter -Date: Wed, 25 Mar 2015 18:30:38 +0100 -Subject: [PATCH] drm/i915: Fixup legacy plane->crtc link for initial fb config - -This is a very similar bug in the load detect code fixed in - -commit 9128b040eb774e04bc23777b005ace2b66ab2a85 -Author: Daniel Vetter -Date: Tue Mar 3 17:31:21 2015 +0100 - - drm/i915: Fix modeset state confusion in the load detect code - -But this time around it was the initial fb code that forgot to update -the plane->crtc pointer. Otherwise it's the exact same bug, with the -exact same restrains (any set_config call/ioctl that doesn't disable -the pipe papers over the bug for free, so fairly hard to hit in normal -testing). So if you want the full explanation just go read that one -over there - it's rather long ... - -Cc: Matt Roper -Cc: Linus Torvalds -Cc: Chris Wilson -Cc: Josh Boyer -Cc: Jani Nikula -Signed-off-by: Daniel Vetter - -(Backported to 4.0-rc5) ---- - drivers/gpu/drm/i915/intel_display.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 805b5e7b0058..778e7fa41c17 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -2440,6 +2440,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, - - if (intel_alloc_plane_obj(intel_crtc, plane_config)) { - intel_crtc->base.primary->state->crtc = &intel_crtc->base; -+ intel_crtc->base.primary->crtc = &intel_crtc->base; - update_state_fb(intel_crtc->base.primary); - return; - } -@@ -2471,6 +2472,7 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc, - drm_framebuffer_reference(c->primary->fb); - intel_crtc->base.primary->fb = c->primary->fb; - intel_crtc->base.primary->state->crtc = &intel_crtc->base; -+ intel_crtc->base.primary->crtc = &intel_crtc->base; - obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe); - break; - } --- -2.1.0 - diff --git a/drm-i915-hush-check-crtc-state.patch b/drm-i915-hush-check-crtc-state.patch index 7391de005..bd927d2f6 100644 --- a/drm-i915-hush-check-crtc-state.patch +++ b/drm-i915-hush-check-crtc-state.patch @@ -14,10 +14,10 @@ Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/0 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 6d22128d97b1..e116dee10cf9 100644 +index f75173c20f47..1003782a38c4 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -10909,7 +10909,7 @@ check_crtc_state(struct drm_device *dev) +@@ -10917,7 +10917,7 @@ check_crtc_state(struct drm_device *dev) if (active && !intel_pipe_config_compare(dev, crtc->config, &pipe_config)) { diff --git a/kernel.spec b/kernel.spec index f5a70be5b..7c79dee02 100644 --- a/kernel.spec +++ b/kernel.spec @@ -68,7 +68,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 5 # The git snapshot level -%define gitrev 3 +%define gitrev 4 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -628,11 +628,6 @@ Patch26168: HID-multitouch-add-support-of-clickpads.patch Patch26170: acpi-video-Allow-forcing-native-backlight-on-non-win.patch Patch26171: acpi-video-Add-force-native-backlight-quirk-for-Leno.patch -Patch26172: drm-Fixup-racy-refcounting-in-plane_force_disable.patch -Patch26173: drm-i915-Don-t-try-to-reference-the-fb-in-get_initia.patch -Patch26175: drm-i915-Fix-atomic-state-when-reusing-the-firmware-.patch -Patch26176: drm-i915-Fixup-legacy-plane-crtc-link-for-initial-fb.patch - #rhbz 1203584 Patch26174: Input-ALPS-fix-max-coordinates-for-v5-and-v7-protoco.patch @@ -1375,11 +1370,6 @@ ApplyPatch HID-multitouch-add-support-of-clickpads.patch ApplyPatch acpi-video-Allow-forcing-native-backlight-on-non-win.patch ApplyPatch acpi-video-Add-force-native-backlight-quirk-for-Leno.patch -ApplyPatch drm-Fixup-racy-refcounting-in-plane_force_disable.patch -ApplyPatch drm-i915-Don-t-try-to-reference-the-fb-in-get_initia.patch -ApplyPatch drm-i915-Fix-atomic-state-when-reusing-the-firmware-.patch -ApplyPatch drm-i915-Fixup-legacy-plane-crtc-link-for-initial-fb.patch - #rhbz 1203584 ApplyPatch Input-ALPS-fix-max-coordinates-for-v5-and-v7-protoco.patch @@ -2233,6 +2223,10 @@ fi # # %changelog +* Fri Mar 27 2015 Josh Boyer - 4.0.0-0.rc5.git4.1 +- Linux v4.0-rc5-96-g3c435c1e472b +- Fixes hangs due to i915 issues (rhbz 1204050 1206056) + * Thu Mar 26 2015 Josh Boyer - 4.0.0-0.rc5.git3.1 - Linux v4.0-rc5-80-g4c4fe4c24782 diff --git a/sources b/sources index accd2ba8e..f0c7106ac 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ b26150c980099ef554b26d07f470e647 linux-4.0-rc5.tar.xz 7614f559a09f0242827fc7783c7adf3f perf-man-4.0-rc5.tar.gz -ee2f45f001bd0764920024894631f061 patch-4.0-rc5-git3.xz +6b92fe5b8052c71e65a6db8d43a776fa patch-4.0-rc5-git4.xz