Re: Linux USB file storage gadget with new UDC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 17 Apr 2013, victor yeo wrote:

> >> g_file_storage gadget: SCSI command: Unknown xa1;  Dc=12, Du=0;  Hc=12, Hi=512
> >> g_file_storage gadget: bulk-in, length 0:
> >> [start_transfer] 43425355 12
> >> ept1 in queue len 0x0, buffer 0xc12ac000
> >> g_file_storage gadget: bulk-in set halt
> 
> I think here is the problem: the  bulk-in of length 0. This zero
> length packet is never sent out nor received by the host. What is this
> zero length packet?

A data packet has three parts:

	a Packet ID (PID) byte, which is either DATA0 or DATA1 for
	bulk transfers;

	some variable number N of data bytes;

	two Cyclic Redundancy Check (CRC) bytes.

A zero-length data packet is one in which N = 0.  Such packets contain
exactly three bytes: a PID and two CRC bytes.  See Sections 8.3 and
8.4.4 of the USB-2.0 specification.

> >> kagen2_set_halt 1 1
> >> g_file_storage gadget: sending command-failure status
> >> g_file_storage gadget:   sense data: SK x05, ASC x20, ASCQ x00;  info x0
> >> g_file_storage gadget: bulk-in, length 13:
> >> 00000000: 55 53 42 53 12 00 00 00 00 02 00 00 01
> >> [start_transfer] 53425355 12
> >> ept1 in queue len 0xd, buffer 0xc133c000
> >> 0: 0x53425355
> >> 4: 0x12
> >> 8: 0x200
> 
> In comparison, the CSW is sent out and received by the host.

Yes.  You are right; the usbmon trace shows that the host did not 
receive the zero-length packet.

> > It looks like the UDC driver get hung up right here, somewhere inside
> > the usb_ep_queue() routine.
> 
> I think the usb_ep_queue() routine is re-entrant. If one instance of
> it hangs, the next instance will not be affected.

That doesn't matter.  If send_status() calls start_transfer(), which 
calls usb_ep_queue(), and usb_ep_queue() never returns, then 
send_status() never returns and therefore the main loop in 
fsg_main_thread() can't continue past the call to send_status().  It 
never loops back for another call to get_next_command().

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux