All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oliver Neukum <oneukum@suse.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-usb@vger.kernel.org
Subject: Re: [RFC]extension of the anchor API
Date: Thu, 15 Apr 2021 13:23:21 +0200	[thread overview]
Message-ID: <72d092726448607af2fd453c48be5b0ba69e617a.camel@suse.com> (raw)
In-Reply-To: <20210414145608.GB1493067@rowland.harvard.edu>

Am Mittwoch, den 14.04.2021, 10:56 -0400 schrieb Alan Stern:
> On Wed, Apr 14, 2021 at 10:12:01AM +0200, Oliver Neukum wrote:
> > Am Montag, den 12.04.2021, 11:06 -0400 schrieb Alan Stern:
> > > On Mon, Apr 12, 2021 at 11:58:16AM +0200, Oliver Neukum wrote:
> > > > That presumes that the URBs will finish in order. I don't think such
> > > > an assumption can be made.
> > > 
> > > I don't understand -- I can't detect any such presumption.
> > 
> > OK, this shows that I am bad at explaining.
> > > As far as I can tell, the only reason for maintaining the URBs in any 
> > > particular order on the anchor list is so that usb_kill_anchored_urbs 
> > > and usb_poison_anchored_urbs can kill them in reverse order of 
> > > submission.  THat's why the current code moves completed URBs to the end 
> > > of the list.
> > 
> > No longer strictly true, as the API has a call to submit everything
> > on an anchor, but I think it boils down to the same thing.
> > 
> > > If you keep a pointer to the most recently submitted URB, killing them 
> > > easy enough to do.  Start with that URB, then go backward through the 
> > > list (wrapping to the end when you reach the beginning of the list).
> > 
> > Yes, but that supposes that the next on the list has not been
> > resubmitted _before_ the one after it.
> > 
> > If you do not keep the list ordered, but in the initial order,
> > we can have the situation that A (happens most recently submitted)
> > is followed by B and C, but C was submitted before B.
> 
> I think the only reasonable alternative is to move an URB to the end of 
> the list when it is submitted, rather than when it completes.  Have you 
> considered doing it that way?

No, that did not occur to me. Back to the drawing board.
Still I have to put it somewhere when I anchor an URB. Head or tail?

> The real problem with usb_submit_anchored_urbs is that the core can't 
> know in what order the caller wants the URBs to be submitted.  If the 

I think the reasonable assumption is that they need to be submitted
in the order they were anchored.

> In the kerneldoc you can explain that if the anchor has not been used 
> since its URBs were added then the URBs will be submitted in the order 
> they were added to the anchor, but otherwise they will be submitted in 
> an unspecified order, which may not be suitable.

Yes.

> > > The order in which the URBs complete doesn't matter, because trying to 
> > > unlink a completed URB won't cause any harm.
> > 
> > As long as it stays completed.
> 
> Rather, as long as they complete in order of submission.
> 
> > >   The only assumption here 
> > > is that URBs get submitted in the list's order (possibly circularly) -- 
> > > this should always be true.
> > 
> > I am afraid we cannot guarantee that. It might intuitively seem so,
> > but nothing guarantees that all URBs are going to the same endpoint.
> 
> I hadn't thought of that.  Do anchors get used that way anywhere?

I haven't found an example, but I thought it could not be ruled out.
So you think that that case should be discouraged in documentation
and henceforth ignored?

So we do agree that we need the following:

a - submit in the order you
anchored
b - kill or poison in the reverse order
c - unpoison does not really matter but better do it in the submit
order?

Does that mean that the list needs to be kept ordered by sequence
of submission? I think so.

	Regards
		Oliver



  reply	other threads:[~2021-04-15 11:23 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-25 11:03 [RFC]extension of the anchor API Oliver Neukum
2021-03-25 13:48 ` kernel test robot
2021-03-25 15:06 ` Alan Stern
2021-03-25 16:04   ` Oliver Neukum
2021-03-25 18:38     ` Alan Stern
2021-04-08  9:23       ` Oliver Neukum
2021-04-08 15:07         ` Alan Stern
2021-04-12  9:58           ` Oliver Neukum
2021-04-12 15:06             ` Alan Stern
2021-04-14  8:12               ` Oliver Neukum
2021-04-14 14:56                 ` Alan Stern
2021-04-15 11:23                   ` Oliver Neukum [this message]
2021-04-15 15:18                     ` Alan Stern

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=72d092726448607af2fd453c48be5b0ba69e617a.camel@suse.com \
    --to=oneukum@suse.com \
    --cc=linux-usb@vger.kernel.org \
    --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.