All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: ACPI Devel Maling List <linux-acpi@vger.kernel.org>
Cc: linux-ide@vger.kernel.org, Thomas Renninger <trenn@suse.de>,
	Tejun Heo <htejun@gmail.com>, Robert Hancock <hancockr@shaw.ca>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Regression: SATA disk double spin-off during hibernation on hp nx6325
Date: Fri, 29 Aug 2008 00:02:54 +0200	[thread overview]
Message-ID: <200808290002.55026.rjw@sisk.pl> (raw)

Hi,

It appears that the "double spin-off" problem described in

http://bugzilla.kernel.org/show_bug.cgi?id=8855

has recently started to appear during hibernation as well as during shutdown.
It didn't appear during hibernation on my hp nx6325 with 2.6.26, so this is a
recent regression.

I have prepared the appended patch that fixes the problem for me, based on the
 earlier Tejun's patch at

http://bugzilla.kernel.org/attachment.cgi?id=15441&action=view

but I'm not really sure if this is an acceptable solution.  Please advise.

Thanks,
Rafael


not-yet-signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 drivers/ata/libata-scsi.c |   16 +++++++++++++---
 drivers/ata/sata_sil.c    |   30 +++++++++++++++++++++++++++++-
 include/linux/libata.h    |    1 +
 kernel/power/disk.c       |    2 ++
 4 files changed, 45 insertions(+), 4 deletions(-)

Index: linux-2.6/drivers/ata/libata-scsi.c
===================================================================
--- linux-2.6.orig/drivers/ata/libata-scsi.c
+++ linux-2.6/drivers/ata/libata-scsi.c
@@ -1181,6 +1181,14 @@ static unsigned int ata_scsi_start_stop_
 
 		tf->command = ATA_CMD_VERIFY;	/* READ VERIFY */
 	} else {
+		/* Some odd clown BIOSen issue spindown on shutdown
+		 * causing some drives to spin up and down again.
+		 */
+		if ((qc->ap->flags & ATA_FLAG_NO_SHUTDOWN_SPINDOWN) &&
+		    (system_state == SYSTEM_POWER_OFF ||
+		     system_state == SYSTEM_SUSPEND_DISK))
+			goto skip;
+
 		/* XXX: This is for backward compatibility, will be
 		 * removed.  Read Documentation/feature-removal-schedule.txt
 		 * for more info.
@@ -1204,8 +1212,7 @@ static unsigned int ata_scsi_start_stop_
 				scmd->scsi_done = qc->scsidone;
 				qc->scsidone = ata_delayed_done;
 			}
-			scmd->result = SAM_STAT_GOOD;
-			return 1;
+			goto skip;
 		}
 
 		/* Issue ATA STANDBY IMMEDIATE command */
@@ -1221,10 +1228,13 @@ static unsigned int ata_scsi_start_stop_
 
 	return 0;
 
-invalid_fld:
+ invalid_fld:
 	ata_scsi_set_sense(scmd, ILLEGAL_REQUEST, 0x24, 0x0);
 	/* "Invalid field in cbd" */
 	return 1;
+ skip:
+	scmd->result = SAM_STAT_GOOD;
+	return 1;
 }
 
 
Index: linux-2.6/drivers/ata/sata_sil.c
===================================================================
--- linux-2.6.orig/drivers/ata/sata_sil.c
+++ linux-2.6/drivers/ata/sata_sil.c
@@ -603,11 +603,33 @@ static void sil_init_controller(struct a
 	}
 }
 
+static int sil_broken_shutdown(struct pci_dev *pdev)
+{
+	static const struct dmi_system_id sysid_nx6325[] = {
+		{
+			.ident = "HP Compaq nx6325",
+			.matches = {
+				DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+				DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
+			},
+		},
+
+		{ }	/* terminate list */
+	};
+
+	/* apply the quirk only to the on-board controller */
+	if (dmi_check_system(sysid_nx6325) && PCI_SLOT(pdev->devfn) == 18)
+		return 1;
+
+	return 0;
+}
+
 static int sil_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
 	static int printed_version;
 	int board_id = ent->driver_data;
-	const struct ata_port_info *ppi[] = { &sil_port_info[board_id], NULL };
+	struct ata_port_info pi = sil_port_info[board_id];
+	const struct ata_port_info *ppi[] = { &pi, NULL };
 	struct ata_host *host;
 	void __iomem *mmio_base;
 	int n_ports, rc;
