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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html