<html>
<head>
<base href="https://bugs.freedesktop.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - Kernel absfuzz handling is inconsistent"
href="https://bugs.freedesktop.org/show_bug.cgi?id=105303">105303</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Kernel absfuzz handling is inconsistent
</td>
</tr>
<tr>
<th>Product</th>
<td>Wayland
</td>
</tr>
<tr>
<th>Version</th>
<td>unspecified
</td>
</tr>
<tr>
<th>Hardware</th>
<td>Other
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>medium
</td>
</tr>
<tr>
<th>Component</th>
<td>libinput
</td>
</tr>
<tr>
<th>Assignee</th>
<td>wayland-bugs@lists.freedesktop.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>peter.hutterer@who-t.net
</td>
</tr>
<tr>
<th>Blocks</th>
<td>104828, 105108
</td>
</tr></table>
<p>
<div>
<pre>Created <span class=""><a href="attachment.cgi?id=137711" name="attach_137711" title="Python program to illustrate the kernel defuzz issue">attachment 137711</a> <a href="attachment.cgi?id=137711&action=edit" title="Python program to illustrate the kernel defuzz issue">[details]</a></span>
Python program to illustrate the kernel defuzz issue
This is mostly for archiving purposes only but:
The kernel has absfuzz handling for axes with a fuzz != 9, see
input_defuzz_abs_event() in drivers/input/input.c. The output of that function
is nonlinear and can generate 'jumps' in deltas especially around the fuzz * 2
range.
These jumps are visible when the finger moves by a given delta and the
resulting defuzzed deltas are largely different despite the almost constant
speed. The output of the attached python script:
* 'value' is the new device coordinate
* 'old_val' is the previous device coordinate
* fuzz is 8 in this output
* defuzzed is the value delivered to userspace (would become old_val but not in
this script)
* delta are the delta between the userspace-visible values vs the real delta in
device values
* error is the difference between the deltas
value 76 old_val 100: defuzzed: 76 delta -24|-24 error: 0
value 77 old_val 100: defuzzed: 77 delta -23|-23 error: 0
value 78 old_val 100: defuzzed: 78 delta -22|-22 error: 0
value 79 old_val 100: defuzzed: 79 delta -21|-21 error: 0
value 80 old_val 100: defuzzed: 80 delta -20|-20 error: 0
value 81 old_val 100: defuzzed: 81 delta -19|-19 error: 0
value 82 old_val 100: defuzzed: 82 delta -18|-18 error: 0
value 83 old_val 100: defuzzed: 83 delta -17|-17 error: 0
value 84 old_val 100: defuzzed: 84 delta -16|-16 error: 0
value 85 old_val 100: defuzzed: 92 delta -8|-15 error: -7
value 86 old_val 100: defuzzed: 93 delta -7|-14 error: -7
value 87 old_val 100: defuzzed: 93 delta -7|-13 error: -6
value 88 old_val 100: defuzzed: 94 delta -6|-12 error: -6
value 89 old_val 100: defuzzed: 94 delta -6|-11 error: -5
value 90 old_val 100: defuzzed: 95 delta -5|-10 error: -5
value 91 old_val 100: defuzzed: 95 delta -5| -9 error: -4
value 92 old_val 100: defuzzed: 96 delta -4| -8 error: -4
value 93 old_val 100: defuzzed: 98 delta -2| -7 error: -5
value 94 old_val 100: defuzzed: 98 delta -2| -6 error: -4
value 95 old_val 100: defuzzed: 98 delta -2| -5 error: -3
value 96 old_val 100: defuzzed: 99 delta -1| -4 error: -3
value 97 old_val 100: defuzzed: 100 delta 0| -3 error: -3
value 98 old_val 100: defuzzed: 100 delta 0| -2 error: -2
value 99 old_val 100: defuzzed: 100 delta 0| -1 error: -1
value 100 old_val 100: defuzzed: 100 delta 0| 0 error: 0
value 101 old_val 100: defuzzed: 100 delta 0| 1 error: 1
value 102 old_val 100: defuzzed: 100 delta 0| 2 error: 2
value 103 old_val 100: defuzzed: 100 delta 0| 3 error: 3
value 104 old_val 100: defuzzed: 101 delta 1| 4 error: 3
value 105 old_val 100: defuzzed: 101 delta 1| 5 error: 4
value 106 old_val 100: defuzzed: 101 delta 1| 6 error: 5
value 107 old_val 100: defuzzed: 101 delta 1| 7 error: 6
value 108 old_val 100: defuzzed: 104 delta 4| 8 error: 4
value 109 old_val 100: defuzzed: 104 delta 4| 9 error: 5
value 110 old_val 100: defuzzed: 105 delta 5| 10 error: 5
value 111 old_val 100: defuzzed: 105 delta 5| 11 error: 6
value 112 old_val 100: defuzzed: 106 delta 6| 12 error: 6
value 113 old_val 100: defuzzed: 106 delta 6| 13 error: 7
value 114 old_val 100: defuzzed: 107 delta 7| 14 error: 7
value 115 old_val 100: defuzzed: 107 delta 7| 15 error: 8
value 116 old_val 100: defuzzed: 116 delta 16| 16 error: 0
value 117 old_val 100: defuzzed: 117 delta 17| 17 error: 0
value 118 old_val 100: defuzzed: 118 delta 18| 18 error: 0
value 119 old_val 100: defuzzed: 119 delta 19| 19 error: 0
value 120 old_val 100: defuzzed: 120 delta 20| 20 error: 0
value 121 old_val 100: defuzzed: 121 delta 21| 21 error: 0
value 122 old_val 100: defuzzed: 122 delta 22| 22 error: 0
value 123 old_val 100: defuzzed: 123 delta 23| 23 error: 0
Note how a device delta of -15 generates a delta of -8 but a device delta of
-16 generates a delta of -16. Likewise for deltas +15 and +16. A finger moving
at that speed will likely see jumps. The output is even weirder when we have
negative values, but let's ignore that for now.
Given that libinput's hysteresis goes on top of what the kernel does, it's
possible that we have those jumps as well. It is unclear if that is an issue
though.</pre>
</div>
</p>
<div id="referenced">
<hr style="border: 1px dashed #969696">
<b>Referenced Bugs:</b>
<ul>
<li>
[<a class="bz_bug_link
bz_status_NEEDINFO "
title="NEEDINFO - Wobbly AlpsPS/2 ALPS DualPoint TouchPad"
href="https://bugs.freedesktop.org/show_bug.cgi?id=104828">Bug 104828</a>] Wobbly AlpsPS/2 ALPS DualPoint TouchPad
</li>
<li>
[<a class="bz_bug_link
bz_status_NEW "
title="NEW - Lenovo Yoga 11S touchpad is jittery"
href="https://bugs.freedesktop.org/show_bug.cgi?id=105108">Bug 105108</a>] Lenovo Yoga 11S touchpad is jittery
</li>
</ul>
</div>
<br>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>