xserver-multidpi/hw/xfree86/common
Peter Hutterer d13cb97442 ddx: add new call to purge input devices that weren't added
Special case for the systemd-logind case in xfree86: when we're vt-switched
away and a device is plugged in, we get a paused fd from logind. Since we
can't probe the device or do anything with it, we store that device in the
xfree86 and handle it later when we vt-switch back. The device is not added to
inputInfo.devices until that time.

When the device is removed while still vt-switched away, the the config system
never notifies the DDX. It only runs through inputInfo.devices and our device
was never added to that.

When a device is plugged in, removed, and plugged in again while vt-switched
away, we have two entries in the xfree86-specific list that refer to the same
device node, both pending for addition later. On VT switch back, the first one
(the already removed one) will be added successfully, the second one (the
still plugged-in one) fails. Since the fd is correct, the device works until
it is removed again. The removed devices' config_info (i.e. the syspath)
doesn't match the actual device we addded tough (the input number increases
with each plug), it doesn't get removed, the fd remains open and we lose track
of the fd count. Plugging the device in again leads to a dead device.

Fix this by adding a call to notify the DDX to purge any remainders of devices
with the given config_info, that's the only identifiable bit we have at this
point.

https://bugs.freedesktop.org/show_bug.cgi?id=97928

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2016-10-26 15:35:07 +10:00
..
.gitignore .gitignore: use common defaults with custom section #24239 2009-11-11 21:40:20 -08:00
compiler.h xfree86: Use same inb/outb asm code for i386 amd64 and ia64 2015-10-26 11:24:22 -04:00
dgaproc.h dga: Hide a bunch of implementation details 2015-07-08 16:40:58 -04:00
extramodes Remove some default modes that really shouldn't be in the default set. 2008-06-24 10:40:36 -04:00
fourcc.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
Makefile.am vidmode: Remove stray vidmodeproc.h from EXTRA_DIST 2016-03-11 13:50:32 -05:00
modeline2c.awk Remove some OS/2 leftovers. 2009-04-06 10:58:47 -04:00
vesamodes Fix standard VESA modes. 2006-11-03 14:06:32 -08:00
xaarop.h xfree86: Drop some dead XAA decls from SDK headers 2012-07-25 14:03:31 -07:00
xf86.h xfree86: Provide xf86BlockSIGIO and xf86ReleaseSIGIO as wrappers for input mutex 2016-05-30 00:17:34 -07:00
xf86AutoConfig.c Autoconfig: Fix the loop adding dectected drivers to the list of screens 2016-08-15 12:43:43 -04:00
xf86Build.h.in Print the build time as well as the date if we can. 2007-06-04 02:03:44 -04:00
xf86Bus.c Fix Xorg -configure not working anymore 2016-08-18 14:29:53 -04:00
xf86Bus.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xf86cmap.c xfree86: Hook up colormaps and RandR 1.2 gamma code v6 2016-07-28 10:12:05 +09:00
xf86cmap.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xf86Config.c xfree86: remove aiglx cmd/xorg.conf option 2016-10-05 14:15:52 -04:00
xf86Config.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xf86Configure.c dix: Squash some new gcc6 warnings 2016-04-29 11:19:58 -04:00
xf86Cursor.c Remove SIGIO support for input [v5] 2016-05-26 16:07:54 -07:00
xf86DGA.c dga: Hide a bunch of implementation details 2015-07-08 16:40:58 -04:00
xf86DPMS.c xfree86: don't force the screensaver off on DPMS unblank, merely suggest it 2014-07-14 08:39:50 +10:00
xf86Events.c Remove fd_set from Block/Wakeup handler API 2016-07-18 15:27:51 -04:00
xf86Extensions.c vidmode: move to a separate library of its own 2016-02-29 16:29:01 -05:00
xf86Extensions.h xf86: Re-export extension disable flags 2012-07-16 18:24:49 -07:00
xf86fbBus.c xfree86: use udev to provide device enumeration for kms devices (v10) 2012-07-06 10:20:19 +01:00
xf86fbman.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86fbman.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xf86Globals.c xfree86: Remove xf86RegisterRootWindowProperty 2016-04-18 11:23:10 -04:00
xf86Helper.c xfree86: Hook up colormaps and RandR 1.2 gamma code v6 2016-07-28 10:12:05 +09:00
xf86Init.c xfree86: Set pScrn->pScreen before driver ScreenInit is called 2016-08-13 09:18:15 -07:00
xf86InPriv.h xfree86/common: Warning fixes. Mostly const string handling. 2014-01-12 10:14:48 -08:00
xf86Mode.c xfree86: Hide some pre-randr mode validation details 2015-07-08 16:40:57 -04:00
xf86Module.h Bump ABI versions to reflect block/wakeup handler API changes 2016-07-18 15:27:51 -04:00
xf86noBus.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xf86Opt.h xfree86/common: Warning fixes. Mostly const string handling. 2014-01-12 10:14:48 -08:00
xf86Option.c xfree86/common: Warning fixes. Mostly const string handling. 2014-01-12 10:14:48 -08:00
xf86Optionstr.h hw/xfree86: Lots of constant string support 2014-01-12 10:14:48 -08:00
xf86pciBus.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86pciBus.h xfree86: Make driver matching consistent 2014-07-07 16:11:00 -07:00
xf86PciInfo.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xf86platformBus.c config: fix GPUDevice fail when AutoAddGPU off + BusID 2016-09-28 14:53:39 -04:00
xf86platformBus.h xfree86: Fallback to first platform device as primary 2014-08-21 20:03:48 -05:00
xf86PM.c Remove SIGIO support for input [v5] 2016-05-26 16:07:54 -07:00
xf86Priv.h Remove fd_set from Block/Wakeup handler API 2016-07-18 15:27:51 -04:00
xf86Privstr.h xfree86: remove aiglx cmd/xorg.conf option 2016-10-05 14:15:52 -04:00
xf86RandR.c xfree86: Remove pointless xf86RandRCreateScreenResources 2014-07-29 09:53:01 -04:00
xf86sbusBus.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86sbusBus.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xf86str.h dix: Update some comments to reflect the new non-SIGIO input model 2016-06-08 11:36:32 -04:00
xf86VGAarbiter.c xfree86: vgaarb: Initialize local variable rsrc_decodes 2016-08-15 12:30:39 -04:00
xf86VGAarbiter.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xf86VGAarbiterPriv.h Remove readmask from screen block/wakeup handler 2016-07-18 15:27:51 -04:00
xf86VidMode.c vidmode: remove redundant DIX function 2016-02-29 16:29:14 -05:00
xf86Xinput.c ddx: add new call to purge input devices that weren't added 2016-10-26 15:35:07 +10:00
xf86Xinput.h Drop valuator mask argument from GetKeyboardEvents 2015-03-13 12:31:21 +10:00
xf86xv.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86xv.h xfree86: Remove xv clip notify driver hook 2014-09-26 15:27:18 -04:00
xf86xvmc.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86xvmc.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xf86xvpriv.h xfree86: Remove xv clip notify driver hook 2014-09-26 15:27:18 -04:00
xisb.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xisb.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xorgHelper.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xorgVersion.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00