xf86: call enter/leave VT for gpu screens as well

Otherwise we can't do fast user switch properly for multiple GPUs.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2012-09-03 15:09:36 +10:00
parent 18deac48db
commit 0db936a5b7

View File

@ -460,6 +460,8 @@ xf86VTSwitch(void)
OsBlockSIGIO(); OsBlockSIGIO();
for (i = 0; i < xf86NumScreens; i++) for (i = 0; i < xf86NumScreens; i++)
xf86Screens[i]->LeaveVT(xf86Screens[i]); xf86Screens[i]->LeaveVT(xf86Screens[i]);
for (i = 0; i < xf86NumGPUScreens; i++)
xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]);
xf86AccessLeave(); /* We need this here, otherwise */ xf86AccessLeave(); /* We need this here, otherwise */
@ -474,6 +476,10 @@ xf86VTSwitch(void)
if (!xf86Screens[i]->EnterVT(xf86Screens[i])) if (!xf86Screens[i]->EnterVT(xf86Screens[i]))
FatalError("EnterVT failed for screen %d\n", 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)) { if (!(dispatchException & DE_TERMINATE)) {
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->EnableDisableFBAccess) if (xf86Screens[i]->EnableDisableFBAccess)
@ -530,6 +536,11 @@ xf86VTSwitch(void)
if (!xf86Screens[i]->EnterVT(xf86Screens[i])) if (!xf86Screens[i]->EnterVT(xf86Screens[i]))
FatalError("EnterVT failed for screen %d\n", 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++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->EnableDisableFBAccess) if (xf86Screens[i]->EnableDisableFBAccess)
(*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE);