From 743d347abbb80b913f49c75d0abcd9b5cf35d1e5 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Sep 10 2012 17:35:18 +0000 Subject: dos2unix. --- diff --git a/fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch b/fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch index 992bd25..5001c95 100644 --- a/fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch +++ b/fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch @@ -1,89 +1,89 @@ -Delivered-To: jwboyer@gmail.com -Received: by 10.229.184.7 with SMTP id ci7csp32184qcb; - Mon, 20 Aug 2012 23:40:20 -0700 (PDT) -Received: by 10.236.195.97 with SMTP id o61mr24210886yhn.17.1345531220620; - Mon, 20 Aug 2012 23:40:20 -0700 (PDT) -Return-Path: -Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) - by mx.google.com with ESMTP id c5si239413anp.5.2012.08.20.23.40.20; - Mon, 20 Aug 2012 23:40:20 -0700 (PDT) -Received-SPF: pass (google.com: domain of airlied@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; -Authentication-Results: mx.google.com; spf=pass (google.com: domain of airlied@redhat.com designates 209.132.183.28 as permitted sender) smtp.mail=airlied@redhat.com -Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) - by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q7L6eJ4K014799 - (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); - Tue, 21 Aug 2012 02:40:19 -0400 -Received: from prime.bne.redhat.com (dhcp-41-76.bne.redhat.com [10.64.41.76]) - by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q7L6eFfB029177; - Tue, 21 Aug 2012 02:40:16 -0400 -From: Dave Airlie -To: linux-fbdev@vger.kernel.org -Cc: dri-devel@lists.sf.net, linux-kernel@vger.kernel.org, - Linus , - Alan Cox , - Randy Dunlap , Josh Boyer , - Dave Airlie -Subject: [PATCH] fbcon: fix race condition between console lock and cursor timer -Date: Tue, 21 Aug 2012 16:40:07 +1000 -Message-Id: <1345531207-24926-1-git-send-email-airlied@redhat.com> -X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 - -So we've had a fair few reports of fbcon handover breakage between -efi/vesafb and i915 surface recently, so I dedicated a couple of -days to finding the problem. - -Essentially the last thing we saw was the conflicting framebuffer -message and that was all. - -So after much tracing with direct netconsole writes (printks -under console_lock not so useful), I think I found the race. - -Thread A (driver load) Thread B (timer thread) - unbind_con_driver -> | - bind_con_driver -> | - vc->vc_sw->con_deinit -> | - fbcon_deinit -> | - console_lock() | - | | - | fbcon_flashcursor timer fires - | console_lock() <- blocked for A - | - | -fbcon_del_cursor_timer -> - del_timer_sync - (BOOM) - -Of course because all of this is under the console lock, -we never see anything, also since we also just unbound the active -console guess what we never see anything. - -Hopefully this fixes the problem for anyone seeing vesafb->kms -driver handoff. - -Signed-off-by: David Airlie ---- - drivers/video/console/fbcon.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c -index 2e471c2..f8a79fc 100644 ---- a/drivers/video/console/fbcon.c -+++ b/drivers/video/console/fbcon.c -@@ -372,8 +372,12 @@ static void fb_flashcursor(struct work_struct *work) - struct vc_data *vc = NULL; - int c; - int mode; -+ int ret; -+ -+ ret = console_trylock(); -+ if (ret == 0) -+ return; - -- console_lock(); - if (ops && ops->currcon != -1) - vc = vc_cons[ops->currcon].d; - --- -1.7.10.2 - +Delivered-To: jwboyer@gmail.com +Received: by 10.229.184.7 with SMTP id ci7csp32184qcb; + Mon, 20 Aug 2012 23:40:20 -0700 (PDT) +Received: by 10.236.195.97 with SMTP id o61mr24210886yhn.17.1345531220620; + Mon, 20 Aug 2012 23:40:20 -0700 (PDT) +Return-Path: +Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) + by mx.google.com with ESMTP id c5si239413anp.5.2012.08.20.23.40.20; + Mon, 20 Aug 2012 23:40:20 -0700 (PDT) +Received-SPF: pass (google.com: domain of airlied@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; +Authentication-Results: mx.google.com; spf=pass (google.com: domain of airlied@redhat.com designates 209.132.183.28 as permitted sender) smtp.mail=airlied@redhat.com +Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) + by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q7L6eJ4K014799 + (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); + Tue, 21 Aug 2012 02:40:19 -0400 +Received: from prime.bne.redhat.com (dhcp-41-76.bne.redhat.com [10.64.41.76]) + by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q7L6eFfB029177; + Tue, 21 Aug 2012 02:40:16 -0400 +From: Dave Airlie +To: linux-fbdev@vger.kernel.org +Cc: dri-devel@lists.sf.net, linux-kernel@vger.kernel.org, + Linus , + Alan Cox , + Randy Dunlap , Josh Boyer , + Dave Airlie +Subject: [PATCH] fbcon: fix race condition between console lock and cursor timer +Date: Tue, 21 Aug 2012 16:40:07 +1000 +Message-Id: <1345531207-24926-1-git-send-email-airlied@redhat.com> +X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 + +So we've had a fair few reports of fbcon handover breakage between +efi/vesafb and i915 surface recently, so I dedicated a couple of +days to finding the problem. + +Essentially the last thing we saw was the conflicting framebuffer +message and that was all. + +So after much tracing with direct netconsole writes (printks +under console_lock not so useful), I think I found the race. + +Thread A (driver load) Thread B (timer thread) + unbind_con_driver -> | + bind_con_driver -> | + vc->vc_sw->con_deinit -> | + fbcon_deinit -> | + console_lock() | + | | + | fbcon_flashcursor timer fires + | console_lock() <- blocked for A + | + | +fbcon_del_cursor_timer -> + del_timer_sync + (BOOM) + +Of course because all of this is under the console lock, +we never see anything, also since we also just unbound the active +console guess what we never see anything. + +Hopefully this fixes the problem for anyone seeing vesafb->kms +driver handoff. + +Signed-off-by: David Airlie +--- + drivers/video/console/fbcon.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c +index 2e471c2..f8a79fc 100644 +--- a/drivers/video/console/fbcon.c ++++ b/drivers/video/console/fbcon.c +@@ -372,8 +372,12 @@ static void fb_flashcursor(struct work_struct *work) + struct vc_data *vc = NULL; + int c; + int mode; ++ int ret; ++ ++ ret = console_trylock(); ++ if (ret == 0) ++ return; + +- console_lock(); + if (ops && ops->currcon != -1) + vc = vc_cons[ops->currcon].d; + +-- +1.7.10.2 +