public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Boaz Harrosh <bharrosh@panasas.com>
To: Ramya Desai <ramya.desai@gmail.com>,
	USB list <linux-usb@vger.kernel.org>
Cc: linux-scsi@vger.kernel.org
Subject: Re: Return of PENDING status to SCSI driver
Date: Mon, 15 Jun 2009 15:29:40 +0300	[thread overview]
Message-ID: <4A363EB4.8000102@panasas.com> (raw)
In-Reply-To: <3e7aae30906150507h5927319as8fcf2bd61eba6b83@mail.gmail.com>

On 06/15/2009 03:07 PM, Ramya Desai wrote:
> On 6/14/09, Boaz Harrosh <bharrosh@panasas.com> wrote:
>> On 06/12/2009 03:54 PM, Ramya Desai wrote:
>>  > On 6/12/09, Jeff Garzik <jeff@garzik.org> wrote:
>>  >> Ramya Desai wrote:
>>  >>
>>  >>> Dear Experts,
>>  >>>
>>  >>> I am writing my mass storage class driver for my custom USB device.
>>  >>> My device is capable of queuing the commands that are issued to it.
>>  >>> So, I wanted to send the second command from my driver even before the
>>  >>> completion of first command.
>>  >>> To do this I wanted to return the PENDING status to the SCSI layer
>>  >>> immediately after receiving the command.
>>  >>>
>>  >>  Simply queue as many commands as possible to your hardware, and complete
>>  >> them when they are done.  Use can_queue or scsi_adjust_queue_depth() to set
>>  >> queueing limits.
>>  >>
>>  >>         Jeff
>>  >
>>  > I used can_queue  to change the queue depth to 5, but I am not getting
>>  > the next command until I finish (Done) the first command. I wanted the
>>  > second command to come to my driver, even before first command
>>  > finishes.
>>  >
>>  > -RD
>>
>>
>> If you are using the existing USB mass storage infrastructure then
>>  it will not work. This is because all commands are issued from a
>>  thread per host, which does a synchronous execution of one command
>>  at a time. In fact it does not even have a Q, but a global one cmnd
>>  pointer per host. And therefor sets can_queue to 1.
>>
>>  Are you using the existing USB infrastructure?
>>
>>
>>  Boaz
>>
> I am replacing the default USB mass storage driver with the one I am
> developing. But I am using the default SCSI and USB stack provided by
> Linux.
> 
> So is there any another way to make my driver asynchronous?
> 
> -RD

I was afraid so.

There is a lot of code you will need to change in current USB storage stack
SCSI is built with native support for queuing, but not so USB-storage-stack.

You will need to first remove from "struct us_data" (drivers/usb/storage/usb.h)
the:
	/* SCSI interfaces */
	struct scsi_cmnd	*srb;		 /* current srb		*/
	unsigned int		tag;		 /* current dCBWTag	*/

which is the assumption that there is only one scsi_cmnd per usb-host.
And fix everything that got broken, by properly associating the command
tag with the scsi_cmnd structure or what ever way your controller supports
individual command addressing. Probably lots of current APIs that only receive
an "struct us_data *" today will need an extra "struct scsi_cmnd *". And so on ...
Not an easy task if you are not familiar with USB and SCSI code.

That said, it is certainly doable. Perhaps other USB people need this too,
and can help you...

[CCing USB list <linux-usb@vger.kernel.org>]
 
Boaz

  parent reply	other threads:[~2009-06-15 12:29 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-12  9:29 Return of PENDING status to SCSI driver Ramya Desai
2009-06-12 11:32 ` Jeff Garzik
2009-06-12 12:54   ` Ramya Desai
2009-06-12 17:26     ` Stefan Richter
2009-06-14  9:16     ` Boaz Harrosh
2009-06-15 12:07       ` Ramya Desai
2009-06-15 12:26         ` Matthew Wilcox
2009-06-15 12:29         ` Boaz Harrosh [this message]
     [not found]           ` <4A363EB4.8000102-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2009-06-15 14:01             ` Alan Stern
2009-06-15 14:07               ` Ramya Desai
     [not found]                 ` <3e7aae30906150707we781237o366950971d748b6f-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-06-15 14:33                   ` Boaz Harrosh
2009-06-15 14:42                     ` Ramya Desai
     [not found]                       ` <3e7aae30906150742l18e74a8fua5f08686c2c76454-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-06-15 14:50                         ` Ramya Desai
     [not found]                           ` <3e7aae30906150750m6809aa87v35f739e0a72243d-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-06-15 14:59                             ` Matthew Dharm
2009-06-15 14:59                         ` Alan Stern
2009-06-15 16:31                         ` Boaz Harrosh
     [not found]                           ` <4A36776C.5010208-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2009-06-16 13:35                             ` Ramya Desai
2009-06-16 13:59                               ` Alan Cox
2009-06-16 14:27                               ` Boaz Harrosh
2009-06-16 14:39                                 ` James Bottomley
     [not found]                                 ` <4A37ABDC.4050308-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2009-06-16 15:09                                   ` Ramya Desai
2009-06-16 15:22                                     ` Alan Stern
     [not found]                                     ` <3e7aae30906160809y32f0c8f6j3352cd1ec2bfe34a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-06-16 15:27                                       ` Boaz Harrosh
     [not found]                               ` <3e7aae30906160635g4d191a4exdb710554a349cac0-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-06-16 15:13                                 ` Alan Stern
2009-06-15 17:19                       ` Jeff Garzik
2009-06-15 14:40                   ` Alan Stern
2009-06-15 14:42               ` Boaz Harrosh
     [not found]                 ` <4A365DCA.2030907-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2009-06-15 14:49                   ` 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=4A363EB4.8000102@panasas.com \
    --to=bharrosh@panasas.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=ramya.desai@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox