• Takashi Sakamoto's avatar
    firewire: core: use long bus reset on gap count error · d0b06dc4
    Takashi Sakamoto authored
    When resetting the bus after a gap count error, use a long rather than
    short bus reset.
    
    IEEE 1394-1995 uses only long bus resets. IEEE 1394a adds the option of
    short bus resets. When video or audio transmission is in progress and a
    device is hot-plugged elsewhere on the bus, the resulting bus reset can
    cause video frame drops or audio dropouts. Short bus resets reduce or
    eliminate this problem. Accordingly, short bus resets are almost always
    preferred.
    
    However, on a mixed 1394/1394a bus, a short bus reset can trigger an
    immediate additional bus reset. This double bus reset can be interpreted
    differently by different nodes on the bus, resulting in an inconsistent gap
    count after the bus reset. An inconsistent gap count will cause another bus
    reset, leading to a neverending bus reset loop. This only happens for some
    bus topologies, not for all mixed 1394/1394a buses.
    
    By instead sending a long bus reset after a gap count inconsistency, we
    avoid the doubled bus reset, restoring the bus to normal operation.
    Signed-off-by: default avatarAdam Goldman <adamg@pobox.com>
    Link: https://sourceforge.net/p/linux1394/mailman/message/58741624/Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    d0b06dc4
core-card.c 21.4 KB