xfree86: Remove xf86EnterServerState

Back when we had RAC this was a vaguely meaningful thing.  Since then
it's been a glorified (and confusing) wrapper around xf86BlockSIGIO.

Note that the APM and VT switch code are unusual relative to other code
that cares about SIGIO state.  Most callers push a SIGIO disable to
create a critical section for the duration of the caller's stack frame,
but those two effectively disable SIGIO after their return and re-enable
on their next entry.

Reviewed-by: Tiago Vignatti <tigo.vignatti@nokia.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2010-12-16 14:03:13 -05:00
parent a04e74cb48
commit ce13a1dbbf
8 changed files with 21 additions and 71 deletions

View File

@ -135,7 +135,6 @@ extern _X_EXPORT EntityInfoPtr xf86GetEntityInfo(int entityIndex);
extern _X_EXPORT Bool xf86SetEntityFuncs(int entityIndex, EntityProc init, extern _X_EXPORT Bool xf86SetEntityFuncs(int entityIndex, EntityProc init,
EntityProc enter, EntityProc leave, pointer); EntityProc enter, EntityProc leave, pointer);
extern _X_EXPORT Bool xf86IsEntityPrimary(int entityIndex); extern _X_EXPORT Bool xf86IsEntityPrimary(int entityIndex);
extern _X_EXPORT void xf86EnterServerState(xf86State state);
extern _X_EXPORT ScrnInfoPtr xf86FindScreenForEntity(int entityIndex); extern _X_EXPORT ScrnInfoPtr xf86FindScreenForEntity(int entityIndex);
extern _X_EXPORT int xf86GetLastScrnFlag(int entityIndex); extern _X_EXPORT int xf86GetLastScrnFlag(int entityIndex);

View File

