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

On Thu, Apr 15, 2021 at 01:23:21PM +0200, Oliver Neukum wrote:
> 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?

Tail, so that the list's order will be the same as the order in which 
URBs were added.

> > 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?

It should work okay.  Really I was just concerned about 
usb_submit_anchored_urbs using the wrong order.  People need to be aware 
that the the order may be wrong.  Put a big warning about it in the 
kerneldoc.

As for reordering the URBs in the list...  I suppose it's unavoidable if 
the URBs can be for different endpoints.  I think it makes more sense to 
do it when the URBs are submitted; that way you know that the list order 
matches the submission order at all times.  But it means you have to be 
careful when submitting all the URBs at once -- especially if a 
completion handler resubmits -- because you want to avoid submitting an 
URB twice.

> 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?

Doesn't matter.  Whatever is easiest.

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

Yes.

Alan Stern

      reply	other threads:[~2021-04-15 15:20 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
2021-04-15 15:18                     ` Alan Stern [this message]

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=20210415151810.GA6837@rowland.harvard.edu \
    --to=stern@rowland.harvard.edu \
    --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.