From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de ([195.135.220.15]:36380 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755606AbcBXI7j (ORCPT ); Wed, 24 Feb 2016 03:59:39 -0500 Subject: Re: [PATCH 3/6] drm: Fix drm_vblank_pre/post_modeset regression from Linux 4.4 To: Mario Kleiner , dri-devel@lists.freedesktop.org References: <1455305432-28770-1-git-send-email-mario.kleiner.de@gmail.com> <1455305432-28770-4-git-send-email-mario.kleiner.de@gmail.com> Cc: stable@vger.kernel.org, michel@daenzer.net, ville.syrjala@linux.intel.com, daniel.vetter@ffwll.ch, alexander.deucher@amd.com, christian.koenig@amd.com From: Vlastimil Babka Message-ID: <56CD70F7.3030002@suse.cz> Date: Wed, 24 Feb 2016 09:59:35 +0100 MIME-Version: 1.0 In-Reply-To: <1455305432-28770-4-git-send-email-mario.kleiner.de@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: stable-owner@vger.kernel.org List-ID: On 02/12/2016 08:30 PM, Mario Kleiner wrote: > Changes to drm_update_vblank_count() in Linux 4.4 broke the > behaviour of the pre/post modeset functions as the new update > code doesn't deal with hw vblank counter resets inbetween calls > to drm_vblank_pre_modeset an drm_vblank_post_modeset, as it > should. > > This causes mistreatment of such hw counter resets as counter > wraparound, and thereby large forward jumps of the software > vblank counter which in turn cause vblank event dispatching > and vblank waits to fail/hang --> userspace clients hang. > > This symptom was reported on radeon-kms to cause a infinite > hang of KDE Plasma 5 shell's login procedure, preventing users > from logging in. > > Fix this by detecting when drm_update_vblank_count() is called > inside a pre->post modeset interval. If so, clamp valid vblank > increments to the safe values 0 and 1, pretty much restoring > the update behavior of the old update code of Linux 4.3 and > earlier. Also reset the last recorded hw vblank count at call > to drm_vblank_post_modeset() to be safe against hw that after > modesetting, dpms on etc. only fires its first vblank irq after > drm_vblank_post_modeset() was already called. > > Reported-by: Vlastimil Babka > Signed-off-by: Mario Kleiner > Reviewed-by: Daniel Vetter > Tested-by: Vlastimil Babka FWIW I have applied patches 1-4 of this v2 to 4.4.2 and it works fine so far on my radeon. Patch 6/6 was for nouveau so I ignored it, and 5/6 didn't have stable tag (and from the description I couldn't decide if I should include it or not). Thanks, Vlastimil