diff options
| author | Josh Boyer <jwboyer@redhat.com> | 2012-08-21 09:30:44 -0400 |
|---|---|---|
| committer | Josh Boyer <jwboyer@redhat.com> | 2012-08-21 09:32:11 -0400 |
| commit | 2875d27c9a977df8cef028fbf82c505f5a7fd712 (patch) | |
| tree | 87f7520ccc820eb4b975cbdb38595aaf5474b882 | |
| parent | 663b0b92dace6c68da45cb5c29e342617e0f1be1 (diff) | |
Add patch from Dave Airlie to fix fb cursor vs grub2 gfxterm hang
| -rw-r--r-- | fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch | 89 | ||||
| -rw-r--r-- | kernel.spec | 9 |
2 files changed, 97 insertions, 1 deletions
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 new file mode 100644 index 00000000..992bd252 --- /dev/null +++ b/fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch @@ -0,0 +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: <airlied@redhat.com>
+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 <airlied@redhat.com>
+To: linux-fbdev@vger.kernel.org
+Cc: dri-devel@lists.sf.net, linux-kernel@vger.kernel.org,
+ Linus <torvalds@linux-foundation.org>,
+ Alan Cox <alan@lxorguk.ukuu.org.uk>,
+ Randy Dunlap <rdunlap@xenotime.net>, Josh Boyer <jwboyer@gmail.com>,
+ Dave Airlie <airlied@redhat.com>
+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 <airlied@redhat.com>
+---
+ 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
+
diff --git a/kernel.spec b/kernel.spec index 05f65d2c..39edbfe8 100644 --- a/kernel.spec +++ b/kernel.spec @@ -62,7 +62,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 1 +%global baserelease 2 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -747,6 +747,8 @@ Patch22001: selinux-apply-different-permission-to-ptrace-child.patch #rhbz 836742 Patch22059: uvcvideo-Reset-bytesused-field-when-recycling-erroneous-buffer.patch +Patch22065: fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch + # END OF PATCH DEFINITIONS %endif @@ -1437,6 +1439,8 @@ ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch #rhbz 836742 ApplyPatch uvcvideo-Reset-bytesused-field-when-recycling-erroneous-buffer.patch +ApplyPatch fbcon-fix-race-condition-between-console-lock-and-cursor-timer.patch + # END OF PATCH APPLICATIONS %endif @@ -2299,6 +2303,9 @@ fi # ||----w | # || || %changelog +* Tue Aug 21 2012 Josh Boyer <jwboyer@redhat.com> +- Add patch from Dave Airlie to fix fb cursor vs grub2 gfxterm hang + * Mon Aug 20 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc2.git1.1 - Linux v3.6-rc2-206-g10c63c9 |
