All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: Dylan Robinson <dylan_robinson@motu.com>,
	Michal Pecio <michal.pecio@gmail.com>
Cc: linux-usb@vger.kernel.org, mathias.nyman@intel.com,
	stern@rowland.harvard.edu
Subject: Re: [RFT PATCH] xhci: fix frame id calculation for isoc transfer
Date: Thu, 21 May 2026 18:24:06 +0300	[thread overview]
Message-ID: <a67e11d4-6c80-4043-9f60-ae42a15ed0d3@linux.intel.com> (raw)
In-Reply-To: <CA+Df+jc7rPGBWzvW4eU1WA1GB=S59OsF3_q0O9HmrczM06CV9g@mail.gmail.com>

Hi

On 5/21/26 17:20, Dylan Robinson wrote:
> On Mon, May 18, 2026 at 3:13 AM Michal Pecio wrote:
>> Underruns are the most important thing to test here
> 
> Agreed.
> 
>> Yes, this is very annoying because it's undetectable (without CFC).
>> It seems we need to handle Ring Underrun/Overrun events, somehow.
> 
> I think handling ring underrun and overrun events is probably the
> right approach here. I started putting together some tests, but ran
> out of time. I hope to spend some more time on it this weekend.
> 
> My current thinking is that for an URB submitted after an underrun or
> overrun has actually occurred, but before the xrun event is reported
> or handled, there will be no way to determine its true start frame,
> since it will have been submitted with SIA set.
> 
> However, because completions are processed in order, the HCD should
> still be able to determine by completion time whether an xrun occurred
> before completion of the URB, and could therefore indicate to the
> completion handler that the reported start_frame is uncertain.
> 
> Hopefully, USB drivers could then detect the discontinuity either:

I've been working on a solution like this

If URB is submitted after a overrun/underrun then re-calculate its
urb->start_frame based on running microframe index

If xhci driver handles the overrun/underrun event after a new URB is
already submitted then kick the urb->start_frame forward by one ESIT

If xHCI CFC is used then don't touch urb->start_frame

I promised to focus on xHCI DbC issues next week so I'll share v3 now
even if it again is not tested at all, and has some 'FIXME' cases left.
First two patches are the same as v2.

Code should work and be testable

It does change a bit how MSE (+ skip flag) + overrun/underrun cases are
handled. I haven't fully yet figured out all those cases, hopefully this
doesn't make it much worse.

Would be good to get Michal's comment on that

I
> 
> Not to repeat myself too much, but I think this discussion also helps
> illustrate the value of allowing drivers to supply a specified
> start_frame, since xrun events become much less likely when scheduling
> sufficiently far into the future. That said, I think it is worth
> sorting out these underlying frame id calculation issues first.

Maybe we could add something like a 'delay_start_by_intervals' to the
URB? telling the host that class driver wishes stream to start n intervals
after usb was submitted.

Thanks
Mathias


  reply	other threads:[~2026-05-21 15:24 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-04 21:25 [Bug 220748] New: usb: xhci_queue_isoc_tx_prepare ignore start_frame and always assumes URB_ISO_ASAP is set bugzilla-daemon
2025-11-05  8:40 ` [Bug 220748] " bugzilla-daemon
2025-11-05  8:48 ` bugzilla-daemon
2025-11-05  8:53 ` bugzilla-daemon
2025-11-05  9:06 ` bugzilla-daemon
2025-11-05 15:47 ` bugzilla-daemon
2025-11-05 18:28 ` bugzilla-daemon
2025-11-05 18:30 ` bugzilla-daemon
2025-11-05 20:16 ` bugzilla-daemon
2025-11-05 21:18 ` bugzilla-daemon
2025-11-06  3:52 ` bugzilla-daemon
2025-11-06  8:27 ` bugzilla-daemon
2025-11-06  8:35 ` bugzilla-daemon
2025-11-06 15:03 ` bugzilla-daemon
2025-11-08 10:33 ` bugzilla-daemon
2025-11-08 16:09 ` bugzilla-daemon
2025-11-10 10:23 ` bugzilla-daemon
2025-11-10 10:42 ` bugzilla-daemon
2026-05-04 23:53 ` bugzilla-daemon
2026-05-04 23:54 ` bugzilla-daemon
2026-05-05  1:14 ` bugzilla-daemon
2026-05-05  9:59 ` bugzilla-daemon
2026-05-05 17:09 ` bugzilla-daemon
2026-05-05 17:10 ` bugzilla-daemon
2026-05-05 17:10 ` bugzilla-daemon
2026-05-05 17:13 ` bugzilla-daemon
2026-05-06 13:32 ` bugzilla-daemon
2026-05-06 15:03 ` bugzilla-daemon
2026-05-07  2:38   ` Alan Stern
2026-05-07 16:17     ` Dylan Robinson
2026-05-07 17:24       ` Alan Stern
2026-05-07 21:16         ` Dylan Robinson
2026-05-08  3:02           ` Alan Stern
2026-05-08 17:20             ` Dylan Robinson
2026-05-09  1:25               ` Alan Stern
2026-05-09 22:12               ` Michal Pecio
2026-05-10 12:39                 ` Dylan Robinson
2026-05-11 19:21                   ` [RFT PATCH] xhci: fix frame id calculation for isoc transfer Mathias Nyman
2026-05-11 19:36                     ` Mathias Nyman
2026-05-12  9:08                     ` Michal Pecio
2026-05-13 14:30                       ` Mathias Nyman
2026-05-13 14:35                         ` [RFT PATCHv2 1/2] xhci: fix frame id calculation and checks for isoc URBs Mathias Nyman
2026-05-13 14:35                           ` [RFT PATCHv2 2/2] xhci: Set frame ID field of isoc TRB when starting an isoch stream Mathias Nyman
2026-05-14 21:16                         ` [RFT PATCH] xhci: fix frame id calculation for isoc transfer Dylan Robinson
2026-05-14 22:10                           ` Dylan Robinson
2026-05-15  4:32                           ` Michal Pecio
2026-05-15 18:13                             ` Dylan Robinson
2026-05-18  7:13                               ` Michal Pecio
2026-05-21 14:20                                 ` Dylan Robinson
2026-05-21 15:24                                   ` Mathias Nyman [this message]
2026-05-21 15:27                                     ` [RFT PATCHv3 1/3] xhci: fix frame id calculation and checks for isoc URBs Mathias Nyman
2026-05-21 15:27                                       ` [RFT PATCHv3 2/3] xhci: Set frame ID field of isoc TRB when starting an isoch stream Mathias Nyman
2026-05-21 15:27                                       ` [RFT PATCHv3 3/3] xhci: tune urb->start_frame in ring overrun and underrun cases Mathias Nyman
2026-05-26  0:49                                         ` Dylan Robinson
2026-05-26 12:15                                           ` Michal Pecio
2026-05-27 20:20                                             ` Dylan Robinson
2026-05-07 21:54       ` [Bug 220748] usb: xhci_queue_isoc_tx_prepare ignore start_frame and always assumes URB_ISO_ASAP is set Michal Pecio
2026-05-08  3:09         ` Alan Stern
2026-05-08  9:41           ` Michal Pecio
2026-05-08 14:54             ` Alan Stern
2026-05-08 21:39         ` Dylan Robinson
2026-05-09 11:10           ` Michal Pecio
2026-05-09 20:18             ` Dylan Robinson
2026-05-11 19:15 ` bugzilla-daemon

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=a67e11d4-6c80-4043-9f60-ae42a15ed0d3@linux.intel.com \
    --to=mathias.nyman@linux.intel.com \
    --cc=dylan_robinson@motu.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=mathias.nyman@intel.com \
    --cc=michal.pecio@gmail.com \
    --cc=stern@rowland.harvard.edu \
    /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.