* Re: Recommendations on user-space soft/hardreset
[not found] <6b01c6170707171723p4fdae403hf5b605fce4595b7@mail.gmail.com>
@ 2007-07-18 0:34 ` Yasha Okshtein
2007-07-18 0:45 ` Alan Cox
2007-07-18 3:35 ` Tejun Heo
0 siblings, 2 replies; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 0:34 UTC (permalink / raw)
To: linux-ide
Hello all,
I need to send soft and/or hard resets from userspace. As no such
method exists, I decided to write one. I wrote a hackish sysfs
interface; now I'm cleaning it up for official submission. My current
plan is:
- each driver, in ata_port_operations, specifies a soft_reset and
hard_reset functions, which take ata_port* as a parameter
- in ata_scsi_pass_through, check for HARDRESET and SRST, and call
respective driver's soft/hard reset function
Now here's where I'm not quite certain on how to proceed. Another
developer has recommended that the reset be performed from an error
context, so that pre/post reset get called automatically. However,
there's a few issues, one of which is, as I was told, that the user
process will resume before the reset is complete. Thus the user sends
SG_IO and gets an immediate response, before the reset is finished,
whereas running the reset command directly blocks the user process
until the drive returns.
So the question is: should the driver simply call prereset, optionally
hardreset, softreset, and postreset, or set up the error handler
context to do it?
Thanks,
- Yasha
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 0:34 ` Yasha Okshtein
@ 2007-07-18 0:45 ` Alan Cox
2007-07-18 1:00 ` Yasha Okshtein
2007-07-18 3:35 ` Tejun Heo
1 sibling, 1 reply; 14+ messages in thread
From: Alan Cox @ 2007-07-18 0:45 UTC (permalink / raw)
To: flyashi; +Cc: linux-ide
> - each driver, in ata_port_operations, specifies a soft_reset and
> hard_reset functions, which take ata_port* as a parameter
They already have them via the EH code.
> - in ata_scsi_pass_through, check for HARDRESET and SRST, and call
> respective driver's soft/hard reset function
Old IDE has an ioctl for it - it would be good to provide this for
compatibility as we have with some other needed ioctls.
> Now here's where I'm not quite certain on how to proceed. Another
> developer has recommended that the reset be performed from an error
> context, so that pre/post reset get called automatically. However,
> there's a few issues, one of which is, as I was told, that the user
> process will resume before the reset is complete. Thus the user sends
> SG_IO and gets an immediate response, before the reset is finished,
> whereas running the reset command directly blocks the user process
> until the drive returns.
>
> So the question is: should the driver simply call prereset, optionally
> hardreset, softreset, and postreset, or set up the error handler
> context to do it?
I think you have to do the latter. I see no other way to get the locking
right, and the old IDE was horrible (and broken) because it tried to do
it in the user context. drivers/ide is a worked example of why *NOT* to
simply call the methods. The EH just needs triggering and can do the rest
sanely in a sensible context without adding new methods to the drivers.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 0:45 ` Alan Cox
@ 2007-07-18 1:00 ` Yasha Okshtein
2007-07-18 1:18 ` Yasha Okshtein
2007-07-18 12:54 ` Alan Cox
0 siblings, 2 replies; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 1:00 UTC (permalink / raw)
To: Alan Cox; +Cc: linux-ide
As an example, I'll use the sata_sil24 driver, as that's what I'll be
using on my machine (until sata_mv comes around)
On 7/17/07, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
> > - each driver, in ata_port_operations, specifies a soft_reset and
> > hard_reset functions, which take ata_port* as a parameter
>
> They already have them via the EH code.
You mean:
static const struct ata_port_operations sil24_ops = {
...
.error_handler = sil24_error_handler,
...
which then calls
ata_do_eh(ap, ata_std_prereset, sil24_softreset, sil24_hardreset,
ata_std_postreset);
How to then specify if you just need a softreset? My understanding is
all those functions get called.
>
> > - in ata_scsi_pass_through, check for HARDRESET and SRST, and call
> > respective driver's soft/hard reset function
>
> Old IDE has an ioctl for it - it would be good to provide this for
> compatibility as we have with some other needed ioctls.
Well, the SAT way of specifying soft/hardresets I found at [1] on page
104, and the basis for this is already in libata, just not
implemented: see ata_scsi_map_proto. Implementing it there seems more
compatible with the standard.
> > So the question is: should the driver simply call prereset, optionally
> > hardreset, softreset, and postreset, or set up the error handler
> > context to do it?
>
> I think you have to do the latter. I see no other way to get the locking
> right, and the old IDE was horrible (and broken) because it tried to do
> it in the user context. drivers/ide is a worked example of why *NOT* to
> simply call the methods. The EH just needs triggering and can do the rest
> sanely in a sensible context without adding new methods to the drivers.
>
Ugh.. I figured, I was just hoping I wouldn't have to deal with that.
Any idea on what happens to the user process (blocking, etc.) during
error handling? Surely if a disk needs to be hardreset during a normal
error, the user process doesn't hang for up to 30 seconds?
- Yasha
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 1:00 ` Yasha Okshtein
@ 2007-07-18 1:18 ` Yasha Okshtein
2007-07-18 12:54 ` Alan Cox
1 sibling, 0 replies; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 1:18 UTC (permalink / raw)
To: Alan Cox; +Cc: linux-ide
Sorry forgot to link to http://www.t10.org/drafts.htm , one of which is:
http://www.t10.org/ftp/t10/drafts/sat/sat-r09.pdf
Page 104 was what I was following for my initial implementation plan.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 0:34 ` Yasha Okshtein
2007-07-18 0:45 ` Alan Cox
@ 2007-07-18 3:35 ` Tejun Heo
2007-07-18 4:04 ` Yasha Okshtein
1 sibling, 1 reply; 14+ messages in thread
From: Tejun Heo @ 2007-07-18 3:35 UTC (permalink / raw)
To: flyashi; +Cc: linux-ide
Yasha Okshtein wrote:
> I need to send soft and/or hard resets from userspace.
Actually, you can do it by requesting manual rescan of the SCSI host.
"echo - - - > /sys/class/scsi_host/hostX/scan".
--
tejun
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 3:35 ` Tejun Heo
@ 2007-07-18 4:04 ` Yasha Okshtein
2007-07-18 4:15 ` Tejun Heo
0 siblings, 1 reply; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 4:04 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide
Well ideally this should work with a port multiplier to soft/hardreset
only one disk behind the multiplier. Also, this again doesn't allow
the user to specify soft or hard reset - I believe rescanning forces
hardresets. Fully implementing the SATA spec, which should eventually
be done anyway, seems like a cleaner solution.
On 7/17/07, Tejun Heo <htejun@gmail.com> wrote:
> Yasha Okshtein wrote:
> > I need to send soft and/or hard resets from userspace.
>
> Actually, you can do it by requesting manual rescan of the SCSI host.
> "echo - - - > /sys/class/scsi_host/hostX/scan".
>
> --
> tejun
>
--
"I have never let my schooling interfere with my education."
- Samuel Langhorne Clemens
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 4:04 ` Yasha Okshtein
@ 2007-07-18 4:15 ` Tejun Heo
2007-07-18 5:01 ` Yasha Okshtein
0 siblings, 1 reply; 14+ messages in thread
From: Tejun Heo @ 2007-07-18 4:15 UTC (permalink / raw)
To: flyashi; +Cc: linux-ide
Yasha Okshtein wrote:
> Well ideally this should work with a port multiplier to soft/hardreset
> only one disk behind the multiplier.
You can do that too. Just do 'echo x - -' where x corresponds to the
PMP port number. On older versions it's 'echo - x -'.
> Also, this again doesn't allow
> the user to specify soft or hard reset - I believe rescanning forces
> hardresets. Fully implementing the SATA spec, which should eventually
> be done anyway, seems like a cleaner solution.
It defaults to softreset.
--
tejun
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 4:15 ` Tejun Heo
@ 2007-07-18 5:01 ` Yasha Okshtein
2007-07-18 5:08 ` Tejun Heo
0 siblings, 1 reply; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 5:01 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide
On 7/17/07, Tejun Heo <htejun@gmail.com> wrote:
> Yasha Okshtein wrote:
> > Well ideally this should work with a port multiplier to soft/hardreset
> > only one disk behind the multiplier.
>
> You can do that too. Just do 'echo x - -' where x corresponds to the
> PMP port number. On older versions it's 'echo - x -'.
Nice, thanks!
> > Also, this again doesn't allow
> > the user to specify soft or hard reset - I believe rescanning forces
> > hardresets. Fully implementing the SATA spec, which should eventually
> > be done anyway, seems like a cleaner solution.
>
> It defaults to softreset.
That still leaves the original problem of hardresets :)
- yasha
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 5:01 ` Yasha Okshtein
@ 2007-07-18 5:08 ` Tejun Heo
2007-07-18 6:13 ` Yasha Okshtein
0 siblings, 1 reply; 14+ messages in thread
From: Tejun Heo @ 2007-07-18 5:08 UTC (permalink / raw)
To: flyashi; +Cc: linux-ide
Yasha Okshtein wrote:
>> It defaults to softreset.
>
> That still leaves the original problem of hardresets :)
Yeah, I know, but with all other things served well by SCSI scan
request, I don't really think another reset request mechanism is too
compelling. After all, why do you care whether SRST or HRST is used?
It's a reset anyway.
--
tejun
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 5:08 ` Tejun Heo
@ 2007-07-18 6:13 ` Yasha Okshtein
0 siblings, 0 replies; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 6:13 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide
On 7/17/07, Tejun Heo <htejun@gmail.com> wrote:
> After all, why do you care whether SRST or HRST is used?
> It's a reset anyway.
The softreset doesn't do what I need, which is to firmware upgrade a
certain drive model. While reloading the module does work, this takes
a while given the number of disks per machine (and lots of machines).
I've got a (hackish) way to do what I need, but I was hoping someone
else out there other than me needed a better way. And as it stands,
libata's implementation of the pass-through spec is incomplete.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 1:00 ` Yasha Okshtein
2007-07-18 1:18 ` Yasha Okshtein
@ 2007-07-18 12:54 ` Alan Cox
2007-07-18 16:49 ` Yasha Okshtein
1 sibling, 1 reply; 14+ messages in thread
From: Alan Cox @ 2007-07-18 12:54 UTC (permalink / raw)
To: flyashi; +Cc: linux-ide
> You mean:
>
> static const struct ata_port_operations sil24_ops = {
> ...
> .error_handler = sil24_error_handler,
> ...
> which then calls
> ata_do_eh(ap, ata_std_prereset, sil24_softreset, sil24_hardreset,
> ata_std_postreset);
>
> How to then specify if you just need a softreset? My understanding is
> all those functions get called.
The neccessary parts get called from libata-eh based upon the flags set
by the error code to indicate how to recover.
> Ugh.. I figured, I was just hoping I wouldn't have to deal with that.
> Any idea on what happens to the user process (blocking, etc.) during
> error handling? Surely if a disk needs to be hardreset during a normal
> error, the user process doesn't hang for up to 30 seconds?
It stalls.
Alan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-18 12:54 ` Alan Cox
@ 2007-07-18 16:49 ` Yasha Okshtein
0 siblings, 0 replies; 14+ messages in thread
From: Yasha Okshtein @ 2007-07-18 16:49 UTC (permalink / raw)
To: Alan Cox; +Cc: linux-ide
On 7/18/07, Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:
> The neccessary parts get called from libata-eh based upon the flags set
> by the error code to indicate how to recover.
I see... now let me see if I have this straight:
- ata_scsi_pass_thru checks and sees that it's a (soft,hard)reset
- sets up eh_info.action with either ATA_EH_HARDRESET or ATA_EH_SOFTRESET
- calls ata_port_schedule_eh(ap);
>From there, I think the error handler gets queued, but the user
process returns. The other option for the last step would be to call
the driver's error_handler directly.
This method seems to me like a better solution.
- Yasha
^ permalink raw reply [flat|nested] 14+ messages in thread
* Recommendations on user-space soft/hardreset
@ 2007-07-20 15:14 Fajun Chen
2007-07-22 12:20 ` Tejun Heo
0 siblings, 1 reply; 14+ messages in thread
From: Fajun Chen @ 2007-07-20 15:14 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide@vger.kernel.org
Yasha Okshtein wrote:
> I need to send soft and/or hard resets from userspace.
>>Actually, you can do it by requesting manual rescan of the SCSI host.
>>"echo - - - > /sys/class/scsi_host/hostX/scan"
I've been using this approach to spin up a PATA drive. However, I
have not figured out a way to return user scan result from kernel.
For instance, how can I tell if the scan failed at reset or Identify
Device from user space?
Thanks,
Fajun
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Recommendations on user-space soft/hardreset
2007-07-20 15:14 Recommendations on user-space soft/hardreset Fajun Chen
@ 2007-07-22 12:20 ` Tejun Heo
0 siblings, 0 replies; 14+ messages in thread
From: Tejun Heo @ 2007-07-22 12:20 UTC (permalink / raw)
To: Fajun Chen; +Cc: linux-ide@vger.kernel.org
Fajun Chen wrote:
> Yasha Okshtein wrote:
>> I need to send soft and/or hard resets from userspace.
>
>>> Actually, you can do it by requesting manual rescan of the SCSI host.
>>> "echo - - - > /sys/class/scsi_host/hostX/scan"
>
> I've been using this approach to spin up a PATA drive. However, I
> have not figured out a way to return user scan result from kernel.
> For instance, how can I tell if the scan failed at reset or Identify
> Device from user space?
Hmm... As it currently stands, you cannot.
--
tejun
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2007-07-22 12:20 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-20 15:14 Recommendations on user-space soft/hardreset Fajun Chen
2007-07-22 12:20 ` Tejun Heo
[not found] <6b01c6170707171723p4fdae403hf5b605fce4595b7@mail.gmail.com>
2007-07-18 0:34 ` Yasha Okshtein
2007-07-18 0:45 ` Alan Cox
2007-07-18 1:00 ` Yasha Okshtein
2007-07-18 1:18 ` Yasha Okshtein
2007-07-18 12:54 ` Alan Cox
2007-07-18 16:49 ` Yasha Okshtein
2007-07-18 3:35 ` Tejun Heo
2007-07-18 4:04 ` Yasha Okshtein
2007-07-18 4:15 ` Tejun Heo
2007-07-18 5:01 ` Yasha Okshtein
2007-07-18 5:08 ` Tejun Heo
2007-07-18 6:13 ` Yasha Okshtein
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).