From d62d1492fed7a721aafb19cb6dee7d7e96738a1c Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 3 Sep 2012 15:14:31 +1000 Subject: [PATCH] fix multi-gpu after VT switch --- ...ter-leave-VT-for-gpu-screens-as-well.patch | 51 +++++++++++++++++++ xorg-x11-server.spec | 8 ++- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 0001-xf86-call-enter-leave-VT-for-gpu-screens-as-well.patch diff --git a/0001-xf86-call-enter-leave-VT-for-gpu-screens-as-well.patch b/0001-xf86-call-enter-leave-VT-for-gpu-screens-as-well.patch new file mode 100644 index 0000000..5b2417e --- /dev/null +++ b/0001-xf86-call-enter-leave-VT-for-gpu-screens-as-well.patch @@ -0,0 +1,51 @@ +From fa9cd6caf572d6550f7acf679b6c727676241bb5 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 3 Sep 2012 15:09:36 +1000 +Subject: [PATCH] xf86: call enter/leave VT for gpu screens as well + +Otherwise we can't do fast user switch properly for multiple GPUs. + +Signed-off-by: Dave Airlie +--- + hw/xfree86/common/xf86Events.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c +index 47429ec..3ad34b5 100644 +--- a/hw/xfree86/common/xf86Events.c ++++ b/hw/xfree86/common/xf86Events.c +@@ -460,6 +460,8 @@ xf86VTSwitch(void) + OsBlockSIGIO(); + for (i = 0; i < xf86NumScreens; i++) + xf86Screens[i]->LeaveVT(xf86Screens[i]); ++ for (i = 0; i < xf86NumGPUScreens; i++) ++ xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]); + + xf86AccessLeave(); /* We need this here, otherwise */ + +@@ -474,6 +476,10 @@ xf86VTSwitch(void) + if (!xf86Screens[i]->EnterVT(xf86Screens[i])) + FatalError("EnterVT failed for screen %d\n", i); + } ++ for (i = 0; i < xf86NumGPUScreens; i++) { ++ if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) ++ FatalError("EnterVT failed for gpu screen %d\n", i); ++ } + if (!(dispatchException & DE_TERMINATE)) { + for (i = 0; i < xf86NumScreens; i++) { + if (xf86Screens[i]->EnableDisableFBAccess) +@@ -530,6 +536,11 @@ xf86VTSwitch(void) + if (!xf86Screens[i]->EnterVT(xf86Screens[i])) + FatalError("EnterVT failed for screen %d\n", i); + } ++ for (i = 0; i < xf86NumGPUScreens; i++) { ++ xf86GPUScreens[i]->vtSema = TRUE; ++ if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) ++ FatalError("EnterVT failed for gpu screen %d\n", i); ++ } + for (i = 0; i < xf86NumScreens; i++) { + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); +-- +1.7.10.2 + diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index e1b300d..994ada3 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -43,7 +43,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.12.99.905 -Release: 3%{?gitdate:.%{gitdate}}%{dist} +Release: 4%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -112,6 +112,9 @@ Patch7040: 0001-config-udev-add-wrapper-around-check-if-server-is-no.patch Patch7041: 0002-config-udev-respect-seat-for-hotplugged-video-device.patch Patch7042: 0003-xf86-fix-multi-seat-video-device-support.patch +# backport vt switch fix from list +Patch7050: 0001-xf86-call-enter-leave-VT-for-gpu-screens-as-well.patch + %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri %global sdkdir %{_includedir}/xorg @@ -584,6 +587,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Mon Sep 03 2012 Dave Airlie 1.12.99.905-4 +- fix multi-gpu after VT switch + * Mon Aug 27 2012 Dave Airlie 1.12.99.905-3 - port multi-seat video fixes from upstream