@ -496,32 +496,6 @@ xf86AccessLeave(void)
xf86Entities[i]->entityLeave(i,xf86Entities[i]->private); xf86Entities[i]->entityLeave(i,xf86Entities[i]->private);
} }
/*
* xf86EnterServerState() -- set state the server is in.
*/
typedef enum { TRI_UNSET, TRI_TRUE, TRI_FALSE } TriState;
void
xf86EnterServerState(xf86State state)
{
static int sigio_state;
static TriState sigio_blocked = TRI_UNSET;
/*
* This is a good place to block SIGIO during SETUP state. SIGIO should be
* blocked in SETUP state otherwise (u)sleep() might get interrupted
* early. We take care not to call xf86BlockSIGIO() twice.
*/
if ((state == SETUP) && (sigio_blocked != TRI_TRUE)) {
sigio_state = xf86BlockSIGIO();
sigio_blocked = TRI_TRUE;
} else if ((state == OPERATING) && (sigio_blocked != TRI_UNSET)) {
xf86UnblockSIGIO(sigio_state);
sigio_blocked = TRI_FALSE;
}
}
/* /*
* xf86PostProbe() -- Allocate all non conflicting resources * xf86PostProbe() -- Allocate all non conflicting resources
* This function gets called by xf86Init(). * This function gets called by xf86Init().
@ -544,13 +518,6 @@ xf86PostProbe(void)
xf86Entities[i]->entityInit(i,xf86Entities[i]->private); xf86Entities[i]->entityInit(i,xf86Entities[i]->private);
} }
void
xf86PostScreenInit(void)
{
xf86VGAarbiterWrapFunctions();
xf86EnterServerState(OPERATING);
}
int int
xf86GetLastScrnFlag(int entityIndex) xf86GetLastScrnFlag(int entityIndex)
{ {

View File

@ -202,7 +202,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
ScrnInfoPtr pScr = XF86SCRNINFO(pScreen); ScrnInfoPtr pScr = XF86SCRNINFO(pScreen);
ScreenPtr pCursorScreen; ScreenPtr pCursorScreen;
Bool Switched; Bool Switched;
int px, py; int px, py, was_blocked;
DeviceIntPtr dev, it; DeviceIntPtr dev, it;
if (!pScr->vtSema || !mode || !pScr->SwitchMode) if (!pScr->vtSema || !mode || !pScr->SwitchMode)
@ -232,7 +232,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
if (pScreen == pCursorScreen) if (pScreen == pCursorScreen)
miPointerGetPosition(dev, &px, &py); miPointerGetPosition(dev, &px, &py);
xf86EnterServerState(SETUP); was_blocked = xf86BlockSIGIO();
Switched = (*pScr->SwitchMode)(pScr->scrnIndex, mode, 0); Switched = (*pScr->SwitchMode)(pScr->scrnIndex, mode, 0);
if (Switched) { if (Switched) {
pScr->currentMode = mode; pScr->currentMode = mode;
@ -269,7 +269,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
pScr->frameY1 = pScr->virtualY - 1; pScr->frameY1 = pScr->virtualY - 1;
} }
} }
xf86EnterServerState(OPERATING); xf86UnblockSIGIO(was_blocked);
if (pScr->AdjustFrame) if (pScr->AdjustFrame)
(*pScr->AdjustFrame)(pScr->scrnIndex, pScr->frameX0, pScr->frameY0, 0); (*pScr->AdjustFrame)(pScr->scrnIndex, pScr->frameX0, pScr->frameY0, 0);

View File

@ -414,7 +414,8 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
static void static void
xf86VTSwitch(void) xf86VTSwitch(void)
{ {
int i, prevSIGIO; int i;
static int prevSIGIO;
InputInfoPtr pInfo; InputInfoPtr pInfo;
IHPtr ih; IHPtr ih;
@ -456,7 +457,8 @@ xf86VTSwitch(void)
DisableDevice(pInfo->dev, TRUE); DisableDevice(pInfo->dev, TRUE);
} }
} }
xf86EnterServerState(SETUP);
prevSIGIO = xf86BlockSIGIO();
for (i = 0; i < xf86NumScreens; i++) for (i = 0; i < xf86NumScreens; i++)
xf86Screens[i]->LeaveVT(i, 0); xf86Screens[i]->LeaveVT(i, 0);
@ -468,14 +470,11 @@ xf86VTSwitch(void)
*/ */
DebugF("xf86VTSwitch: Leave failed\n"); DebugF("xf86VTSwitch: Leave failed\n");
prevSIGIO = xf86BlockSIGIO();
xf86AccessEnter(); xf86AccessEnter();
xf86EnterServerState(SETUP);
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (!xf86Screens[i]->EnterVT(i, 0)) if (!xf86Screens[i]->EnterVT(i, 0))
FatalError("EnterVT failed for screen %d\n", i); FatalError("EnterVT failed for screen %d\n", i);
} }
xf86EnterServerState(OPERATING);
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)
@ -513,11 +512,9 @@ xf86VTSwitch(void)
xf86DisableIO(); xf86DisableIO();
} }
} else { } else {
DebugF("xf86VTSwitch: Entering\n"); DebugF("xf86VTSwitch: Entering\n");
if (!xf86VTSwitchTo()) return; if (!xf86VTSwitchTo()) return;
prevSIGIO = xf86BlockSIGIO();
#ifdef XF86PM #ifdef XF86PM
xf86OSPMClose = xf86OSPMOpen(); xf86OSPMClose = xf86OSPMOpen();
#endif #endif
@ -525,13 +522,11 @@ xf86VTSwitch(void)
if (xorgHWAccess) if (xorgHWAccess)
xf86EnableIO(); xf86EnableIO();
xf86AccessEnter(); xf86AccessEnter();
xf86EnterServerState(SETUP);
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
xf86Screens[i]->vtSema = TRUE; xf86Screens[i]->vtSema = TRUE;
if (!xf86Screens[i]->EnterVT(i, 0)) if (!xf86Screens[i]->EnterVT(i, 0))
FatalError("EnterVT failed for screen %d\n", i); FatalError("EnterVT failed for screen %d\n", i);
} }
xf86EnterServerState(OPERATING);
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->EnableDisableFBAccess) if (xf86Screens[i]->EnableDisableFBAccess)
(*xf86Screens[i]->EnableDisableFBAccess)(i, TRUE); (*xf86Screens[i]->EnableDisableFBAccess)(i, TRUE);

View File

