All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nigel Cunningham <ncunningham@cyclades.com>
To: linux-kernel@vger.kernel.org
Subject: [PATCH] Make libata not powerdown drivers on PM_EVENT_FREEZE.
Date: Thu, 23 Mar 2006 21:51:41 +1000	[thread overview]
Message-ID: <200603232151.47346.ncunningham@cyclades.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 4320 bytes --]

Hi.

At the moment libata doesn't pass pm_message_t down ata_device_suspend.
This causes drives to be powered down when we just want a freeze,
causing unnecessary wear and tear. This patch gets pm_message_t passed
down so that it can be used to determine whether to power down the
drive.

Prepared against git at the time of writing. Please apply.

Signed-off-by: Nigel Cunningham <nigel@suspend2.net>

 drivers/scsi/libata-core.c |    5 +++--
 drivers/scsi/libata-scsi.c |    2 +-
 drivers/scsi/scsi_sysfs.c  |    2 +-
 include/linux/libata.h     |    4 ++--
 include/scsi/scsi_host.h   |    2 +-
 5 files changed, 8 insertions(+), 7 deletions(-)
diff -ruNp 9904-libata-freeze.patch-old/drivers/scsi/libata-core.c 9904-libata-freeze.patch-new/drivers/scsi/libata-core.c
--- 9904-libata-freeze.patch-old/drivers/scsi/libata-core.c	2006-03-23 21:49:06.000000000 +1000
+++ 9904-libata-freeze.patch-new/drivers/scsi/libata-core.c	2006-03-23 21:16:55.000000000 +1000
@@ -4506,14 +4506,15 @@ int ata_device_resume(struct ata_port *a
  *	Flush the cache on the drive, if appropriate, then issue a
  *	standbynow command.
  */
-int ata_device_suspend(struct ata_port *ap, struct ata_device *dev)
+int ata_device_suspend(struct ata_port *ap, struct ata_device *dev, pm_message_t state)
 {
 	if (!ata_dev_present(dev))
 		return 0;
 	if (dev->class == ATA_DEV_ATA)
 		ata_flush_cache(ap, dev);
 
-	ata_standby_drive(ap, dev);
+	if (state.event != PM_EVENT_FREEZE)
+		ata_standby_drive(ap, dev);
 	ap->flags |= ATA_FLAG_SUSPENDED;
 	return 0;
 }
diff -ruNp 9904-libata-freeze.patch-old/drivers/scsi/libata-scsi.c 9904-libata-freeze.patch-new/drivers/scsi/libata-scsi.c
--- 9904-libata-freeze.patch-old/drivers/scsi/libata-scsi.c	2006-03-23 21:16:22.000000000 +1000
+++ 9904-libata-freeze.patch-new/drivers/scsi/libata-scsi.c	2006-03-23 21:24:06.000000000 +1000
@@ -419,7 +419,7 @@ int ata_scsi_device_suspend(struct scsi_
 	struct ata_port *ap = (struct ata_port *) &sdev->host->hostdata[0];
 	struct ata_device *dev = &ap->device[sdev->id];
 
-	return ata_device_suspend(ap, dev);
+	return ata_device_suspend(ap, dev, state);
 }
 
 /**
diff -ruNp 9904-libata-freeze.patch-old/drivers/scsi/scsi_sysfs.c 9904-libata-freeze.patch-new/drivers/scsi/scsi_sysfs.c
--- 9904-libata-freeze.patch-old/drivers/scsi/scsi_sysfs.c	2006-03-23 14:49:53.000000000 +1000
+++ 9904-libata-freeze.patch-new/drivers/scsi/scsi_sysfs.c	2006-03-23 21:08:01.000000000 +1000
@@ -286,7 +286,7 @@ static int scsi_bus_suspend(struct devic
 		return err;
 
 	if (sht->suspend)
-		err = sht->suspend(sdev);
+		err = sht->suspend(sdev, state);
 
 	return err;
 }
diff -ruNp 9904-libata-freeze.patch-old/include/linux/libata.h 9904-libata-freeze.patch-new/include/linux/libata.h
--- 9904-libata-freeze.patch-old/include/linux/libata.h	2006-03-23 14:50:10.000000000 +1000
+++ 9904-libata-freeze.patch-new/include/linux/libata.h	2006-03-23 21:23:31.000000000 +1000
@@ -515,9 +515,9 @@ extern void ata_eh_qc_retry(struct ata_q
 extern int ata_scsi_release(struct Scsi_Host *host);
 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_suspend(struct scsi_device *, pm_message_t state);
 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_suspend(struct ata_port *, struct ata_device *, pm_message_t state);
 extern int ata_ratelimit(void);
 extern unsigned int ata_busy_sleep(struct ata_port *ap,
 				   unsigned long timeout_pat,
diff -ruNp 9904-libata-freeze.patch-old/include/scsi/scsi_host.h 9904-libata-freeze.patch-new/include/scsi/scsi_host.h
--- 9904-libata-freeze.patch-old/include/scsi/scsi_host.h	2006-03-23 14:50:12.000000000 +1000
+++ 9904-libata-freeze.patch-new/include/scsi/scsi_host.h	2006-03-23 21:08:57.000000000 +1000
@@ -286,7 +286,7 @@ struct scsi_host_template {
 	 * suspend support
 	 */
 	int (*resume)(struct scsi_device *);
-	int (*suspend)(struct scsi_device *);
+	int (*suspend)(struct scsi_device *, pm_message_t state);
 
 	/*
 	 * Name of proc directory

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

             reply	other threads:[~2006-03-23 11:53 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-23 11:51 Nigel Cunningham [this message]
2006-03-23 12:06 ` [PATCH] Make libata not powerdown drivers on PM_EVENT_FREEZE Andrew Morton
2006-03-22 23:26   ` Pavel Machek
2006-03-23 12:16   ` Nigel Cunningham
2006-03-23 13:09 ` Jens Axboe
2006-03-23 13:20   ` Nigel Cunningham
2006-03-23 13:22   ` Nigel Cunningham
2006-03-23 13:52     ` Jeff Garzik
2006-03-23 21:01       ` Nigel Cunningham
2006-03-23 22:45         ` Mark Lord

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=200603232151.47346.ncunningham@cyclades.com \
    --to=ncunningham@cyclades.com \
    --cc=linux-kernel@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 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.