Input Regression >= 5.4: The event timestamp of key release is wrong. After the commit 3b51c44bd6936e8 (between 5.3 and 5.4), the timestamp of a key release event is that of the preceding key press event. Reverting this commit fixes the problem. This timestamp can be obtained as: struct input_event ev; ev->time; (If want a debug code, I will send a code to show timestamps in Xorg.0.log - I discovered this by my fork of xf86-input-evdev driver. Though I don't think it's difficult to monitor them.) Note: A commit in Aug 2019 (4370b231d1001e0b560f82) fixes one bug of 3b51c44, but that's irrelevant to this report. Thatks a lot. Best regards. The above mentioned commit can be found here: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=3b51c44bd6936e86a7180abd9aebc4387a479253 ------------------------------------------------------------------------ author Atif Niyaz <atifniyaz@google.com> 2019-07-24 22:26:31 +0300 committer Dmitry Torokhov <dmitry.torokhov@gmail.com> 2019-07-25 11:12:20 +0300 Input: allow drivers specify timestamp for input events Currently, evdev stamps events with timestamps acquired in evdev_events() However, this timestamping may not be accurate in terms of measuring when the actual event happened. Let's allow individual drivers specify timestamp in order to provide a more accurate sense of time for the event. It is expected that drivers will set the timestamp in their hard interrupt routine. ------------------------------------------------------------------------
What driver do you observe this with?
It's with USB keyboard, but *not* with AT Translated. (Sorry, I noticed it just now, but I should have reported it my first post.) The story below is about my hack of xf86-input-evdev[1]. I'm not sure if you're interested, but rather than omitting, I include it here. My hack enables e.g. "Space/Shift dual role key"(s); if you press the space key alone, it's the space. But if you press it with other keys, it works as the shift key. (Or any combination is possible.) My hack measures timestmaps in the following reason: It allows "hesitate, change your mind, and cancel" - You often press the Space key, intending Shift, but after a while, you release it without pressing other keys. In such cases, it's convenient not to dispatch the Space press/release events, in another words, not to send any events. The criterion here is how long the press lasts. Thanks Dmitry for your work in the kernel input driver. [1] You can get it * For ArchLinux: https://bbs.archlinux.org/viewtopic.php?id=119556 * For Gentoo: https://forums.gentoo.org/viewtopic-t-865313.html * Website: https://gitlab.com/at-home-modifier/at-home-modifier-evdev/-/wikis/home
Does your USB keyboard work with hid-generic driver or you are using some other driver? Here is what I see on my system with USB keyboard and hid-generic: Event: time 1585071556.237691, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70007 Event: time 1585071556.237691, type 1 (EV_KEY), code 32 (KEY_D), value 1 Event: time 1585071556.237691, -------------- SYN_REPORT ------------ dEvent: time 1585071556.365697, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70007 Event: time 1585071556.365697, type 1 (EV_KEY), code 32 (KEY_D), value 0 Event: time 1585071556.365697, -------------- SYN_REPORT ------------ Event: time 1585071558.109817, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70009 Event: time 1585071558.109817, type 1 (EV_KEY), code 33 (KEY_F), value 1 Event: time 1585071558.109817, -------------- SYN_REPORT ------------ fEvent: time 1585071558.213694, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70009 Event: time 1585071558.213694, type 1 (EV_KEY), code 33 (KEY_F), value 0 Event: time 1585071558.213694, -------------- SYN_REPORT ------------ Event: time 1585071559.549715, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7000a Event: time 1585071559.549715, type 1 (EV_KEY), code 34 (KEY_G), value 1 Event: time 1585071559.549715, -------------- SYN_REPORT ------------ gEvent: time 1585071559.629689, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7000a Event: time 1585071559.629689, type 1 (EV_KEY), code 34 (KEY_G), value 0 Event: time 1585071559.629689, -------------- SYN_REPORT ------------ As you can see, the event time(s) for EV_KEY/KEY_XXX are all different. Can you please show me the sequence on your system (using evtest)?
Created attachment 288041 [details] evtest result. hid-generic, according to dmesg: ------------------------------------------------------------------------ usb 1-2: New USB device found, idVendor=0566, idProduct=3029, bcdDevice= 1.01 usb 1-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 input: HID 0566:3029 as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:0566:3029.0001/input/input7 hid-generic 0003:0566:3029.0001: input,hidraw0: USB HID v1.11 Keyboard [HID 0566:3029] on usb-0000:00:14.0-2/input0 ------------------------------------------------------------------------ hwinfo says usbhid: ------------------------------------------------------------------------ 37: USB 00.0: 10800 Keyboard [Created at usb.122] Unique ID: cLrx.ZeV332yiCcA Parent ID: k4bc.2DFUsyrieMD SysFS ID: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0 SysFS BusID: 1-2:1.0 Hardware Class: keyboard Model: "Monterey International Keyboard" Hotplug: USB Vendor: usb 0x0566 "Monterey International Corp." Device: usb 0x3029 Revision: "1.01" Driver: "usbhid" Driver Modules: "usbhid" ------------------------------------------------------------------------ But my evtest result confirms my report. See the attachment. (Same from VT1, but it must be independent from Xorg.) At least one another user experiences this issue[1]. If you want, I can ask that person to send an evtest result, or other info. [1] https://bbs.archlinux.org/viewtopic.php?pid=1890663#p1890663 (comment #55, by "Salkay") Thanks.
OK, I see. It looks like we do not reset the timestamp for autorepeat events synthesized by the kernel.
Created attachment 288053 [details] Fix stale timestamp on autorepeat events Please let me know if this patch works for you and if it does if you are happy with the info in "reported-by" tag in the patch.
Gorspugee, it worked against 5.5.12! I'm ok with the reported-by tag. I am happy if my report was of any help. I appreciate not only your technical help, but also your kind replies. Thank you very much. ...или пожалуй большое спасибо, Дмитрий Великиевич. (Sorry if this line doesn't make sense.) Best regards.
Great, thank you for reporting and testing. I just send a pull request so the fix should land in 5.6 and then propagate to stable releases.
This bug was fixed in v5.6 [1], and backported to v5.4.29 [2] and v5.5.14 [3]. Thanks all. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.6&id=4134252ab7e2c339a54302b88496cb5a89cdbaec [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit?h=v5.4.29&id=381c88a6b948621c5bb33c724d817ee071a605f8 [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit?h=v5.5.14&id=48394019bf584e5e5fb2660d97577f1e9117ba9c