On 26.02.2015 16:57, Alan Stern wrote:
> On Thu, 26 Feb 2015, Mathias Nyman wrote:
>
>> I'm starting to like your idea of setting the urb->actual_length in advance,
>> It may actually simplify things.
>
> But it will make unlinking more difficult. Also, what will you do if
> there is more than one TRB?
>
current xhci driver can't handle more than one data trb in control tranfers:
xhci-ring.c,
int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
struct urb *urb, int slot_id, unsigned int ep_index)
...
/* 1 TRB for setup, 1 for status */
num_trbs = 2;
/*
* Don't need to check if we need additional event data and normal
TRBs,
* since data in control transfers will never get bigger than 16MB
* XXX: can we get a buffer that crosses 64KB boundaries?
*/
if (urb->transfer_buffer_length > 0)
num_trbs++;
Shouldn't control urbs only be given back when they finish (SUCCESS, STALL,
SHORT etc),
are dequeued, or some major host failure causes us to empty the rings?
I thought it would be enough to set urb->actual_length = 0 for the ctrl URBs in
all other
cases than short or successful completion?
I'll send a RFC so you can see if it makes sense to try out this path, or If Im
only shooting
myself in the foot.
-Mathias
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html