Commit e2c64551 authored by Alan Coopersmith's avatar Alan Coopersmith Committed by Peter Hutterer

Add configuration option for use of SIGIO handlers for input events

Boolean option to enable/disable SIGIO handlers is set by the first
of these found:
  - UseSIGIO option is set in xorg.conf ServerFlags
  - Default set at build time by ./configure --enable-use-sigio-by-default
  - Platform default value: Solaris = no, all others = yes

This matches the current settings on all platforms except Solaris.
This reverts Solaris (for now) to the settings used in Xorg 1.6, before
SIGIO support for Solaris was added, due to some system level bugs that
won't be resolved in time for Xorg 1.7 release, but allows us to enable
when those are resolved (or when we need to test if they're resolved).
See http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6879897Signed-off-by: default avatarAlan Coopersmith <alan.coopersmith@sun.com>
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent 3bdf3647
......@@ -379,6 +379,7 @@ AM_CONDITIONAL(PPC_VIDEO, [test "x$PPC_VIDEO" = xyes])
AM_CONDITIONAL(SPARC64_VIDEO, [test "x$SPARC64_VIDEO" = xyes])
DRI=no
USE_SIGIO_BY_DEFAULT="yes"
dnl it would be nice to autodetect these *CONS_SUPPORTs
case $host_os in
*freebsd* | *dragonfly*)
......@@ -408,6 +409,9 @@ case $host_os in
;;
*solaris*)
PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
# Disable use of SIGIO by default until some system bugs are
# fixed - see Sun/OpenSolaris bug id 6879897
USE_SIGIO_BY_DEFAULT="no"
;;
darwin*)
AC_DEFINE(CSRG_BASED, 1, [System is BSD-like])
......@@ -442,6 +446,9 @@ AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],
AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests],
[Enable unit-tests (default: auto)]),
[UNITTESTS=$enableval], [UNITTESTS=auto])
AC_ARG_ENABLE(sigio-default, AS_HELP_STRING([--enable-use-sigio-by-default]
[Enable SIGIO input handlers by default (default: $USE_SIGIO_BY_DEFAULT)]),
[USE_SIGIO_BY_DEFAULT=$enableval], [])
AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]),
[INT10="$withval"],
[INT10="$DEFAULT_INT10"])
......@@ -485,6 +492,7 @@ esac
AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
[ FONTPATH="$withval" ],
[ FONTPATH="${DEFAULT_FONT_PATH}" ])
AC_ARG_WITH(xkb-path, AS_HELP_STRING([--with-xkb-path=PATH], [Path to XKB base dir (default: ${datadir}/X11/xkb)]),
[ XKBPATH="$withval" ],
[ XKBPATH="${datadir}/X11/xkb" ])
......@@ -756,6 +764,14 @@ fi
AM_CONDITIONAL(CONFIG_NEED_DBUS, [test "x$CONFIG_NEED_DBUS" = xyes])
CONFIG_LIB='$(top_builddir)/config/libconfig.la'
if test "x$USE_SIGIO_BY_DEFAULT" = xyes; then
USE_SIGIO_BY_DEFAULT_VALUE=TRUE
else
USE_SIGIO_BY_DEFAULT_VALUE=FALSE
fi
AC_DEFINE_UNQUOTED([USE_SIGIO_BY_DEFAULT], [$USE_SIGIO_BY_DEFAULT_VALUE],
[Use SIGIO handlers for input device events by default])
AC_MSG_CHECKING([for glibc...])
AC_PREPROC_IFELSE([
#include <features.h>
......
......@@ -708,6 +708,7 @@ typedef enum {
FLAG_AUTO_ENABLE_DEVICES,
FLAG_GLX_VISUALS,
FLAG_DRI2,
FLAG_USE_SIGIO
} FlagValues;
static OptionInfoRec FlagOptions[] = {
......@@ -765,6 +766,8 @@ static OptionInfoRec FlagOptions[] = {
{0}, FALSE },
{ FLAG_DRI2, "DRI2", OPTV_BOOLEAN,
{0}, FALSE },
{ FLAG_USE_SIGIO, "UseSIGIO", OPTV_BOOLEAN,
{0}, USE_SIGIO_BY_DEFAULT },
{ -1, NULL, OPTV_NONE,
{0}, FALSE },
};
......@@ -832,6 +835,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
xf86Msg(X_CONFIG, "Ignoring ABI Version\n");
}
if (xf86SIGIOSupported()) {
xf86GetOptValBool(FlagOptions, FLAG_USE_SIGIO, &xf86Info.useSIGIO);
if (xf86IsOptionSet(FlagOptions, FLAG_USE_SIGIO)) {
from = X_CONFIG;
} else {
from = X_DEFAULT;
}
if (!xf86Info.useSIGIO) {
xf86Msg(from, "Disabling SIGIO handlers for input devices\n");
} else if (from == X_CONFIG) {
xf86Msg(from, "Enabling SIGIO handlers for input devices\n");
}
} else {
xf86Info.useSIGIO = FALSE;
}
if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_ADD_DEVICES)) {
xf86GetOptValBool(FlagOptions, FLAG_AUTO_ADD_DEVICES,
&xf86Info.autoAddDevices);
......
......@@ -2312,7 +2312,7 @@ xf86SetSilkenMouse (ScreenPtr pScreen)
* yet. Should handle this differently so that alternate async methods
* work correctly with this too.
*/
pScrn->silkenMouse = useSM && xf86SIGIOSupported();
pScrn->silkenMouse = useSM && xf86Info.useSIGIO && xf86SIGIOSupported();
if (serverGeneration == 1)
xf86DrvMsg(pScreen->myNum, from, "Silken mouse %s\n",
pScrn->silkenMouse ? "enabled" : "disabled");
......
......@@ -87,6 +87,8 @@ typedef struct {
Bool miscModInDevEnabled; /* Allow input devices to be
* changed */
Bool miscModInDevAllowNonLocal;
Bool useSIGIO; /* Use SIGIO for handling
input device events */
Pix24Flags pixmap24;
MessageType pix24From;
#ifdef __i386__
......
......@@ -450,6 +450,15 @@ core file.
In general you never want to use this option unless you are debugging an __xservername__
server problem and know how to deal with the consequences.
.TP 7
.BI "Option \*qUseSIGIO\*q \*q" boolean \*q
This controls whether the __xservername__ server requests that events from
input devices be reported via a SIGIO signal handler (also known as SIGPOLL
on some platforms), or only reported via the standard select(3) loop.
The default behaviour is platform specific. In general you do not want to
use this option unless you are debugging the __xservername__ server, or
working around a specific bug until it is fixed, and understand the
consequences.
.TP 7
.BI "Option \*qDontVTSwitch\*q \*q" boolean \*q
This disallows the use of the
.BI Ctrl+Alt+F n
......
......@@ -145,6 +145,9 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure)
int blocked;
int installed = FALSE;
if (!xf86Info.useSIGIO)
return 0;
for (i = 0; i < MAX_FUNCS; i++)
{
if (!xf86SigIOFuncs[i].f)
......@@ -216,6 +219,9 @@ xf86RemoveSIGIOHandler(int fd)
int maxfd;
int ret;
if (!xf86Info.useSIGIO)
return 0;
max = 0;
maxfd = -1;
ret = 0;
......
......@@ -130,4 +130,7 @@
/* Path to text files containing PCI IDs */
#undef PCI_TXT_IDS_PATH
/* Use SIGIO handlers for input device events by default */
#undef USE_SIGIO_BY_DEFAULT
#endif /* _XORG_CONFIG_H_ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment