]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.20.16/media-revert-media-rc-some-events-are-dropped-by-userspace.patch
Linux 4.20.16
[thirdparty/kernel/stable-queue.git] / releases / 4.20.16 / media-revert-media-rc-some-events-are-dropped-by-userspace.patch
CommitLineData
544a52ee
GKH
1From 05f0edadcc5fccdfc0676825b3e70e75dc0a8a84 Mon Sep 17 00:00:00 2001
2From: Sean Young <sean@mess.org>
3Date: Fri, 22 Feb 2019 04:08:05 -0500
4Subject: media: Revert "media: rc: some events are dropped by userspace"
5
6From: Sean Young <sean@mess.org>
7
8commit 05f0edadcc5fccdfc0676825b3e70e75dc0a8a84 upstream.
9
10When an rc device is created, we do not know what key codes it will
11support, since a new keymap might be loaded at some later point. So,
12we set all keybit in the input device.
13
14The uevent for the input device includes all the key codes, of which
15there are now 768. This overflows the size of the uevent
16(UEVENT_BUFFER_SIZE) and no event is generated.
17
18Revert for now until we figure out a different solution.
19
20This reverts commit fec225a04330d0f222d24feb5bea045526031675.
21
22Cc: <stable@vger.kernel.org> # 4.20+
23Reported-by: Christian Holpert <christian@holpert.de>
24Signed-off-by: Sean Young <sean@mess.org>
25Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
26Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
27
28---
29 drivers/media/rc/rc-main.c | 13 ++++++++++++-
30 1 file changed, 12 insertions(+), 1 deletion(-)
31
32--- a/drivers/media/rc/rc-main.c
33+++ b/drivers/media/rc/rc-main.c
34@@ -274,6 +274,7 @@ static unsigned int ir_update_mapping(st
35 unsigned int new_keycode)
36 {
37 int old_keycode = rc_map->scan[index].keycode;
38+ int i;
39
40 /* Did the user wish to remove the mapping? */
41 if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) {
42@@ -288,9 +289,20 @@ static unsigned int ir_update_mapping(st
43 old_keycode == KEY_RESERVED ? "New" : "Replacing",
44 rc_map->scan[index].scancode, new_keycode);
45 rc_map->scan[index].keycode = new_keycode;
46+ __set_bit(new_keycode, dev->input_dev->keybit);
47 }
48
49 if (old_keycode != KEY_RESERVED) {
50+ /* A previous mapping was updated... */
51+ __clear_bit(old_keycode, dev->input_dev->keybit);
52+ /* ... but another scancode might use the same keycode */
53+ for (i = 0; i < rc_map->len; i++) {
54+ if (rc_map->scan[i].keycode == old_keycode) {
55+ __set_bit(old_keycode, dev->input_dev->keybit);
56+ break;
57+ }
58+ }
59+
60 /* Possibly shrink the keytable, failure is not a problem */
61 ir_resize_table(dev, rc_map, GFP_ATOMIC);
62 }
63@@ -1750,7 +1762,6 @@ static int rc_prepare_rx_device(struct r
64 set_bit(EV_REP, dev->input_dev->evbit);
65 set_bit(EV_MSC, dev->input_dev->evbit);
66 set_bit(MSC_SCAN, dev->input_dev->mscbit);
67- bitmap_fill(dev->input_dev->keybit, KEY_CNT);
68
69 /* Pointer/mouse events */
70 set_bit(EV_REL, dev->input_dev->evbit);