<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>