... or at least deserving of deletion in the 2.5 series.

For starters, it's always been superfluous.  "audio.c" has always
done ISO streaming without using urb->next.  It just queues a
bunch of ISO urbs, and the completion handler resubmits them

Here's how the ISO transfers are handled today by device drivers
that use urb->next:

    - Prepare a bunch of ISO urbs
    - Set them up in a ring using urb->next
    - Queue all the driver's ISO URBs at once

Host controller drivers, after issuing urb->complete for an ISO
urb with an urb->next value:

    - Make sure the ring isn't broken (*)
    - If not, resubmit the URB (**)
    - Swallow all errors 

(*) There are some minor differences in how the HCDs do this
    check.  Some have ring size limits, some don't insist on
    having a ring.  Portable drivers don't rely on such differences.
(**) This isn't like the interrupt case, which can get lots of short
    circuiting.


PROBLEMS with that current scheme include:
    - Clearly the urb->next is superfluous.  The real work
      is queuing ISO urbs (like for bulk, and often control).
    - Swallowing errors is an evil principle.  Better to have
      clean reporting paths.
    - Having that second mechanism for URB queuing has
      just confused new developers.
    - Those HCD differences aren't current problems, but
      they should still go away.
    - Removing urb->next support would simplify the host
      controller drivers.


> It sounds like we should probably move some of the checks from
> hcd_submit_urb into usb_submit_urb so they cover all of the HCD's?

Ideally, _all_ of the checks would move.  The ONLY trouble spots I know
of today relate to ISO.

My proposal is as follows:

    - Drivers should stop using urb->next, and should instead
      just re-queue ISO urbs in their completion handlers.  They
      can then at least detect the resubmit errors that would be
      swallowed today.

    - At the same time they should change to init urb->interval
      correctly.  

    - In usbcore, delete the urb->next field.  And make all the
      HCDs stop using it.

    - At some point move the hcd_submit_urb logic
      into usb_submit_urb, geting rid of that particular
      entry point in the hcd layer.  (That will let the "old
      style" hcds get rid of many/most submit-path error
      checks ... roughly at the same time they start to
      use urb->interval for iso.)

Right now, HCDs using hcd_submit_urb() will report errors if
there are urb->next values, or urb->interval isn't set.

So far as I know, these change would only affect the USB vide
drivers -- audio behaves already -- and the "old style" HCD.
("ohci-hcd" is set already.)

So you can see how small the effect on device drivers is, I
attach a patch showing how to make the 2.4 version of
"cpia_usb" work this way.  (I've got a 2.5 version too, but
nobody would see that work because of the other issues
preventing USB video from working on 2.5 ... :)

- Dave

Attachment: cpia24-0513.patch
Description: Binary data

Reply via email to