rpms/xorg-x11-drv-evdev/devel evdev-2.0.4-cache-info.patch, 1.1, 1.2 evdev-2.0.4-reopen-device.patch, 1.1, 1.2 xorg-x11-drv-evdev.spec, 1.30, 1.31
Adam Jackson
ajax at fedoraproject.org
Fri Sep 12 20:08:53 UTC 2008
Author: ajax
Update of /cvs/pkgs/rpms/xorg-x11-drv-evdev/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv12800
Modified Files:
evdev-2.0.4-cache-info.patch evdev-2.0.4-reopen-device.patch
xorg-x11-drv-evdev.spec
Log Message:
* Fri Sep 12 2008 Adam Jackson <ajax at redhat.com> 2.0.4-3
- evdev-2.0.4-reopen-device.patch: When arming the reopen timer, stash it in
the driver private, and explicitly cancel it if the server decides to
close the device for real.
- evdev-2.0.4-cache-info.patch: Rebase to account for same.
evdev-2.0.4-cache-info.patch:
Index: evdev-2.0.4-cache-info.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-evdev/devel/evdev-2.0.4-cache-info.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- evdev-2.0.4-cache-info.patch 28 Aug 2008 02:26:38 -0000 1.1
+++ evdev-2.0.4-cache-info.patch 12 Sep 2008 20:08:52 -0000 1.2
@@ -1,25 +1,6 @@
-From 441a97c22933db462dd53e000d1cb269dab6e825 Mon Sep 17 00:00:00 2001
-From: Peter Hutterer <peter.hutterer at redhat.com>
-Date: Thu, 28 Aug 2008 10:29:26 +0930
-Subject: [PATCH] Cache device information and compare against info after re-open.
-
-This way we ensure that if the topology changes under us, we don't open a
-completely different device. If a device has changed, we disable it.
-(cherry picked from commit 3bb7d100570134058eb4c906d4902c655148a8be)
-
-Conflicts:
-
- src/evdev.c
- src/evdev.h
----
- src/evdev.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
- src/evdev.h | 12 +++++
- 2 files changed, 137 insertions(+), 6 deletions(-)
-
-diff --git a/src/evdev.c b/src/evdev.c
-index 16cf67f..ca6da6e 100644
---- a/src/evdev.c
-+++ b/src/evdev.c
+diff -up xf86-input-evdev-2.0.4/src/evdev.c.jx xf86-input-evdev-2.0.4/src/evdev.c
+--- xf86-input-evdev-2.0.4/src/evdev.c.jx 2008-09-12 16:04:34.000000000 -0400
++++ xf86-input-evdev-2.0.4/src/evdev.c 2008-09-12 16:04:56.000000000 -0400
@@ -98,6 +98,7 @@ static const char *evdevDefaults[] = {
};
@@ -28,7 +9,7 @@
static void
SetXkbOption(InputInfoPtr pInfo, char *name, char **option)
-@@ -176,11 +177,19 @@ EvdevReopenTimer(OsTimerPtr timer, CARD32 time, pointer arg)
+@@ -176,12 +177,19 @@ EvdevReopenTimer(OsTimerPtr timer, CARD3
if (pInfo->fd != -1)
{
@@ -36,8 +17,8 @@
- pEvdev->reopen_attempts - pEvdev->reopen_left);
-
pEvdev->reopen_left = 0;
+ pEvdev->reopen_timer = NULL;
- EvdevOn(pInfo->dev);
-+
+ if (EvdevCacheCompare(pInfo, TRUE) == Success)
+ {
+ xf86Msg(X_INFO, "%s: Device reopened after %d attempts.\n", pInfo->name,
@@ -52,7 +33,7 @@
return 0;
}
-@@ -368,8 +377,6 @@ EvdevReadInput(InputInfoPtr pInfo)
+@@ -370,8 +378,6 @@ EvdevReadInput(InputInfoPtr pInfo)
}
}
@@ -61,7 +42,7 @@
#define TestBit(bit, array) (array[(bit) / LONG_BITS]) & (1 << ((bit) % LONG_BITS))
static void
-@@ -994,6 +1001,116 @@ EvdevConvert(InputInfoPtr pInfo, int first, int num, int v0, int v1, int v2,
+@@ -1000,6 +1006,116 @@ EvdevConvert(InputInfoPtr pInfo, int fir
return TRUE;
}
@@ -178,7 +159,7 @@
static int
EvdevProbe(InputInfoPtr pInfo)
{
-@@ -1173,6 +1290,8 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
+@@ -1179,6 +1295,8 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr
return NULL;
}
@@ -187,10 +168,9 @@
return pInfo;
}
-diff --git a/src/evdev.h b/src/evdev.h
-index 0f8cf4b..47bbff2 100644
---- a/src/evdev.h
-+++ b/src/evdev.h
+diff -up xf86-input-evdev-2.0.4/src/evdev.h.jx xf86-input-evdev-2.0.4/src/evdev.h
+--- xf86-input-evdev-2.0.4/src/evdev.h.jx 2008-09-12 16:04:34.000000000 -0400
++++ xf86-input-evdev-2.0.4/src/evdev.h 2008-09-12 16:04:56.000000000 -0400
@@ -40,6 +40,9 @@
#include <X11/extensions/XKBstr.h>
#endif
@@ -201,10 +181,10 @@
typedef struct {
const char *device;
int kernel24;
-@@ -71,6 +74,15 @@ typedef struct {
-
+@@ -72,6 +75,15 @@ typedef struct {
int reopen_attempts; /* max attempts to re-open after read failure */
int reopen_left; /* number of attempts left to re-open the device */
+ OsTimerPtr reopen_timer;
+
+ /* Cached info from device. */
+ char name[1024];
@@ -217,6 +197,3 @@
} EvdevRec, *EvdevPtr;
/* Middle Button emulation */
---
-1.5.6.4
-
evdev-2.0.4-reopen-device.patch:
Index: evdev-2.0.4-reopen-device.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-evdev/devel/evdev-2.0.4-reopen-device.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- evdev-2.0.4-reopen-device.patch 28 Aug 2008 02:26:38 -0000 1.1
+++ evdev-2.0.4-reopen-device.patch 12 Sep 2008 20:08:52 -0000 1.2
@@ -1,31 +1,6 @@
-From 188f07089d9c91d503391d05f0c3776360d7446b Mon Sep 17 00:00:00 2001
-From: Peter Hutterer <peter.hutterer at redhat.com>
-Date: Thu, 28 Aug 2008 10:24:33 +0930
-Subject: [PATCH] Attempt to re-open devices on read errors.
-
-Coming back from resume may leave us with a file descriptor that can be opened
-but fails on the first read (ENODEV).
-In this case, try to open the device until it becomes available or until the
-predefined count expires.
-
-Adds option "ReopenAttempts" <int>
-(cherry picked from commit b41d39a745cce9e91241453935ea4c702772c5da)
-
-Conflicts:
-
- man/evdev.man
- src/evdev.c
- src/evdev.h
----
- man/evdev.man | 5 ++
- src/evdev.c | 130 ++++++++++++++++++++++++++++++++++++++++++++++++--------
- src/evdev.h | 4 ++
- 3 files changed, 120 insertions(+), 19 deletions(-)
-
-diff --git a/man/evdev.man b/man/evdev.man
-index f438f78..530f979 100644
---- a/man/evdev.man
-+++ b/man/evdev.man
+diff -up xf86-input-evdev-2.0.4/man/evdev.man.reopen-device xf86-input-evdev-2.0.4/man/evdev.man
+--- xf86-input-evdev-2.0.4/man/evdev.man.reopen-device 2008-08-14 22:27:13.000000000 -0400
++++ xf86-input-evdev-2.0.4/man/evdev.man 2008-09-12 15:45:50.000000000 -0400
@@ -67,6 +67,11 @@ button event is registered.
Sets the timeout (in milliseconds) that the driver waits before deciding
if two buttons where pressed "simultaneously" when 3 button emulation is
@@ -38,10 +13,9 @@
.SH AUTHORS
Kristian Høgsberg.
.SH "SEE ALSO"
-diff --git a/src/evdev.c b/src/evdev.c
-index a857db3..16cf67f 100644
---- a/src/evdev.c
-+++ b/src/evdev.c
+diff -up xf86-input-evdev-2.0.4/src/evdev.c.reopen-device xf86-input-evdev-2.0.4/src/evdev.c
+--- xf86-input-evdev-2.0.4/src/evdev.c.reopen-device 2008-08-14 22:27:13.000000000 -0400
++++ xf86-input-evdev-2.0.4/src/evdev.c 2008-09-12 15:55:42.000000000 -0400
@@ -73,6 +73,7 @@
#define EVDEV_RELATIVE_EVENTS (1 << 2)
#define EVDEV_ABSOLUTE_EVENTS (1 << 3)
@@ -59,7 +33,7 @@
static void
SetXkbOption(InputInfoPtr pInfo, char *name, char **option)
{
-@@ -154,6 +157,46 @@ PostKbdEvent(InputInfoPtr pInfo, struct input_event *ev, int value)
+@@ -154,6 +157,48 @@ PostKbdEvent(InputInfoPtr pInfo, struct
xf86PostKeyboardEvent(pInfo->dev, code, value);
}
@@ -86,6 +60,7 @@
+ pEvdev->reopen_attempts - pEvdev->reopen_left);
+
+ pEvdev->reopen_left = 0;
++ pEvdev->reopen_timer = NULL;
+ EvdevOn(pInfo->dev);
+ return 0;
+ }
@@ -97,6 +72,7 @@
+ xf86Msg(X_ERROR, "%s: Failed to reopen device after %d attempts.\n",
+ pInfo->name, pEvdev->reopen_attempts);
+ DisableDevice(pInfo->dev);
++ pEvdev->reopen_timer = NULL;
+ return 0;
+ }
+
@@ -106,7 +82,7 @@
static void
EvdevReadInput(InputInfoPtr pInfo)
{
-@@ -173,6 +216,15 @@ EvdevReadInput(InputInfoPtr pInfo)
+@@ -173,6 +218,15 @@ EvdevReadInput(InputInfoPtr pInfo)
/* The kernel promises that we always only read a complete
* event, so len != sizeof ev is an error. */
xf86Msg(X_ERROR, "%s: Read error: %s\n", pInfo->name, strerror(errno));
@@ -117,12 +93,12 @@
+ close(pInfo->fd);
+ pInfo->fd = -1;
+ pEvdev->reopen_left = pEvdev->reopen_attempts;
-+ TimerSet(NULL, 0, 100, EvdevReopenTimer, pInfo);
++ pEvdev->reopen_timer = TimerSet(NULL, 0, 100, EvdevReopenTimer, pInfo);
+ }
break;
}
-@@ -836,6 +888,47 @@ EvdevInit(DeviceIntPtr device)
+@@ -836,6 +890,47 @@ EvdevInit(DeviceIntPtr device)
return Success;
}
@@ -150,7 +126,7 @@
+ close(pInfo->fd);
+ pInfo->fd = -1;
+ pEvdev->reopen_left = pEvdev->reopen_attempts;
-+ TimerSet(NULL, 0, 100, EvdevReopenTimer, pInfo);
++ pEvdev->reopen_timer = TimerSet(NULL, 0, 100, EvdevReopenTimer, pInfo);
+ } else
+ {
+ xf86AddEnabledDevice(pInfo);
@@ -170,7 +146,7 @@
static int
EvdevProc(DeviceIntPtr device, int what)
{
-@@ -851,30 +944,26 @@ EvdevProc(DeviceIntPtr device, int what)
+@@ -851,30 +946,30 @@ EvdevProc(DeviceIntPtr device, int what)
return EvdevInit(device);
case DEVICE_ON:
@@ -209,12 +185,16 @@
case DEVICE_CLOSE:
xf86Msg(X_INFO, "%s: Close\n", pInfo->name);
- close(pInfo->fd);
++ if (pEvdev->reopen_timer) {
++ TimerCancel(pEvdev->reopen_timer);
++ pEvdev->reopen_timer = NULL;
++ }
+ if (pInfo->fd != -1)
+ close(pInfo->fd);
break;
}
-@@ -1060,11 +1149,12 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
+@@ -1060,11 +1155,12 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr
return NULL;
}
@@ -229,7 +209,7 @@
if (pInfo->fd < 0) {
xf86Msg(X_ERROR, "Unable to open evdev device \"%s\".\n", device);
-@@ -1072,6 +1162,8 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags)
+@@ -1072,6 +1168,8 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr
return NULL;
}
@@ -238,10 +218,9 @@
pEvdev->noXkb = noXkbExtension;
/* parse the XKB options during kbd setup */
-diff --git a/src/evdev.h b/src/evdev.h
-index cad1eed..0f8cf4b 100644
---- a/src/evdev.h
-+++ b/src/evdev.h
+diff -up xf86-input-evdev-2.0.4/src/evdev.h.reopen-device xf86-input-evdev-2.0.4/src/evdev.h
+--- xf86-input-evdev-2.0.4/src/evdev.h.reopen-device 2008-08-14 22:27:13.000000000 -0400
++++ xf86-input-evdev-2.0.4/src/evdev.h 2008-09-12 15:55:44.000000000 -0400
@@ -41,6 +41,7 @@
#endif
@@ -250,16 +229,14 @@
int kernel24;
int screen;
int min_x, min_y, max_x, max_y;
-@@ -67,6 +68,9 @@ typedef struct {
+@@ -67,6 +68,10 @@ typedef struct {
Time expires; /* time of expiry */
Time timeout;
} emulateMB;
+
+ int reopen_attempts; /* max attempts to re-open after read failure */
+ int reopen_left; /* number of attempts left to re-open the device */
++ OsTimerPtr reopen_timer;
} EvdevRec, *EvdevPtr;
/* Middle Button emulation */
---
-1.5.6.4
-
Index: xorg-x11-drv-evdev.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-evdev/devel/xorg-x11-drv-evdev.spec,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- xorg-x11-drv-evdev.spec 28 Aug 2008 02:26:38 -0000 1.30
+++ xorg-x11-drv-evdev.spec 12 Sep 2008 20:08:52 -0000 1.31
@@ -7,7 +7,7 @@
Summary: Xorg X11 evdev input driver
Name: xorg-x11-drv-evdev
Version: 2.0.4
-Release: 2%{?dist}
+Release: 3%{?dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X Hardware Support
@@ -35,8 +35,8 @@
%setup -q -n %{tarball}-%{version}
# apply patches
-%patch1 -p1 -b .reopen-device.patch
-%patch2 -p1 -b .cache-info.patch
+%patch1 -p1 -b .reopen-device
+%patch2 -p1 -b .cache-info
%build
autoreconf -v --install || exit 1
@@ -61,6 +61,12 @@
%{_mandir}/man4/evdev.4*
%changelog
+* Fri Sep 12 2008 Adam Jackson <ajax at redhat.com> 2.0.4-3
+- evdev-2.0.4-reopen-device.patch: When arming the reopen timer, stash it in
+ the driver private, and explicitly cancel it if the server decides to
+ close the device for real.
+- evdev-2.0.4-cache-info.patch: Rebase to account for same.
+
* Thu Aug 28 2008 Peter Hutterer <peter.hutterer at redhat.com> 2.0.4-2
- evdev-2.0.4-reopen-device.patch: try to reopen devices if a read error
occurs on the fd.
More information about the fedora-extras-commits
mailing list