• Clemens Ladisch's avatar
    firewire: ohci: fix too-early completion of IR multichannel buffers · 07ef0938
    Clemens Ladisch authored
    commit 0c0efbac upstream.
    
    handle_ir_buffer_fill() assumed that a completed descriptor would be
    indicated by a non-zero transfer_status (as in most other descriptors).
    However, this field is written by the controller as soon as (the end of)
    the first packet has been written into the buffer.  As a consequence, if
    we happen to run into such a descriptor when the interrupt handler is
    executed after such a packet has completed, the descriptor would be
    taken out of the list of active descriptors as soon as the buffer had
    been partially filled, so the event for the buffer being completely
    filled would never be sent.
    
    To fix this, handle descriptors only when they have been completely
    filled, i.e., when res_count == 0.  (This also matches the condition
    that is reported by the controller with an interrupt.)
    Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    07ef0938
ohci.c 94.8 KB