Re: 2.6.36/2.6.37: broken compatibility with userspace input-utils ?
From: Mark Lord <hidden>
Date: 2011-01-26 19:27:10
Also in:
linux-media, lkml
On 11-01-26 01:24 PM, Dmitry Torokhov wrote:
On Wed, Jan 26, 2011 at 03:29:09PM -0200, Mauro Carvalho Chehab wrote:quoted
Em 26-01-2011 14:51, Dmitry Torokhov escreveu:quoted
On Wed, Jan 26, 2011 at 12:18:29PM -0200, Mauro Carvalho Chehab wrote:quoted
diff --git a/input.c b/input.c index d57a31e..a9bd5e8 100644 --- a/input.c +++ b/input.c@@ -101,8 +101,8 @@ int device_open(int nr, int verbose) close(fd); return -1; } - if (EV_VERSION != version) { - fprintf(stderr, "protocol version mismatch (expected %d, got %d)\n", + if (EV_VERSION > version) { + fprintf(stderr, "protocol version mismatch (expected >= %d, got %d)\n", EV_VERSION, version);Please do not do this. It causes check to "float" depending on the version of kernel headers it was compiled against. The check should be against concrete version (0x10000 in this case).The idea here is to not prevent it to load if version is 0x10001. This is actually the only change that it is really needed (after applying your KEY_RESERVED patch to 2.6.37) for the tool to work. Reverting it causes the error:You did not understand. When comparing against EV_VERSION, if you compile on 2.6.32 you are comparing with 0x10000. If you are compiling on 2.6.37 you are comparing with 0x10001 as EV_VERSION value changes (not the value returned by EVIOCGVERSION, the value of the _define_ itself). The proper check is: #define EVDEV_MIN_VERSION 0x10000 if (version < EVDEV_MIN_VERSION) { fprintf(stderr, "protocol version mismatch (need at least %d, got %d)\n", EVDEV_MIN_VERSION, version); ... }
Guys, NO! The proper check is actually to remove all of that silly VERSION testing from the userspace binary. And then have it try EVIOCGKEYCODE_V2 first. If EVIOCGKEYCODE_V2 fails (-ENOTTY, -EINVAL, or -ENOSYS), then have it fall back to trying to use EVIOCGKEYCODE. Of course this does assume that the new EVIOCGKEYCODE_V2 interface uses correct ioctl return values.. Cheers