[lkml]   [2012]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[ 061/108] firewire: ohci: fix too-early completion of IR multichannel buffers
    3.0-stable review patch.  If anyone has any objections, please let me know.


    From: Clemens Ladisch <>

    commit 0c0efbacab8d70700d13301e0ae7975783c0cb0a 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: Clemens Ladisch <>
    Signed-off-by: Stefan Richter <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/firewire/ohci.c | 5 ++---
    1 file changed, 2 insertions(+), 3 deletions(-)

    --- a/drivers/firewire/ohci.c
    +++ b/drivers/firewire/ohci.c
    @@ -2558,15 +2558,14 @@ static int handle_ir_buffer_fill(struct
    struct iso_context *ctx =
    container_of(context, struct iso_context, context);

    - if (!last->transfer_status)
    + if (last->res_count != 0)
    /* Descriptor(s) not done yet, stop iteration */
    return 0;

    if (le16_to_cpu(last->control) & DESCRIPTOR_IRQ_ALWAYS)
    le32_to_cpu(last->data_address) +
    - le16_to_cpu(last->req_count) -
    - le16_to_cpu(last->res_count),
    + le16_to_cpu(last->req_count),

    return 1;

     \ /
      Last update: 2012-03-30 23:09    [W:0.030 / U:40.852 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site