public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Mark Lord <kernel@teksavvy.com>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	linux-input@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: 2.6.36/2.6.37: broken compatibility with userspace input-utils ?
Date: Tue, 25 Jan 2011 18:00:03 -0800	[thread overview]
Message-ID: <20110126020003.GA23085@core.coreip.homeip.net> (raw)
In-Reply-To: <20110125232914.GA20130@core.coreip.homeip.net>

On Tue, Jan 25, 2011 at 03:29:14PM -0800, Dmitry Torokhov wrote:
> On Tue, Jan 25, 2011 at 05:22:09PM -0500, Mark Lord wrote:
> > On 11-01-25 05:00 PM, Mauro Carvalho Chehab wrote:
> > > Em 25-01-2011 18:54, Dmitry Torokhov escreveu:
> > >> On Wed, Jan 26, 2011 at 06:09:45AM +1000, Linus Torvalds wrote:
> > >>> On Wed, Jan 26, 2011 at 2:48 AM, Dmitry Torokhov
> > >>> <dmitry.torokhov@gmail.com> wrote:
> > >>>>
> > >>>> We should be able to handle the case where scancode is valid even though
> > >>>> it might be unmapped yet. This is regardless of what version of
> > >>>> EVIOCGKEYCODE we use, 1 or 2, and whether it is sparse keymap or not.
> > >>>>
> > >>>> Is it possible to validate the scancode by driver?
> > >>>
> > >>> More appropriately, why not just revert the thing? The version change
> > > 
> > > Reverting the version increment is a bad thing. I agree with Dmitry that
> > > an application that fails just because the API version were incremented
> > > is buggy.
> > > 
> > >> Well, then we'll break Ubuntu again as they recompiled their input-utils
> > >> package (without fixing the check). And the rest of distros do not seem
> > >> to be using that package...
> > > 
> > > Reverting it will also break the ir-keytable userspace program that it is
> > > meant to be used by the Remote Controller devices, and uses it to adjust
> > > its behaviour to support RC's with more than 16 bits of scancodes.
> > > 
> > > I agree that it is bad that the ABI broke, but reverting it will cause even
> > > more damage.
> > 
> > There we disagree.  Sure it's a very poorly thought out interface,
> > but the way to fix it is to put a new one along side the old,
> > and put the old back the way it was before it got broken.
> > 
> > I'm not making a fuss here for myself -- I'm more than capable of working
> > around new kernel bugs like these, but for every person like me there are
> > likely hundreds of others who simply get frustrated and give up.
> > 
> > If you're worried about Ubuntu's adaptation to the buggy regression,
> > then email their developers (kernel and input-utils packagers) explaining
> > the revert, and they can coordination their kernel and input-utils updates
> > to do the Right Thing.
> > 
> > But for all of the rest of us, our systems are broken by this change.
> > 
> > ...
> > 
> > 
> > >>> As Mark said, breaking user space simply isn't acceptable. And since
> > >>> breaking user space isn't acceptable, then incrementing the version is
> > >>> stupid too.
> > >>
> > >> It might not have been the best idea to increment, however I maintain
> > >> that if there exists version is can be changed. Otherwise there is no
> > >> point in having version at all.
> > > 
> > > Not arguing in favor of the version numbering, but it is easy to read
> > > the version increment at the beginning of the application, and adjust
> > > if the code will use EVIOCGKEYCODE or EVIOCGKEYCODE_V2 of the ioctl's,
> > > depending on what kernel provides.
> > > 
> > > Ok, we might be just calling the new ioctl and check for -ENOSYS at
> > > the beginning, using some fake arguments.
> > > 
> > >> As I said, reverting the version bump will cause yet another wave of
> > >> breakages so I propose leaving version as is.
> > >>
> > >>>
> > >>> The way we add new ioctl's is not by incrementing some "ABI version"
> > >>> crap. It's by adding new ioctl's or system calls or whatever that
> > >>> simply used to return -ENOSYS or other error before, while preserving
> > >>> the old ABI. That way old binaries don't break (for _ANY_ reason), and
> > >>> new binaries can see "oh, this doesn't support the new thing".
> > >>
> > >> That has been done as well; we have 2 new ioctls and kept 2 old ioctls.
> > 
> > That's the problem: you did NOT keep the two old ioctls().
> > Those got changed too.. so now we have four NEW ioctls(),
> > none of which backward compatible with userspace.
> > 
> 
> Please calm down. This, in fact, is not new vs old ioctl problem but
> rather particular driver (or rather set of drivers) implementation
> issue. Even if we drop the new ioctls and convert the RC code to use the
> old ones you'd be observing the same breakage as RC code responds with
> -EINVAL to not-yet-established mappings.
> 
> I'll see what can be done for these drivers; I guess we could supply a
> fake KEY_RESERVED entry for not mapped scancodes if there are mapped
> scancodes "above" current one. That should result in the same behavior
> for RCs as before.
> 

I wonder if the patch below is all that is needed...

Thanks!

-- 
Dmitry


Input: ir-keymap - return KEY_RESERVED for unknown mappings

Do not respond with -EINVAL to EVIOCGKEYCODE for not-yet-mapped scancodes,
but rather return KEY_RESERVED.

This fixes breakage with Ubuntu's input-kbd utility that stopped returning
full keymaps for remote controls.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
---

 drivers/media/IR/ir-keytable.c |   28 +++++++++++++++++-----------
 1 files changed, 17 insertions(+), 11 deletions(-)


diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c
index f60107c..c4645d7 100644
--- a/drivers/media/IR/ir-keytable.c
+++ b/drivers/media/IR/ir-keytable.c
@@ -374,21 +374,27 @@ static int ir_getkeycode(struct input_dev *dev,
 		index = ir_lookup_by_scancode(rc_tab, scancode);
 	}
 
-	if (index >= rc_tab->len) {
-		if (!(ke->flags & INPUT_KEYMAP_BY_INDEX))
-			IR_dprintk(1, "unknown key for scancode 0x%04x\n",
-				   scancode);
+	if (index < rc_tab->len) {
+		entry = &rc_tab->scan[index];
+
+		ke->index = index;
+		ke->keycode = entry->keycode;
+		ke->len = sizeof(entry->scancode);
+		memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
+
+	} else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) {
+		/*
+		 * We do not really know the valid range of scancodes
+		 * so let's respond with KEY_RESERVED to anything we
+		 * do not have mapping for [yet].
+		 */
+		ke->index = index;
+		ke->keycode = KEY_RESERVED;
+	} else {
 		retval = -EINVAL;
 		goto out;
 	}
 
-	entry = &rc_tab->scan[index];
-
-	ke->index = index;
-	ke->keycode = entry->keycode;
-	ke->len = sizeof(entry->scancode);
-	memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
-
 	retval = 0;
 
 out:

  reply	other threads:[~2011-01-26  2:00 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4D3C5F73.2050408@teksavvy.com>
     [not found] ` <20110124175456.GA17855@core.coreip.homeip.net>
     [not found]   ` <4D3E1A08.5060303@teksavvy.com>
     [not found]     ` <20110125005555.GA18338@core.coreip.homeip.net>
     [not found]       ` <4D3E4DD1.60705@teksavvy.com>
     [not found]         ` <20110125042016.GA7850@core.coreip.homeip.net>
     [not found]           ` <4D3E5372.9010305@teksavvy.com>
     [not found]             ` <20110125045559.GB7850@core.coreip.homeip.net>
     [not found]               ` <4D3E59CA.6070107@teksavvy.com>
     [not found]                 ` <4D3E5A91.30207@teksavvy.com>
2011-01-25  5:31                   ` 2.6.36/2.6.37: broken compatibility with userspace input-utils ? Dmitry Torokhov
2011-01-25  6:52                     ` Dmitry Torokhov
2011-01-25 14:42                       ` Extending rc-core/userspace to handle bigger scancodes - Was: " Mauro Carvalho Chehab
2011-01-25 16:55                         ` Dmitry Torokhov
2011-01-26  9:44                           ` Mauro Carvalho Chehab
2011-01-25 11:42                     ` Mauro Carvalho Chehab
2011-01-25 14:32                       ` Mark Lord
2011-01-25 16:48                       ` Dmitry Torokhov
2011-01-25 20:09                         ` Linus Torvalds
2011-01-25 20:54                           ` Dmitry Torokhov
2011-01-25 21:01                             ` Dmitry Torokhov
2011-01-25 21:20                               ` Linus Torvalds
2011-01-25 21:50                                 ` Dmitry Torokhov
2011-01-25 22:00                             ` Mauro Carvalho Chehab
2011-01-25 22:22                               ` Mark Lord
2011-01-25 23:29                                 ` Dmitry Torokhov
2011-01-26  2:00                                   ` Dmitry Torokhov [this message]
2011-01-26 11:26                                     ` Mauro Carvalho Chehab
2011-01-26 13:08                                       ` Gerd Hoffmann
2011-01-26 14:18                                         ` Mauro Carvalho Chehab
2011-01-26 14:52                                           ` Gerd Hoffmann
2011-01-26 16:46                                           ` Dmitry Torokhov
2011-01-26 16:51                                           ` Dmitry Torokhov
2011-01-26 17:29                                             ` Mauro Carvalho Chehab
2011-01-26 18:24                                               ` Dmitry Torokhov
2011-01-26 19:16                                                 ` Gerd Hoffmann
2011-01-26 19:28                                                   ` Mark Lord
2011-01-26 20:09                                                     ` Gerd Hoffmann
2011-01-26 19:28                                                   ` Mauro Carvalho Chehab
2011-01-26 19:32                                                   ` Dmitry Torokhov
2011-01-26 20:07                                                     ` Gerd Hoffmann
2011-01-26 19:27                                                 ` Mark Lord
2011-01-26 14:58                                       ` Mark Lord
2011-01-26 17:41                                         ` Mauro Carvalho Chehab
2011-01-26 17:59                                           ` Dmitry Torokhov
2011-01-26 19:30                                             ` Mark Lord
2011-01-26 15:05                                     ` Mark Lord
2011-01-26 16:44                                       ` Dmitry Torokhov
2011-01-26 19:31                                         ` Mark Lord
2011-01-26 19:38                                           ` Dmitry Torokhov
2011-01-26 17:32                                       ` Mauro Carvalho Chehab
2011-01-26 19:33                                         ` Mark Lord
2011-01-26 19:41                                           ` Dmitry Torokhov
2011-01-26 19:47                                             ` Mark Lord
2011-01-26 19:50                                               ` Dmitry Torokhov
2011-01-26 21:41                                                 ` Mark Lord
2011-01-26 21:49                                                   ` Mark Lord
2011-01-26 22:07                                                     ` Dmitry Torokhov
2011-01-26 22:04                                                   ` Dmitry Torokhov
2011-01-27  1:01                                       ` Mark Lord
2011-01-27  1:07                                         ` Mark Lord
2011-01-27  2:12                                           ` Dmitry Torokhov
2011-01-27  3:18                                             ` Mark Lord
2011-01-27  6:38                                               ` Dmitry Torokhov
2011-01-27 10:30                                                 ` Mauro Carvalho Chehab
2011-01-27 15:00                                                   ` Mark Lord
2011-01-27 17:21                                                   ` Dmitry Torokhov
2011-01-27 18:58                                                     ` Mauro Carvalho Chehab
2011-01-28  9:39                                                       ` Dmitry Torokhov
2011-01-28 11:55                                                         ` Mauro Carvalho Chehab
2011-01-28 16:40                                                           ` Dmitry Torokhov
2011-01-28 17:01                                                             ` Mauro Carvalho Chehab
2011-01-28 17:33                                                               ` Dmitry Torokhov
2011-01-28 18:15                                                                 ` Mauro Carvalho Chehab
2011-01-28 18:34                                                                   ` Dmitry Torokhov
2011-01-28 20:53                                                                     ` Mark Lord
2011-01-27 14:54                                                 ` Mark Lord
2011-01-27 16:39                                               ` Dmitry Torokhov
2011-01-27 18:12                                                 ` Mark Lord
2011-01-27 19:53                                                   ` Dmitry Torokhov
2011-01-28 16:42                                                     ` Dmitry Torokhov
2011-01-28 20:55                                                       ` Mark Lord
2011-01-28 21:03                                                         ` Mark Lord
2011-01-28 21:09                                                           ` Dmitry Torokhov
2011-01-25 22:25                               ` Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110126020003.GA23085@core.coreip.homeip.net \
    --to=dmitry.torokhov@gmail.com \
    --cc=kernel@teksavvy.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox