• Maximilian Luz's avatar
    platform/surface: aggregator: Do not check for repeated unsequenced packets · d9a477f6
    Maximilian Luz authored
    Currently, we check any received packet whether we have already seen it
    previously, regardless of the packet type (sequenced / unsequenced). We
    do this by checking the sequence number. This assumes that sequence
    numbers are valid for both sequenced and unsequenced packets. However,
    this assumption appears to be incorrect.
    
    On some devices, the sequence number field of unsequenced packets (in
    particular HID input events on the Surface Pro 9) is always zero. As a
    result, the current retransmission check kicks in and discards all but
    the first unsequenced packet, breaking (among other things) keyboard and
    touchpad input.
    
    Note that we have, so far, only seen packets being retransmitted in
    sequenced communication. In particular, this happens when there is an
    ACK timeout, causing the EC (or us) to re-send the packet waiting for an
    ACK. Arguably, retransmission / duplication of unsequenced packets
    should not be an issue as there is no logical condition (such as an ACK
    timeout) to determine when a packet should be sent again.
    
    Therefore, remove the retransmission check for unsequenced packets
    entirely to resolve the issue.
    
    Fixes: c167b9c7 ("platform/surface: Add Surface Aggregator subsystem")
    Signed-off-by: default avatarMaximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20221113185951.224759-1-luzmaximilian@gmail.comReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    d9a477f6
ssh_packet_layer.c 60.8 KB