@ -330,7 +330,7 @@ InstallSignalHandlers(void)
void void
InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv) InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
{ {
int i, j, k, scr_index; int i, j, k, scr_index, was_blocked = 0;
char **modulelist; char **modulelist;
pointer *optionlist; pointer *optionlist;
Pix24Flags screenpix24, pix24; Pix24Flags screenpix24, pix24;
@ -708,7 +708,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ); ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
#endif #endif
xf86AccessEnter(); xf86AccessEnter();
xf86EnterServerState(SETUP); was_blocked = xf86BlockSIGIO();
} }
} }
@ -779,7 +779,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
#endif #endif
} }
xf86PostScreenInit(); xf86VGAarbiterWrapFunctions();
xf86UnblockSIGIO(was_blocked);
xf86InitOrigins(); xf86InitOrigins();
@ -928,6 +929,8 @@ AbortDDX(void)
{ {
int i; int i;
xf86BlockSIGIO();
/* /*
* try to restore the original video state * try to restore the original video state
*/ */
@ -936,8 +939,6 @@ AbortDDX(void)
DPMSSet(serverClient, DPMSModeOn); DPMSSet(serverClient, DPMSModeOn);
#endif #endif
if (xf86Screens) { if (xf86Screens) {
if (xf86Screens[0]->vtSema)
xf86EnterServerState(SETUP);
for (i = 0; i < xf86NumScreens; i++) for (i = 0; i < xf86NumScreens; i++)
if (xf86Screens[i]->vtSema) { if (xf86Screens[i]->vtSema) {
/* /*

View File

@ -33,6 +33,7 @@
#include "xf86.h" #include "xf86.h"
#include "xf86Priv.h" #include "xf86Priv.h"
#include "xf86Xinput.h" #include "xf86Xinput.h"
#include "xf86_OSproc.h"
int (*xf86PMGetEventFromOs)(int fd,pmEvent *events,int num) = NULL; int (*xf86PMGetEventFromOs)(int fd,pmEvent *events,int num) = NULL;
pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event) = NULL; pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event) = NULL;
@ -61,6 +62,8 @@ eventName(pmEvent event, char **str)
} }
} }
static int sigio_blocked_for_suspend;
static void static void
suspend (pmEvent event, Bool undo) suspend (pmEvent event, Bool undo)
{ {
@ -76,7 +79,7 @@ suspend (pmEvent event, Bool undo)
DisableDevice(pInfo->dev, TRUE); DisableDevice(pInfo->dev, TRUE);
pInfo = pInfo->next; pInfo = pInfo->next;
} }
xf86EnterServerState(SETUP); sigio_blocked_for_suspend = xf86BlockSIGIO();
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->PMEvent) if (xf86Screens[i]->PMEvent)
xf86Screens[i]->PMEvent(i,event,undo); xf86Screens[i]->PMEvent(i,event,undo);
@ -96,7 +99,6 @@ resume(pmEvent event, Bool undo)
InputInfoPtr pInfo; InputInfoPtr pInfo;
xf86AccessEnter(); xf86AccessEnter();
xf86EnterServerState(SETUP);
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->PMEvent) if (xf86Screens[i]->PMEvent)
xf86Screens[i]->PMEvent(i,event,undo); xf86Screens[i]->PMEvent(i,event,undo);
@ -105,7 +107,7 @@ resume(pmEvent event, Bool undo)
xf86Screens[i]->EnterVT(i, 0); xf86Screens[i]->EnterVT(i, 0);
} }
} }
xf86EnterServerState(OPERATING); xf86UnblockSIGIO(sigio_blocked_for_suspend);
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->EnableDisableFBAccess) if (xf86Screens[i]->EnableDisableFBAccess)
(*xf86Screens[i]->EnableDisableFBAccess) (i, TRUE); (*xf86Screens[i]->EnableDisableFBAccess) (i, TRUE);
@ -121,12 +123,7 @@ resume(pmEvent event, Bool undo)
static void static void
DoApmEvent(pmEvent event, Bool undo) DoApmEvent(pmEvent event, Bool undo)
{ {
/* int i, was_blocked;
* we leave that as a global function for now. I don't know if
* this might cause problems in the future. It is a global server
* variable therefore it needs to be in a server info structure
*/
int i, setup = 0;
switch(event) { switch(event) {
#if 0 #if 0
@ -156,14 +153,13 @@ DoApmEvent(pmEvent event, Bool undo)
} }
break; break;
default: default:
was_blocked = xf86BlockSIGIO();
for (i = 0; i < xf86NumScreens; i++) { for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->PMEvent) { if (xf86Screens[i]->PMEvent) {
if (!setup) xf86EnterServerState(SETUP);
setup = 1;
xf86Screens[i]->PMEvent(i,event,undo); xf86Screens[i]->PMEvent(i,event,undo);
} }
} }
if (setup) xf86EnterServerState(OPERATING); xf86UnblockSIGIO(was_blocked);
break; break;
} }
} }

View File

@ -114,7 +114,6 @@ extern _X_EXPORT void xf86AccessLeave(void);
extern _X_EXPORT void xf86PostProbe(void); extern _X_EXPORT void xf86PostProbe(void);
extern _X_EXPORT void xf86ClearEntityListForScreen(int scrnIndex); extern _X_EXPORT void xf86ClearEntityListForScreen(int scrnIndex);
extern _X_EXPORT void xf86AddDevToEntity(int entityIndex, GDevPtr dev); extern _X_EXPORT void xf86AddDevToEntity(int entityIndex, GDevPtr dev);
extern _X_EXPORT void xf86PostScreenInit(void);
/* xf86Config.c */ /* xf86Config.c */

View File

@ -581,13 +581,6 @@ typedef struct _entityInfo {
DriverPtr driver; DriverPtr driver;
} EntityInfoRec, *EntityInfoPtr; } EntityInfoRec, *EntityInfoPtr;
/* server states */
typedef enum {
SETUP,
OPERATING
} xf86State;
/* DGA */ /* DGA */
typedef struct { typedef struct {