On Wed, Aug 10, 2011 at 3:32 PM, Stanislaw Gruszka <sgrus...@redhat.com> wrote:
> In rt2800usb_work_txdone we check flags in order:
>
> - ENTRY_OWNER_DEVICE_DATA
> - ENTRY_DATA_STATUS_PENDING
> - ENTRY_DATA_IO_FAILED
>
> Modify flags in separate order in rt2x00usb_interrupt_txdone, to avoid
> processing entries in _txdone with wrong flags or skip processing
> ready entries.
>
> Reported-by: Justin Piszcz <jpis...@lucidpixels.com>
> Cc: sta...@kernel.org
> Signed-off-by: Stanislaw Gruszka <sgrus...@redhat.com>

Acked-by: Ivo van Doorn <ivdo...@gmail.com>

> ---
>  drivers/net/wireless/rt2x00/rt2x00usb.c |   17 +++++++----------
>  1 files changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c 
> b/drivers/net/wireless/rt2x00/rt2x00usb.c
> index b6b4542..7fbb55c 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
> @@ -262,23 +262,20 @@ static void rt2x00usb_interrupt_txdone(struct urb *urb)
>        struct queue_entry *entry = (struct queue_entry *)urb->context;
>        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
>
> -       if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
> +       if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
>                return;
> -
> -       if (rt2x00dev->ops->lib->tx_dma_done)
> -               rt2x00dev->ops->lib->tx_dma_done(entry);
> -
> -       /*
> -        * Report the frame as DMA done
> -        */
> -       rt2x00lib_dmadone(entry);
> -
>        /*
>         * Check if the frame was correctly uploaded
>         */
>        if (urb->status)
>                set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);
> +       /*
> +        * Report the frame as DMA done
> +        */
> +       rt2x00lib_dmadone(entry);
>
> +       if (rt2x00dev->ops->lib->tx_dma_done)
> +               rt2x00dev->ops->lib->tx_dma_done(entry);
>        /*
>         * Schedule the delayed work for reading the TX status
>         * from the device.
> --
> 1.7.1
>
>

_______________________________________________
stable mailing list
stable@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to