linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <htejun@gmail.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: alan@lxorguk.ukuu.org.uk, axboe@suse.de, albertcc@tw.ibm.com,
	lkosewsk@gmail.com, linux-ide@vger.kernel.org
Subject: Re: [PATCH 11/16] libata-eh-fw: implement new EH scheduling via timeout
Date: Thu, 13 Apr 2006 12:36:49 +0900	[thread overview]
Message-ID: <443DC751.8090209@gmail.com> (raw)
In-Reply-To: <443DC2E8.8000005@pobox.com>

Jeff Garzik wrote:
> Tejun Heo wrote:
>> The problem is that the timeout handler doesn't have anyway to 
>> determine whether the timeout is from real timeout or from DMA error, 
>> and the 
> 
> Not true at all.  Just read BMDMA status.  Take a look at what 
> drivers/ide does.

Yeap, what I meant was the current timeout handler implementation 
doesn't have any way to do that, so later in the previous reply, I 
talked about ->timeout_autopsy.

> 
>> timeout handler is responsible for transferring the ownership the 
>> failed port to EH.  EH, on entry, must be guaranteed that it owns the 
>> port if it's not frozen.
>>
>> One way around this would be making a new callback, say, 
>> ->timeout_autopsy and let it decide whether the port needs freezing or 
>> not, but it would be an overkill.  The only side effect of being 
>> frozen is that the port will get a softreset to thaw it, which isn't 
>> so bad - I want my controller to get a good spanking in the ass after 
>> sitting idle for 30secs.
> 
> When presented with standard, documented DMA error behavior, a reset is 
> inappropriate.  Just ACK the DMA error and move on with life.  If 
> continuous DMA errors occur, reset and/or step down the speed as was 
> discussed many months ago.

The speeding down part is the same whether the port is frozen or not. 
The only difference is how EH recovers the port after the error.  Failed 
devices on a not frozen port are just revalidated while a frozen port 
gets a reset.

Here is another method to deal with it as adding ->timeout_autopsy or 
anything similar is too unattractive.  A new interface, say, 
ata_eh_thaw_port() can be implemented which thaws the port without 
resetting it.  Then, in BMDMA autopsy, after determining that a timeout 
was caused by DMA error, it can thaw the port and adjust qc->err_mask to 
AC_ERR_HOST_BUS.  How does it sound to you?

> Get the user back up and talking to their disk as fast as possible.

Command timeout is 30 secs (which, I think is a bit too long for ATA 
disk devices).  If resetting succeeds, it takes less than two seconds. 
I don't think it will make any difference to the user.

-- 
tejun

  reply	other threads:[~2006-04-13  3:37 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-11 13:42 [PATCHSET 5/9] new EH framework, take 2 Tejun Heo
2006-04-11 13:42 ` [PATCH 01/16] libata-eh-fw: add flags for new EH Tejun Heo
2006-04-11 13:42 ` [PATCH 02/16] libata-eh-fw: add new EH operations Tejun Heo
2006-04-11 13:42 ` [PATCH 06/16] libata-eh-fw: use special reserved tag and qc for internal commands Tejun Heo
2006-04-11 13:42 ` [PATCH 05/16] libata-eh-fw: clear SError in ata_std_postreset() Tejun Heo
2006-04-11 13:42 ` [PATCH 10/16] libata-eh-fw: implement ata_eh_schedule_port() Tejun Heo
2006-04-11 13:42 ` [PATCH 03/16] libata-eh-fw: hold host_set lock while finishing internal qc Tejun Heo
2006-04-11 13:42 ` [PATCH 04/16] libata-eh-fw: clear IRQ in ata_std_postreset() Tejun Heo
2006-04-11 13:42 ` [PATCH 07/16] libata-eh-fw: implement ata_port_freeze() Tejun Heo
2006-04-11 13:42 ` [PATCH 11/16] libata-eh-fw: implement new EH scheduling via timeout Tejun Heo
2006-04-12 22:36   ` Jeff Garzik
2006-04-13  2:40     ` Tejun Heo
2006-04-13  3:18       ` Jeff Garzik
2006-04-13  3:36         ` Tejun Heo [this message]
2006-04-27 11:33           ` Jeff Garzik
2006-04-29 21:13             ` Alan Cox
2006-04-11 13:42 ` [PATCH 08/16] libata-eh-fw: update ata_qc_from_tag() to enforce normal/EH qc ownership Tejun Heo
2006-04-11 13:42 ` [PATCH 12/16] libata-eh-fw: implement new EH scheduling from PIO Tejun Heo
2006-04-11 13:42 ` [PATCH 09/16] libata-eh-fw: implement new EH scheduling via error completion Tejun Heo
2006-04-11 13:42 ` [PATCH 14/16] libata-eh-fw: activate ->post_internal_cmd Tejun Heo
2006-04-11 13:42 ` [PATCH 13/16] libata-eh-fw: activate ->error_handler Tejun Heo
2006-04-11 13:42 ` [PATCH 16/16] libata-eh-fw: update ata_interrupt() to handle frozen port properly Tejun Heo
2006-04-12 22:40   ` Jeff Garzik
2006-04-13  2:59     ` Tejun Heo
2006-04-11 13:42 ` [PATCH 15/16] libata-eh-fw: update SCSI command completion path for new EH Tejun Heo
2006-04-12 22:41 ` [PATCHSET 5/9] new EH framework, take 2 Jeff Garzik

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=443DC751.8090209@gmail.com \
    --to=htejun@gmail.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=albertcc@tw.ibm.com \
    --cc=axboe@suse.de \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=lkosewsk@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;
as well as URLs for NNTP newsgroup(s).