@@ -621,6 +643,12 @@ static int sil_init_one(struct pci_dev *
 	if (board_id == sil_3114)
 		n_ports = 4;
 
+	if (sil_broken_shutdown(pdev)) {
+		pi.flags |= ATA_FLAG_NO_SHUTDOWN_SPINDOWN;
+		dev_printk(KERN_INFO, &pdev->dev,
+			   "quirky BIOS, skipping spindown on shutdown\n");
+	}
+
 	host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
 	if (!host)
 		return -ENOMEM;
Index: linux-2.6/include/linux/libata.h
===================================================================
--- linux-2.6.orig/include/linux/libata.h
+++ linux-2.6/include/linux/libata.h
@@ -187,6 +187,7 @@ enum {
 					     * doesn't handle PIO interrupts */
 	ATA_FLAG_NCQ		= (1 << 10), /* host supports NCQ */
 	ATA_FLAG_DEBUGMSG	= (1 << 13),
+	ATA_FLAG_NO_SHUTDOWN_SPINDOWN = (1 << 14), /* don't spindown on shutdown */
 	ATA_FLAG_IGN_SIMPLEX	= (1 << 15), /* ignore SIMPLEX */
 	ATA_FLAG_NO_IORDY	= (1 << 16), /* controller lacks iordy */
 	ATA_FLAG_ACPI_SATA	= (1 << 17), /* need native SATA ACPI layout */
Index: linux-2.6/kernel/power/disk.c
===================================================================
--- linux-2.6.orig/kernel/power/disk.c
+++ linux-2.6/kernel/power/disk.c
@@ -416,6 +416,7 @@ int hibernation_platform_enter(void)
 	if (error)
 		goto Close;
 
+	system_state = SYSTEM_SUSPEND_DISK;
 	suspend_console();
 	ftrace_save = __ftrace_enabled_save();
 	error = device_suspend(PMSG_HIBERNATE);
@@ -451,6 +452,7 @@ int hibernation_platform_enter(void)
  Finish:
 	hibernation_ops->finish();
  Resume_devices:
+	system_state = SYSTEM_RUNNING;
 	device_resume(PMSG_RESTORE);
 	__ftrace_enabled_restore(ftrace_save);
 	resume_console();

             reply	other threads:[~2008-08-28 22:02 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-28 22:02 Rafael J. Wysocki [this message]
2008-08-29 10:03 ` Regression: SATA disk double spin-off during hibernation on hp nx6325 Tejun Heo
2008-08-29 10:41   ` Rafael J. Wysocki
2008-08-29 10:42     ` Tejun Heo
2008-09-06 17:23       ` [PATCH] SATA: Blacklist systems that spin off disks during ACPI power off Rafael J. Wysocki
2008-09-08 11:38         ` Tejun Heo
2008-09-14  2:21           ` Jeff Garzik
2008-09-15  0:00             ` Rafael J. Wysocki
2008-09-17 21:50               ` Jeff Garzik
2008-09-29 22:06                 ` [PATCH 0/6] " Rafael J. Wysocki
2008-09-29 22:10                   ` [PATCH 1/6] Hibernation: Introduce new system state for the last phase of hibernation Rafael J. Wysocki
2008-10-01  3:32                     ` Tejun Heo
2008-10-01 11:36                       ` Rafael J. Wysocki
2008-10-03  8:35                     ` Andrew Morton
2008-10-03 11:27                       ` Rafael J. Wysocki
2008-10-03 12:43                         ` Andrew Morton
2008-10-03 15:03                           ` Rafael J. Wysocki
2008-10-03 21:48                             ` [PATCH 0/6] SATA: Blacklist systems that spin off disks during ACPI power off (rev. 2) Rafael J. Wysocki
2008-10-03 21:51                               ` [PATCH 1/6] Hibernation: Introduce system_entering_hibernation Rafael J. Wysocki
2008-10-03 23:27                                 ` Alan Cox
2008-10-04 10:13                                   ` Rafael J. Wysocki
2008-10-04 21:50                                     ` Alan Cox
2008-10-04 21:52                                       ` Tejun Heo
2008-10-04 22:30                                         ` Rafael J. Wysocki
2008-10-04 22:27                                           ` Tejun Heo
2008-10-04  7:02                                 ` Tejun Heo
2008-10-04 10:14                                   ` Rafael J. Wysocki
2008-10-03 21:52                               ` [PATCH 2/6] DMI: Introduce dmi_first_match to make the interface more flexible Rafael J. Wysocki
2008-10-03 21:57                               ` [PATCH 3/6] SATA: Blacklisting of systems that spin off disks during ACPI power off (rev. 2) Rafael J. Wysocki
2008-10-03 21:57                               ` [PATCH 4/6] SATA AHCI: Blacklist system that spins off disks during ACPI power off Rafael J. Wysocki
2008-10-03 21:58                               ` [PATCH 5/6] SATA Sil: " Rafael J. Wysocki
2008-10-03 21:58                               ` [PATCH 6/6] SATA PIIX: " Rafael J. Wysocki
2008-10-03 12:49                         ` [PATCH 1/6] Hibernation: Introduce new system state for the last phase of hibernation Arjan van de Ven
2008-10-03 15:05                           ` Rafael J. Wysocki
2008-09-29 22:13                   ` [PATCH 2/6] DMI: Introduce dmi_first_match to make the interface more flexible Rafael J. Wysocki
2008-10-01  3:31                     ` Tejun Heo
2008-09-29 22:14                   ` [PATCH 3/6] SATA: Blacklisting of systems that spin off disks during ACPI power off Rafael J. Wysocki
2008-10-01  3:34                     ` Tejun Heo
2008-10-01 11:36                       ` Rafael J. Wysocki
2008-09-29 22:15                   ` [PATCH 4/6] SATA AHCI: Blacklist system that spins " Rafael J. Wysocki
2008-09-29 22:16                   ` [PATCH 5/6] SATA Sil: " Rafael J. Wysocki
2008-09-29 22:18                   ` [PATCH 6/6] SATA PIIX: " Rafael J. Wysocki
     [not found] ` <200808291245.27436.elendil@planet.nl>
2008-08-29 10:57   ` Regression: SATA disk double spin-off during hibernation on hp nx6325 Rafael J. Wysocki
2008-08-29 11:30     ` Frans Pop
2008-09-04 14:05       ` Rafael J. Wysocki
2008-09-05 22:25         ` Frans Pop
2008-09-05 23:18           ` Rafael J. Wysocki
2008-09-06  0:09             ` Frans Pop
2008-09-06 11:06               ` Rafael J. Wysocki

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=200808290002.55026.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=hancockr@shaw.ca \
    --cc=htejun@gmail.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=trenn@suse.de \
    /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.