From: Tejun Heo <htejun@gmail.com>
To: jgarzik@pobox.com, lkml@rtr.ca, axboe@suse.de,
forrest.zhao@intel.com, alan@lxorguk.ukuu.org.uk,
linux-ide@vger.kernel.org
Cc: Tejun Heo <htejun@gmail.com>
Subject: [PATCH 05/10] libata: implement new EH action ATA_EH_SPINUP
Date: Tue, 13 Jun 2006 00:50:29 +0900 [thread overview]
Message-ID: <11501274283970-git-send-email-htejun@gmail.com> (raw)
In-Reply-To: <11501274284082-git-send-email-htejun@gmail.com>
Implement new EH action ATA_EH_SPINUP. This will be used by new PM
implementation.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
drivers/scsi/libata-eh.c | 36 ++++++++++++++++++++++++++++++++++++
include/linux/libata.h | 1 +
2 files changed, 37 insertions(+), 0 deletions(-)
c0a5ccaf24b0acc3e03c4b265ef6495db36623ae
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c
index 531a4e1..8711e83 100644
--- a/drivers/scsi/libata-eh.c
+++ b/drivers/scsi/libata-eh.c
@@ -1585,6 +1585,37 @@ static int ata_eh_revalidate_and_attach(
return rc;
}
+static int ata_eh_spinup(struct ata_port *ap, struct ata_device **r_failed_dev)
+{
+ struct ata_eh_context *ehc = &ap->eh_context;
+ struct ata_device *dev;
+ unsigned int err_mask = 0;
+ int i;
+
+ if (!(ehc->i.action & ATA_EH_SPINUP))
+ return 0;
+
+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
+ dev = &ap->device[i];
+
+ if (dev->class != ATA_DEV_ATA)
+ continue;
+
+ ata_eh_about_to_do(ap, ATA_EH_SPINUP);
+ err_mask = ata_do_simple_cmd(dev, ATA_CMD_IDLEIMMEDIATE);
+ if (err_mask)
+ break;
+ }
+
+ if (err_mask == 0) {
+ ehc->i.action &= ~ATA_EH_SPINUP;
+ return 0;
+ } else {
+ *r_failed_dev = dev;
+ return -EIO;
+ }
+}
+
static int ata_port_nr_enabled(struct ata_port *ap)
{
int i, cnt = 0;
@@ -1711,6 +1742,11 @@ static int ata_eh_recover(struct ata_por
if (rc)
goto dev_fail;
+ /* spin up if requested */
+ rc = ata_eh_spinup(ap, &dev);
+ if (rc)
+ goto dev_fail;
+
/* configure transfer mode if the port has been reset */
if (ehc->i.flags & ATA_EHI_DID_RESET) {
rc = ata_set_mode(ap, &dev);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 17c8ced..e5ff148 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -246,6 +246,7 @@ enum {
ATA_EH_REVALIDATE = (1 << 0),
ATA_EH_SOFTRESET = (1 << 1),
ATA_EH_HARDRESET = (1 << 2),
+ ATA_EH_SPINUP = (1 << 3),
ATA_EH_RESET_MASK = ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
--
1.3.2
next prev parent reply other threads:[~2006-06-12 15:50 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-12 15:50 [PATCHSET] new Power Management for libata Tejun Heo
2006-06-12 15:50 ` [PATCH 04/10] libata: update ata_do_simple_cmd() Tejun Heo
2006-06-12 15:50 ` [PATCH 02/10] libata: kill per-device PM Tejun Heo
2006-06-12 15:50 ` [PATCH 03/10] libata: move ata_do_simple_cmd() right below ata_exec_internal() Tejun Heo
2006-06-12 15:50 ` [PATCH 01/10] libata: power down controller only on PMSG_SUSPEND Tejun Heo
2006-06-12 16:32 ` Jeff Garzik
2006-06-13 2:20 ` Tejun Heo
2006-06-12 15:50 ` [PATCH 10/10] sata_sil24: add suspend/sleep support Tejun Heo
2006-06-12 15:50 ` Tejun Heo [this message]
2006-06-14 1:18 ` [PATCH 05/10] libata: implement new EH action ATA_EH_SPINUP Jeff Garzik
2006-06-14 15:02 ` Tejun Heo
2006-06-14 15:25 ` Alan Cox
2006-06-12 15:50 ` [PATCH 09/10] sata_sil24: separate out sil24_init_controller() Tejun Heo
2006-06-12 15:50 ` [PATCH 07/10] sata_sil: separate out sil_init_controller() Tejun Heo
2006-06-12 15:50 ` [PATCH 08/10] sata_sil: add suspend/sleep support Tejun Heo
2006-06-12 15:50 ` [PATCH 06/10] libata: implement new Power Management framework Tejun Heo
2006-06-12 16:34 ` Alan Cox
2006-06-13 2:08 ` Tejun Heo
2006-06-13 6:25 ` zhao, forrest
2006-06-13 8:56 ` Tejun Heo
2006-06-13 11:59 ` Jeff Garzik
2006-06-13 8:17 ` zhao, forrest
2006-06-13 9:00 ` Tejun Heo
2006-06-13 8:54 ` zhao, forrest
2006-06-13 9:15 ` Tejun Heo
2006-06-13 8:37 ` zhao, forrest
2006-06-14 7:56 ` zhao, forrest
2006-06-14 13:29 ` Tejun Heo
2006-06-15 1:33 ` zhao, forrest
2006-06-15 3:41 ` Tejun Heo
2006-06-12 15:57 ` [PATCHSET] new Power Management for libata Tejun Heo
2006-06-13 6:28 ` zhao, forrest
2006-06-13 9:09 ` rolled up patch for " Tejun Heo
2006-06-13 10:38 ` Jens Axboe
2006-06-19 5:46 ` Jens Axboe
2006-06-14 1:25 ` [PATCHSET] " Jeff Garzik
2006-06-14 13:46 ` Tejun Heo
2006-06-19 5:18 ` zhao, forrest
2006-06-19 8:46 ` Tejun Heo
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=11501274283970-git-send-email-htejun@gmail.com \
--to=htejun@gmail.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=axboe@suse.de \
--cc=forrest.zhao@intel.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=lkml@rtr.ca \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.