Project

General

Profile

Actions

Bug #3309

closed

psm0 (Synaptics Touchpad) regularily freezes mouse for 2 seconds

Added by mneumann over 2 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
Driver
Target version:
Start date:
12/27/2021
Due date:
% Done:

0%

Estimated time:

Description

  • First note: Using an USB mouse exhibits none of the problems reported below!
  • moused is enabled (by default).
  • I am running from an USB stick with the DragonFly installer (nrelease + gui).
  • There are no interrupt storms. Low frequent "psm0: lost interrupt?" messages seem to be fine
    (they happen on FreeBSD too).
  • This happens repeatedly and roughly every 3-5 seconds (when moving the mouse).
  • This happens when running moused on the terminal (though less likely).
  • This happens with X11 (no matter of driver, i915 or scfb). /dev/sysmouse is used.
  • It is much more likely to happen when running X11.
  • It is less likely to happen on the console when psm debug output is enabled and the
    console is full of debug messages. Note that the debug output does not affect it from
    happending when running X11.
  • This does not happen on FreeBSD 13 [1].
  • [1] IIRC I could once reproduce this on FreeBSD, but as I switched between
    FreeBSD and DragonFly quite often, I am not 100% sure that this actually appeared on FreeBSD.
  • I reviewed the changes in the psm driver between
    FreeBSD and DragonFly and couldn't find anything that would explain this behaviour.
  • On FreeBSD, I disabled psm mux (hw.psm.mux_disabled=1), so that the code paths are mostly identical.
    It still works on FreeBSD!
  • I also synced the psm driver a bit, still no luck on DragonFly.
  • The 2 seconds "freeze" comes from this piece of code (around line 6554 in psm.c):

    /* * Drop even good packets if they occur within a timeout * period of a sync error. This allows the detection of * a change in the mouse's packet mode without exposing * erratic mouse behavior to the user. Some KVMs forget * enhanced mouse modes during switch events.
    */
    if (!timeelapsed(&sc->lastinputerr, psmerrsecs, psmerrusecs,
    &now)) {
    pb->inputbytes = 0;
    continue;
    }

  • It's paired with these messages:

    psmintr: out of sync (0000 != 0080) 106 cmds since last error.
    psmintr: discard a byte (1)

  • Normally PSM packets looks like this:

    psmintr: 80 00 00 c0 00 00

  • But what I sometimes get are corrupted packets or variations of:

    psmintr: 00 80 00 00 c0 00
    ^^

  • My assumption is that this is somehow a timing problem. But I'd like to
    understand why this happens on DragonFly but not on FreeBSD.
    The psm code is so similar, except that FreeBSD uses splx locks whereas
    we use lockmgr. I found suggestions to turn of powerd etc... but they all come
    down to the fact that there are timing issues.
  • BTW, NetBSD has beautiful and highly understandable psm code (truely amazing)!
    I might want to try if psm works there.
  • Running recent DragonFly master (6.1-DEVELOPMENT), i7-8565U CPU @ 1.80GHz, TUXEDO InfinityBook Pro 14 v3 (Clevo "clone").
  • Below is my dmesg output for psm0 (just for the record):

psm0: current command byte:0067
Synaptics Touchpad v8.2
Model information:
infoRot180: 0
infoPortrait: 0
infoSensor: 1
infoHardware: 113
infoNewAbs: 1
capPen: 0
infoSimplC: 1
infoGeometry: 1
Extended capabilities:
capExtended: 1
capMiddle: 0
nExtendedQueries: 7
capPassthrough: 0
capLowPower: 0
capMultiFingerReport: 1
capSleep: 0
capFourButtons: 0
capBallistics: 0
capMultiFinger: 1
capPalmDetect: 1
infoXupmm: 55
infoYupmm: 102
Extended model ID:
verticalScroll: 0
horizontalScroll: 0
verticalWheel: 0
nExtendedButtons: 0
capEWmode: 1
Continued capabilities:
capClickPad: 0
capDeluxeLEDs: 0
noAbsoluteFilter: 0
capReportsV: 1
capUniformClickPad: 0
capReportsMin: 1
capInterTouch: 1
capReportsMax: 1
capClearPad: 0
capAdvancedGestures: 0
capCoveredPad: 0
maximumXCoord: 5718
maximumYCoord: 4908
minimumXCoord: 1238
minimumYCoord: 956
Additional Buttons: 0
psm0: found Synaptics Touchpad
psm0: <PS/2 Mouse> irq 12 on atkbdc0
interrupt uses mplock: psm0
psm0: model Synaptics Touchpad, device ID 0-00, 3 buttons
psm0: config:00004000, flags:00000008, packet size:6
psm0: syncmask:c0, syncbits:00

Actions #1

Updated by mneumann over 2 years ago

For completeness, `powerd` was not running. So no changes in C or P states.

Actions

Also available in: Atom PDF