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:
parent
a04e74cb48
commit
ce13a1dbbf
|
@ -135,7 +135,6 @@ extern _X_EXPORT EntityInfoPtr xf86GetEntityInfo(int entityIndex);
|
|||
extern _X_EXPORT Bool xf86SetEntityFuncs(int entityIndex, EntityProc init,
|
||||
EntityProc enter, EntityProc leave, pointer);
|
||||
extern _X_EXPORT Bool xf86IsEntityPrimary(int entityIndex);
|
||||
extern _X_EXPORT void xf86EnterServerState(xf86State state);
|
||||
extern _X_EXPORT ScrnInfoPtr xf86FindScreenForEntity(int entityIndex);
|
||||
|
||||
extern _X_EXPORT int xf86GetLastScrnFlag(int entityIndex);
|
||||
|
|
|
@ -496,32 +496,6 @@ xf86AccessLeave(void)
|
|||
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
|
||||
* This function gets called by xf86Init().
|
||||
|
@ -544,13 +518,6 @@ xf86PostProbe(void)
|
|||
xf86Entities[i]->entityInit(i,xf86Entities[i]->private);
|
||||
}
|
||||
|
||||
void
|
||||
xf86PostScreenInit(void)
|
||||
{
|
||||
xf86VGAarbiterWrapFunctions();
|
||||
xf86EnterServerState(OPERATING);
|
||||
}
|
||||
|
||||
int
|
||||
xf86GetLastScrnFlag(int entityIndex)
|
||||
{
|
||||
|
|
|
@ -202,7 +202,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
|
|||
ScrnInfoPtr pScr = XF86SCRNINFO(pScreen);
|
||||
ScreenPtr pCursorScreen;
|
||||
Bool Switched;
|
||||
int px, py;
|
||||
int px, py, was_blocked;
|
||||
DeviceIntPtr dev, it;
|
||||
|
||||
if (!pScr->vtSema || !mode || !pScr->SwitchMode)
|
||||
|
@ -232,7 +232,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
|
|||
if (pScreen == pCursorScreen)
|
||||
miPointerGetPosition(dev, &px, &py);
|
||||
|
||||
xf86EnterServerState(SETUP);
|
||||
was_blocked = xf86BlockSIGIO();
|
||||
Switched = (*pScr->SwitchMode)(pScr->scrnIndex, mode, 0);
|
||||
if (Switched) {
|
||||
pScr->currentMode = mode;
|
||||
|
@ -269,7 +269,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
|
|||
pScr->frameY1 = pScr->virtualY - 1;
|
||||
}
|
||||
}
|
||||
xf86EnterServerState(OPERATING);
|
||||
xf86UnblockSIGIO(was_blocked);
|
||||
|
||||
if (pScr->AdjustFrame)
|
||||
(*pScr->AdjustFrame)(pScr->scrnIndex, pScr->frameX0, pScr->frameY0, 0);
|
||||
|
|
|
@ -414,7 +414,8 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
|
|||
static void
|
||||
xf86VTSwitch(void)
|
||||
{
|
||||
int i, prevSIGIO;
|
||||
int i;
|
||||
static int prevSIGIO;
|
||||
InputInfoPtr pInfo;
|
||||
IHPtr ih;
|
||||
|
||||
|
@ -456,7 +457,8 @@ xf86VTSwitch(void)
|
|||
DisableDevice(pInfo->dev, TRUE);
|
||||
}
|
||||
}
|
||||
xf86EnterServerState(SETUP);
|
||||
|
||||
prevSIGIO = xf86BlockSIGIO();
|
||||
for (i = 0; i < xf86NumScreens; i++)
|
||||
xf86Screens[i]->LeaveVT(i, 0);
|
||||
|
||||
|
@ -468,14 +470,11 @@ xf86VTSwitch(void)
|
|||
*/
|
||||
|
||||
DebugF("xf86VTSwitch: Leave failed\n");
|
||||
prevSIGIO = xf86BlockSIGIO();
|
||||
xf86AccessEnter();
|
||||
xf86EnterServerState(SETUP);
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (!xf86Screens[i]->EnterVT(i, 0))
|
||||
FatalError("EnterVT failed for screen %d\n", i);
|
||||
}
|
||||
xf86EnterServerState(OPERATING);
|
||||
if (!(dispatchException & DE_TERMINATE)) {
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (xf86Screens[i]->EnableDisableFBAccess)
|
||||
|
@ -513,11 +512,9 @@ xf86VTSwitch(void)
|
|||
xf86DisableIO();
|
||||
}
|
||||
} else {
|
||||
|
||||
DebugF("xf86VTSwitch: Entering\n");
|
||||
if (!xf86VTSwitchTo()) return;
|
||||
|
||||
prevSIGIO = xf86BlockSIGIO();
|
||||
#ifdef XF86PM
|
||||
xf86OSPMClose = xf86OSPMOpen();
|
||||
#endif
|
||||
|
@ -525,13 +522,11 @@ xf86VTSwitch(void)
|
|||
if (xorgHWAccess)
|
||||
xf86EnableIO();
|
||||
xf86AccessEnter();
|
||||
xf86EnterServerState(SETUP);
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
xf86Screens[i]->vtSema = TRUE;
|
||||
if (!xf86Screens[i]->EnterVT(i, 0))
|
||||
FatalError("EnterVT failed for screen %d\n", i);
|
||||
}
|
||||
xf86EnterServerState(OPERATING);
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (xf86Screens[i]->EnableDisableFBAccess)
|
||||
(*xf86Screens[i]->EnableDisableFBAccess)(i, TRUE);
|
||||
|
|
|
@ -330,7 +330,7 @@ InstallSignalHandlers(void)
|
|||
void
|
||||
InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
|
||||
{
|
||||
int i, j, k, scr_index;
|
||||
int i, j, k, scr_index, was_blocked = 0;
|
||||
char **modulelist;
|
||||
pointer *optionlist;
|
||||
Pix24Flags screenpix24, pix24;
|
||||
|
@ -708,7 +708,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
|
|||
ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
|
||||
#endif
|
||||
xf86AccessEnter();
|
||||
xf86EnterServerState(SETUP);
|
||||
was_blocked = xf86BlockSIGIO();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -779,7 +779,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
|
|||
#endif
|
||||
}
|
||||
|
||||
xf86PostScreenInit();
|
||||
xf86VGAarbiterWrapFunctions();
|
||||
xf86UnblockSIGIO(was_blocked);
|
||||
|
||||
xf86InitOrigins();
|
||||
|
||||
|
@ -928,6 +929,8 @@ AbortDDX(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
xf86BlockSIGIO();
|
||||
|
||||
/*
|
||||
* try to restore the original video state
|
||||
*/
|
||||
|
@ -936,8 +939,6 @@ AbortDDX(void)
|
|||
DPMSSet(serverClient, DPMSModeOn);
|
||||
#endif
|
||||
if (xf86Screens) {
|
||||
if (xf86Screens[0]->vtSema)
|
||||
xf86EnterServerState(SETUP);
|
||||
for (i = 0; i < xf86NumScreens; i++)
|
||||
if (xf86Screens[i]->vtSema) {
|
||||
/*
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "xf86.h"
|
||||
#include "xf86Priv.h"
|
||||
#include "xf86Xinput.h"
|
||||
#include "xf86_OSproc.h"
|
||||
|
||||
int (*xf86PMGetEventFromOs)(int fd,pmEvent *events,int num) = 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
|
||||
suspend (pmEvent event, Bool undo)
|
||||
{
|
||||
|
@ -76,7 +79,7 @@ suspend (pmEvent event, Bool undo)
|
|||
DisableDevice(pInfo->dev, TRUE);
|
||||
pInfo = pInfo->next;
|
||||
}
|
||||
xf86EnterServerState(SETUP);
|
||||
sigio_blocked_for_suspend = xf86BlockSIGIO();
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (xf86Screens[i]->PMEvent)
|
||||
xf86Screens[i]->PMEvent(i,event,undo);
|
||||
|
@ -96,7 +99,6 @@ resume(pmEvent event, Bool undo)
|
|||
InputInfoPtr pInfo;
|
||||
|
||||
xf86AccessEnter();
|
||||
xf86EnterServerState(SETUP);
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (xf86Screens[i]->PMEvent)
|
||||
xf86Screens[i]->PMEvent(i,event,undo);
|
||||
|
@ -105,7 +107,7 @@ resume(pmEvent event, Bool undo)
|
|||
xf86Screens[i]->EnterVT(i, 0);
|
||||
}
|
||||
}
|
||||
xf86EnterServerState(OPERATING);
|
||||
xf86UnblockSIGIO(sigio_blocked_for_suspend);
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (xf86Screens[i]->EnableDisableFBAccess)
|
||||
(*xf86Screens[i]->EnableDisableFBAccess) (i, TRUE);
|
||||
|
@ -121,12 +123,7 @@ resume(pmEvent event, Bool undo)
|
|||
static void
|
||||
DoApmEvent(pmEvent event, Bool undo)
|
||||
{
|
||||
/*
|
||||
* 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;
|
||||
int i, was_blocked;
|
||||
|
||||
switch(event) {
|
||||
#if 0
|
||||
|
@ -156,14 +153,13 @@ DoApmEvent(pmEvent event, Bool undo)
|
|||
}
|
||||
break;
|
||||
default:
|
||||
was_blocked = xf86BlockSIGIO();
|
||||
for (i = 0; i < xf86NumScreens; i++) {
|
||||
if (xf86Screens[i]->PMEvent) {
|
||||
if (!setup) xf86EnterServerState(SETUP);
|
||||
setup = 1;
|
||||
xf86Screens[i]->PMEvent(i,event,undo);
|
||||
}
|
||||
}
|
||||
if (setup) xf86EnterServerState(OPERATING);
|
||||
xf86UnblockSIGIO(was_blocked);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,7 +114,6 @@ extern _X_EXPORT void xf86AccessLeave(void);
|
|||
extern _X_EXPORT void xf86PostProbe(void);
|
||||
extern _X_EXPORT void xf86ClearEntityListForScreen(int scrnIndex);
|
||||
extern _X_EXPORT void xf86AddDevToEntity(int entityIndex, GDevPtr dev);
|
||||
extern _X_EXPORT void xf86PostScreenInit(void);
|
||||
|
||||
/* xf86Config.c */
|
||||
|
||||
|
|
|
@ -581,13 +581,6 @@ typedef struct _entityInfo {
|
|||
DriverPtr driver;
|
||||
} EntityInfoRec, *EntityInfoPtr;
|
||||
|
||||
/* server states */
|
||||
|
||||
typedef enum {
|
||||
SETUP,
|
||||
OPERATING
|
||||
} xf86State;
|
||||
|
||||
/* DGA */
|
||||
|
||||
typedef struct {
|
||||
|
|
Loading…
Reference in New Issue
Block a user