On Sun, 2016-11-06 at 01:36 +0100, Ladislav Michl wrote:
>  
> @@ -475,7 +490,30 @@ static void acm_softint(struct work_struct *work)
>  {
>       struct acm *acm = container_of(work, struct acm, work);
>  
> -     tty_port_tty_wakeup(&acm->port);
> +     dev_vdbg(&acm->data->dev, "scheduled work\n");
> +
> +     if (test_bit(EVENT_RX_STALL, &acm->flags)) {
> +             int i, status;
> +
> +             for (i = 0; i < acm->rx_buflimit; i++) {
> +                     usb_kill_urb(acm->read_urbs[i]);
> +                     set_bit(i, &acm->read_urbs_free);
> +             }
> +
> +             status = usb_autopm_get_interface(acm->data);

No. If you really resume the device here, you reanimate the URBs
you just killed. The order must be inverted.

> +             if (!status) {
> +                     status = usb_clear_halt(acm->dev, acm->in);
> +                     usb_autopm_put_interface(acm->data);
> +             }
> +             if (!status)
> +                     acm_submit_read_urbs(acm, GFP_KERNEL);

No, you would kill the device. Either do it all conditionally
or nothing.

        Regards
                Oliver


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to