All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: Dave Carey <carvsdriver@gmail.com>
Cc: linux-usb@vger.kernel.org, oneukum@suse.com, guanwentao@uniontech.com
Subject: Re: [PATCH] USB: cdc-acm: start bulk-IN polling when ALWAYS_POLL_CTRL is set
Date: Fri, 15 May 2026 07:58:17 +0200	[thread overview]
Message-ID: <2026051506-theft-growl-5a79@gregkh> (raw)
In-Reply-To: <CALPvROTsnvWJZVmW6L_gdF5_Pv4ic3gKbAKYyyC_-n0mffmnAg@mail.gmail.com>

On Thu, May 14, 2026 at 03:42:52PM -0400, Dave Carey wrote:
> The INGENIC 17EF:6161 touchscreen composite device has a ~55-second
> watchdog that resets the USB device if the bulk-IN endpoint on the CDC
> data interface goes unread. The existing ALWAYS_POLL_CTRL quirk keeps
> the notification endpoint (ctrlurb / EP 0x82) polling continuously, but
> that alone is insufficient: the firmware monitors bulk-IN activity, not
> just notification-endpoint activity.
> 
> Add acm_submit_read_urbs() calls to the two ALWAYS_POLL_CTRL paths that
> already restart the ctrlurb:
> 
> 1. acm_probe(): start bulk reads at probe time alongside the ctrlurb,
> so the watchdog is satisfied from first bind without requiring a
> userspace process to open /dev/ttyACMn.
> 
> 2. acm_port_shutdown(): restart bulk reads after port close alongside
> the ctrlurb restart, so the watchdog keeps running when the last
> TTY user closes the port.
> 
> acm_read_bulk_callback() already resubmits each URB unconditionally on
> normal completion, so once submitted the reads remain active until an
> explicit kill (disconnect, suspend). acm_submit_read_urb() is a no-op
> for URBs that are already in flight (read_urbs_free bit clear), so the
> existing acm_port_activate() call remains correct and races are avoided.
> 
> Tested on Lenovo Yoga Book 9 14IAH10 (83KJ): without this patch the
> device resets every ~55 s when no TTY is open; with it the device
> remains stable indefinitely.
> 
> Signed-off-by: Dave Carey <carvsdriver@gmail.com>
> Tested-by: Dave Carey <carvsdriver@gmail.com>
> ---
> This follows commit f58752ebcb35 ("USB: CDC-ACM: add INGENIC 17EF:6161
> quirk for Yoga Book 9 14IAH10"), which added ALWAYS_POLL_CTRL to keep
> the ctrlurb active. That commit addressed the notification-endpoint
> watchdog (~20 s). This patch addresses a second watchdog that fires
> when bulk-IN data goes unread for ~55 s.
> 
> This patch is based on top of Wentao Guan's pending fix
> ("USB: cdc-acm: fix misplaced quirk defines and BIT(9) collision") which
> moves VENDOR_CLASS_DATA_IFACE and ALWAYS_POLL_CTRL from inside
> acm_ctrl_msg() to cdc-acm.h and reassigns them to BIT(10)/BIT(11) to
> avoid the NO_UNION_12 collision. The bulk-IN additions here are
> independent of that renumbering and apply cleanly to either base, but
> the combined tree is the correct target once Wentao's fix merges.
> 
> drivers/usb/class/cdc-acm.c | 6 ++++++
> 1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
> --- a/drivers/usb/class/cdc-acm.c
> +++ b/drivers/usb/class/cdc-acm.c
> @@ -799,6 +799,9 @@
> "ctrl polling restart failed after port close\n");
> /* port_shutdown() cleared DTR/RTS; restore them */
> acm_set_control(acm, USB_CDC_CTRL_DTR | USB_CDC_CTRL_RTS);
> + if (acm_submit_read_urbs(acm, GFP_KERNEL))
> + dev_dbg(&acm->control->dev,
> + "read urb restart failed after port close\n");
> }
> }
> 
> @@ -1566,6 +1569,9 @@
> if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL))
> dev_warn(&intf->dev,
> "failed to start persistent ctrl polling\n");
> + if (acm_submit_read_urbs(acm, GFP_KERNEL))
> + dev_warn(&intf->dev,
> + "failed to start persistent bulk read polling\n");
> }
> 
> return 0;
> --
> 2.47.0

Hi,

This is the friendly patch-bot of Greg Kroah-Hartman.  You have sent him
a patch that has triggered this response.  He used to manually respond
to these common problems, but in order to save his sanity (he kept
writing the same thing over and over, yet to different people), I was
created.  Hopefully you will not take offence and will fix the problem
in your patch and resubmit it so that it can be accepted into the Linux
kernel tree.

You are receiving this message because of the following common error(s)
as indicated below:

- Your patch is malformed (tabs converted to spaces, linewrapped, etc.)
  and can not be applied.  Please read the file,
  Documentation/process/email-clients.rst in order to fix this.

If you wish to discuss this problem further, or you have questions about
how to resolve this issue, please feel free to respond to this email and
Greg will reply once he has dug out from the pending patches received
from other developers.

thanks,

greg k-h's patch email bot

       reply	other threads:[~2026-05-15  5:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CALPvROTsnvWJZVmW6L_gdF5_Pv4ic3gKbAKYyyC_-n0mffmnAg@mail.gmail.com>
2026-05-15  5:58 ` Greg KH [this message]
2026-05-15 13:04 [PATCH] USB: cdc-acm: start bulk-IN polling when ALWAYS_POLL_CTRL is set Dave Carey
  -- strict thread matches above, loose matches on Subject: below --
2026-05-15 14:19 Dave Carey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2026051506-theft-growl-5a79@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=carvsdriver@gmail.com \
    --cc=guanwentao@uniontech.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=oneukum@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.