From: Randy Dunlap <randy_d_dunlap@linux.intel.com>
To: lkml <linux-kernel@vger.kernel.org>, scsi <linux-scsi@vger.kernel.org>
Cc: linux-ide@vger.kernel.org, akpm@osdl.org, jgarzik@pobox.com,
james.bottomley@steeleye.com
Subject: [PATCH 12/13] ATA ACPI: use scsi_bus_shutdown for SATA/PATA
Date: Wed, 22 Feb 2006 14:06:08 -0800 [thread overview]
Message-ID: <20060222140608.2de3fa24.randy_d_dunlap@linux.intel.com> (raw)
In-Reply-To: <20060222133241.595a8509.randy_d_dunlap@linux.intel.com>
From: Randy Dunlap <randy_d_dunlap@linux.intel.com>
Add ability for SCSI drivers to invoke a shutdown method.
This allows drivers to make drives safe for shutdown/poweroff,
for example. Some drives need this to prevent possible problems.
Signed-off-by: Randy Dunlap <randy_d_dunlap@linux.intel.com>
---
drivers/scsi/ahci.c | 1 +
drivers/scsi/ata_piix.c | 1 +
drivers/scsi/libata-core.c | 23 +++++++++++++++++++++++
drivers/scsi/libata-scsi.c | 8 ++++++++
drivers/scsi/scsi_sysfs.c | 16 ++++++++++++++++
include/linux/libata.h | 2 ++
include/scsi/scsi_host.h | 1 +
7 files changed, 52 insertions(+)
--- linux-2616-rc4-ata.orig/drivers/scsi/libata-scsi.c
+++ linux-2616-rc4-ata/drivers/scsi/libata-scsi.c
@@ -412,6 +412,14 @@ int ata_scsi_device_suspend(struct scsi_
return ata_device_suspend(ap, dev);
}
+int ata_scsi_device_shutdown(struct scsi_device *sdev)
+{
+ struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0];
+ struct ata_device *dev = &ap->device[sdev->id];
+
+ return ata_device_shutdown(ap, dev);
+}
+
/**
* ata_to_sense_error - convert ATA error to SCSI error
* @id: ATA device number
--- linux-2616-rc4-ata.orig/drivers/scsi/libata-core.c
+++ linux-2616-rc4-ata/drivers/scsi/libata-core.c
@@ -4334,6 +4334,27 @@ int ata_device_suspend(struct ata_port *
return 0;
}
+/**
+ * ata_device_shutdown - send Standby Immediate command to drive
+ * @ap: target ata_port
+ * @dev: target device on the ata_port
+ *
+ * This command makes it safe to power-off a drive.
+ * Otherwise the heads may be flying at the wrong place
+ * when the power is removed.
+ */
+int ata_device_shutdown(struct ata_port *ap, struct ata_device *dev)
+{
+
+ if (!ata_dev_present(dev))
+ return 0;
+
+ ata_standby_drive(ap, dev);
+ ap->flags |= ATA_FLAG_SUSPENDED;
+
+ return 0;
+}
+
int ata_port_start (struct ata_port *ap)
{
struct device *dev = ap->host_set->dev;
@@ -5230,5 +5251,7 @@ EXPORT_SYMBOL_GPL(ata_pci_device_resume)
EXPORT_SYMBOL_GPL(ata_device_suspend);
EXPORT_SYMBOL_GPL(ata_device_resume);
+EXPORT_SYMBOL_GPL(ata_device_shutdown);
EXPORT_SYMBOL_GPL(ata_scsi_device_suspend);
EXPORT_SYMBOL_GPL(ata_scsi_device_resume);
+EXPORT_SYMBOL_GPL(ata_scsi_device_shutdown);
--- linux-2616-rc4-ata.orig/include/linux/libata.h
+++ linux-2616-rc4-ata/include/linux/libata.h
@@ -501,8 +501,10 @@ extern int ata_scsi_release(struct Scsi_
extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
extern int ata_scsi_device_resume(struct scsi_device *);
extern int ata_scsi_device_suspend(struct scsi_device *);
+extern int ata_scsi_device_shutdown(struct scsi_device *);
extern int ata_device_resume(struct ata_port *, struct ata_device *);
extern int ata_device_suspend(struct ata_port *, struct ata_device *);
+extern int ata_device_shutdown(struct ata_port *, struct ata_device *);
extern int ata_ratelimit(void);
/*
--- linux-2616-rc4-ata.orig/drivers/scsi/scsi_sysfs.c
+++ linux-2616-rc4-ata/drivers/scsi/scsi_sysfs.c
@@ -302,11 +302,27 @@ static int scsi_bus_resume(struct device
return err;
}
+static void scsi_bus_shutdown(struct device * dev)
+{
+ struct scsi_device *sdev = to_scsi_device(dev);
+ struct scsi_host_template *sht = sdev->host->hostt;
+ int err;
+
+ err = scsi_device_quiesce(sdev);
+ if (err)
+ printk(KERN_DEBUG "%s: error (0x%x) during shutdown\n",
+ __FUNCTION__, err);
+
+ if (sht->shutdown)
+ sht->shutdown(sdev);
+}
+
struct bus_type scsi_bus_type = {
.name = "scsi",
.match = scsi_bus_match,
.suspend = scsi_bus_suspend,
.resume = scsi_bus_resume,
+ .shutdown = scsi_bus_shutdown,
};
int scsi_sysfs_register(void)
--- linux-2616-rc4-ata.orig/include/scsi/scsi_host.h
+++ linux-2616-rc4-ata/include/scsi/scsi_host.h
@@ -301,6 +301,7 @@ struct scsi_host_template {
*/
int (*resume)(struct scsi_device *);
int (*suspend)(struct scsi_device *);
+ int (*shutdown)(struct scsi_device *);
/*
* Name of proc directory
--- linux-2616-rc4-ata.orig/drivers/scsi/ahci.c
+++ linux-2616-rc4-ata/drivers/scsi/ahci.c
@@ -214,6 +214,7 @@ static struct scsi_host_template ahci_sh
.dma_boundary = AHCI_DMA_BOUNDARY,
.slave_configure = ata_scsi_slave_config,
.bios_param = ata_std_bios_param,
+ .shutdown = ata_scsi_device_shutdown,
};
static const struct ata_port_operations ahci_ops = {
--- linux-2616-rc4-ata.orig/drivers/scsi/ata_piix.c
+++ linux-2616-rc4-ata/drivers/scsi/ata_piix.c
@@ -192,6 +192,7 @@ static struct scsi_host_template piix_sh
.bios_param = ata_std_bios_param,
.resume = ata_scsi_device_resume,
.suspend = ata_scsi_device_suspend,
+ .shutdown = ata_scsi_device_shutdown,
};
static const struct ata_port_operations piix_pata_ops = {
next prev parent reply other threads:[~2006-02-22 22:13 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20060222133241.595a8509.randy_d_dunlap@linux.intel.com>
2006-02-22 21:40 ` [PATCH 1/13] ATA ACPI: Makefile/Kconfig/doc Randy Dunlap
2006-02-22 21:51 ` [PATCH 2/13] ATA ACPI: debugging infrastructure Randy Dunlap
2006-02-28 11:45 ` Pavel Machek
2006-02-28 12:00 ` Jeff Garzik
2006-02-28 12:04 ` Pavel Machek
2006-02-28 12:13 ` Jeff Garzik
2006-02-28 12:18 ` Andrew Morton
2006-02-28 12:31 ` Jeff Garzik
2006-02-28 18:35 ` Andrew Morton
2006-02-28 19:27 ` Jeff Garzik
2006-02-28 14:43 ` Mark Lord
2006-02-28 19:22 ` Randy Dunlap
2006-02-28 17:10 ` Phillip Susi
2006-03-01 10:29 ` James Courtier-Dutton
2006-03-01 10:45 ` Andrew Morton
2006-02-22 21:52 ` [PATCH 3/13] ATA ACPI: SATA methods Randy Dunlap
2006-02-22 21:54 ` [PATCH 4/13] ATA ACPI: add params/docs Randy Dunlap
2006-02-28 11:46 ` Pavel Machek
2006-02-28 11:57 ` Jeff Garzik
2006-02-22 21:55 ` [PATCH 5/13] ATA ACPI: use debugging macros Randy Dunlap
2006-02-28 11:47 ` Pavel Machek
2006-02-28 11:58 ` Jeff Garzik
2006-02-22 21:56 ` [PATCH 6/13] ATA ACPI: use correct acpi_object pointer Randy Dunlap
2006-02-22 21:58 ` [PATCH 7/13] ATA ACPI: more Makefile/Kconfig Randy Dunlap
2006-02-28 11:49 ` Pavel Machek
2006-02-28 12:03 ` Jeff Garzik
2006-02-28 15:27 ` Randy.Dunlap
2006-02-22 21:58 ` [PATCH 8/13] ATA ACPI: PATA methods Randy Dunlap
2006-02-28 11:55 ` Pavel Machek
2006-02-28 12:02 ` Jeff Garzik
2006-02-22 22:00 ` [PATCH 9/13] ATA ACPI: check SATA/PATA more carefully Randy Dunlap
2006-02-23 0:30 ` Alan Cox
2006-02-22 22:01 ` [PATCH 10/13] ATA ACPI: do taskfile before mode commands Randy Dunlap
2006-02-28 11:57 ` Pavel Machek
2006-02-28 12:05 ` Jeff Garzik
2006-02-28 12:08 ` Pavel Machek
2006-02-28 12:14 ` Jeff Garzik
2006-02-22 22:02 ` [PATCH 11/13] ATA ACPI: fix pata host typo Randy Dunlap
2006-02-22 22:06 ` Randy Dunlap [this message]
2006-02-28 11:58 ` [PATCH 12/13] ATA ACPI: use scsi_bus_shutdown for SATA/PATA Pavel Machek
2006-02-28 19:44 ` Randy Dunlap
2006-02-28 20:22 ` Pavel Machek
2006-02-22 22:07 ` [PATCH 13/13] ATA ACPI: enable writing PATA taskfiles Randy Dunlap
2006-02-28 11:59 ` Pavel Machek
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=20060222140608.2de3fa24.randy_d_dunlap@linux.intel.com \
--to=randy_d_dunlap@linux.intel.com \
--cc=akpm@osdl.org \
--cc=james.bottomley@steeleye.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/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).