From: Phillip Susi <psusi@ubuntu.com>
To: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: todd.e.brandt@linux.intel.com, tj@kernel.org,
linux-ide@vger.kernel.org, linux-scsi@vger.kernel.org
Subject: Re: [PATCH 5/6] sd: don't start disks on system resume
Date: Tue, 17 Dec 2013 10:01:36 -0500 [thread overview]
Message-ID: <52B06750.7080903@ubuntu.com> (raw)
In-Reply-To: <1387262618.13936.38.camel@dabdike.int.hansenpartnership.com>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 12/17/2013 1:43 AM, James Bottomley wrote:
>> -static int sd_resume(struct device *dev) +static int
>> sd_resume_runtime(struct device *dev) { struct scsi_disk *sdkp =
>> scsi_disk_get_from_dev(dev); int ret = 0;
>>
>> - if (!sdkp->device->manage_start_stop) - goto done; -
>
> This would make every disk start on resume ... even those which
> were spun down before suspend.
What? Those are lines I removed.
>> sd_printk(KERN_NOTICE, sdkp, "Starting disk\n"); + dump_stack();
>
> I assume this is a debug left over that should be removed?
Yes.
>> ret = sd_start_stop_device(sdkp, 1);
>>
>> -done: scsi_disk_put(sdkp); return ret; }
>>
>> +#ifdef CONFIG_PM_RUNTIME
>
> I really don't like the ifdefs. The behaviour changes look pretty
> radical for something that's supposed to be an add on to system
> suspend.
How is it radical? Either we wake the disk as we did before, or we
use runtime pm to (try to) keep it suspended until accessed. The
#ifdefs are required because it depends on runtime pm.
>> +static void sd_resume_work(struct work_struct *work) +{ + struct
>> scsi_disk *sdkp = container_of(work, struct scsi_disk,
>> resume_work.work); + struct scsi_device *sdp = sdkp->device; +
>> struct device *dev = &sdkp->dev; + int res; + unsigned char
>> cmd[10] = { 0 }; + struct scsi_sense_hdr sshdr; + const int
>> timeout = sdp->request_queue->rq_timeout; + + cmd[0] =
>> REQUEST_SENSE;
>
> You can't just send a random request sense because the reply will
> also be pretty random (either no sense or the sense of the last
> check condition depending on how the disk is feeling). To see if a
> disk is spun down, you need to send a test unit ready (TUR).
- From what I can see in the standards, this is not true. TEST UNIT
READY will give an error response if the drive requires START STOP
UNIT, but if it does not, either because it is actually an ata disk,
or because it auto starts ( the standard indicates scsi disks can be
configured to do this, but does not say how ), and is simply in
standby, then it will return success.
In other words, ata drives always return ready and scsi disks do as
well, if they are in standby mode rather than stopped mode.
On the other hand, there are several references in the standards to
using REQUEST SENSE to poll the drive status rather than to read sense
data for the last command, and I believe there was a passage somewhere
that mentioned the last command status is cleared once it has been
read once, presumably so that a subsequent REQUEST SENSE will instead
get the current status of the drive. SAT-3 specifies that REQUEST
SENSE is to be translated to an ata CHECK POWER CONDITION specifically
so that it can be used to poll the drive to see if it is currently in
standby.
You can use sdparm --command=sense to issue a REQUEST SENSE command to
a drive and see for yourself. If you configure the drive to auto
suspend using the timer, then poll it, you should see the response
indicating it is in standby.
See SPC-4 section 5.6 and SAT-3 section 8.10.
> When you send the TUR, you only test the sense if check condition
> was returned. Plus, I think you only want to start the disk if it
> sends back an ASC/ASCQ saying initialising command is required,
> don't you?
REQUEST SENSE gives GOOD rather than CHECK CONDITION. You want to NOT
start the disk if you get back that status. The whole point is to let
the disk stay asleep. The idea is to force the disk into runtime
suspend so it can sleep, and be started when accessed, but if it is
already up and running ( as most ata disks will be ), then don't
pretend it is suspended since it really isn't.
> OK, I think I'm lost here ... why are we finalising suspend in the
> resume thread?
Because we want to let runtime pm start the disk at a later time, once
it is accessed, rather than when the system resumes.
>> + execute_in_process_context(sd_resume_work, +
>> &sdkp->resume_work);
>
> Why is this necessary ... I thought resume was run on a thread (so
> it can sleep)?
Because we don't want to block the resume path for many seconds and
delay user space unfreezing. I actually need to fix that to
unconditionally queues the work item since right now it is in process
context, so it just directly calls the other function.
>> +err: + scsi_disk_put(sdkp); + return ret; +#else + if
>> (sdkp->device->manage_start_stop) + return
>> sd_resume_runtime(dev); + return 0; +#endif
>
> This doesn't really look right: if we have runtime resume enabled,
> the system resume will always spin up; if we don't, it will
> conditionally spin up?
Other way around; if we *don't* have runtime pm configured, then
system resume always spins up, and if we do, then we try to delay
spinning up until the disk is accessed, but check to see if the drive
has spun up on its own.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iQEcBAEBAgAGBQJSsGdQAAoJEI5FoCIzSKrwWRgH+wTIMDt7lyXbZVX/JNS7qkOI
eRLZnWurNSXpgkXQ2B+OQIgM+l18URbN9cf0j66o6tGH6M+CbKzT2iiQMR5lqbVY
ejkUVlZ3rruYSAc8sHGHJi1CYoHRh4wgQ65mGiRVBI6TPS5Gmqmy53QVOGaGRJwo
IZDV3oOaWelAQB4VF6T1jJHHHbraEuaXsGMwP+900mbN0uboYgkQ5pkwdNSd9dpO
CBDG0Dgn31U4P1dZUQpKtytUwm64keGzMQ8kgckiR77Y9fJ82hJ4QnFX0CmQuFgM
EeiEhTikYZ5Q1jHg8QFXkqnbigWj4o1fAJungs2iqwNrrhkwTaZW5OyUA8FV5xk=
=ZaZs
-----END PGP SIGNATURE-----
next prev parent reply other threads:[~2013-12-17 15:01 UTC|newest]
Thread overview: 165+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-17 19:33 [PATCH/RESEND v2 0/2] SATA disk resume time optimization Todd E Brandt
2013-11-07 1:53 ` Phillip Susi
2013-11-07 1:57 ` [PATCH 1/3] sd: don't bother spinning up disks on resume Phillip Susi
2013-11-07 18:21 ` Douglas Gilbert
2013-11-07 21:16 ` Phillip Susi
2013-11-16 18:20 ` James Bottomley
2013-11-17 3:50 ` Phillip Susi
2013-11-17 6:43 ` James Bottomley
2013-11-17 16:15 ` Phillip Susi
2013-11-17 23:54 ` Douglas Gilbert
2013-11-18 1:06 ` Phillip Susi
2013-11-18 15:54 ` Phillip Susi
2013-11-20 14:23 ` Mark Lord
2013-11-20 14:48 ` Phillip Susi
2013-11-28 1:39 ` Phillip Susi
2013-11-18 0:09 ` James Bottomley
2013-11-18 1:11 ` Phillip Susi
2013-11-16 5:23 ` Mark Lord
2013-11-16 14:52 ` Phillip Susi
2013-11-07 1:57 ` [PATCH 2/3] libata: resume in the background Phillip Susi
2013-11-07 1:57 ` [PATCH 3/3] libata: don't start disks on resume Phillip Susi
2013-11-09 1:20 ` [PATCH/RESEND v2 0/2] SATA disk resume time optimization Todd E Brandt
2013-11-09 20:59 ` Phillip Susi
2013-11-09 21:03 ` [PATCH 0/6] Let sleeping disks lie Phillip Susi
2013-11-09 21:03 ` [PATCH 1/6] libata: use sleep instead of standby command Phillip Susi
2013-11-09 21:03 ` [PATCH 2/6] libata: avoid waking disk to check power Phillip Susi
2013-11-11 13:05 ` Sergei Shtylyov
2013-11-09 21:03 ` [PATCH 3/6] sd: don't bother spinning up disks on resume Phillip Susi
2013-11-11 13:08 ` Sergei Shtylyov
2013-11-11 14:28 ` Phillip Susi
2013-11-09 21:03 ` [PATCH 4/6] libata: resume in the background Phillip Susi
2013-11-11 13:10 ` Sergei Shtylyov
2013-11-09 21:03 ` [PATCH 5/6] libata: don't start disks on resume Phillip Susi
2013-11-09 21:03 ` [PATCH 6/6] libata: fake some more commands when drive is sleeping Phillip Susi
2013-12-16 23:30 ` [PATCH 0/6] Let sleeping disks lie Phillip Susi
2013-12-16 23:30 ` [PATCH 1/6] libata: use sleep instead of standby command Phillip Susi
2013-12-16 23:30 ` [PATCH 2/6] libata: avoid waking disk for several commands Phillip Susi
2013-12-16 23:30 ` [PATCH 3/6] libata: resume in the background Phillip Susi
2014-01-10 22:26 ` Dan Williams
2014-01-11 2:25 ` Phillip Susi
2014-01-11 3:11 ` Dan Williams
2013-12-16 23:30 ` [PATCH 4/6] libata: don't start disks on resume Phillip Susi
2013-12-16 23:30 ` [PATCH 5/6] sd: don't start disks on system resume Phillip Susi
2013-12-17 6:43 ` James Bottomley
2013-12-17 15:01 ` Phillip Susi [this message]
2013-12-17 17:48 ` James Bottomley
2013-12-17 18:30 ` Phillip Susi
2013-12-16 23:30 ` [PATCH 6/6] libata: return power status in REQUEST SENSE command Phillip Susi
2013-12-17 18:02 ` Sergei Shtylyov
2013-12-17 18:35 ` Phillip Susi
2014-01-06 2:14 ` REQ_PM vs REQ_TYPE_PM_RESUME Phillip Susi
2014-01-06 7:36 ` Sujit Reddy Thumma
2014-01-06 9:15 ` Aaron Lu
2014-01-06 14:40 ` Phillip Susi
2014-01-06 15:38 ` Alan Stern
2014-01-07 2:44 ` Phillip Susi
2014-01-07 15:20 ` Alan Stern
2014-01-07 15:40 ` Phillip Susi
2014-01-07 15:56 ` Alan Stern
2014-01-09 18:29 ` Douglas Gilbert
2014-01-09 19:20 ` Phillip Susi
2014-01-10 5:23 ` Douglas Gilbert
2014-01-10 14:29 ` Phillip Susi
2014-01-07 7:49 ` Aaron Lu
2014-01-07 14:50 ` Phillip Susi
2014-01-08 1:03 ` Aaron Lu
2014-01-08 1:16 ` Phillip Susi
2014-01-08 1:32 ` Aaron Lu
2014-01-08 1:53 ` Phillip Susi
2014-01-08 2:11 ` Aaron Lu
2014-01-08 2:19 ` Phillip Susi
2014-01-08 2:36 ` Aaron Lu
2014-01-08 5:24 ` Phillip Susi
2014-01-08 7:00 ` Aaron Lu
2014-01-08 19:30 ` Phillip Susi
2014-01-07 15:25 ` Alan Stern
2014-01-07 15:43 ` Phillip Susi
2014-01-07 16:08 ` Alan Stern
2014-01-07 16:37 ` Phillip Susi
2014-01-07 18:05 ` Alan Stern
2014-01-07 18:43 ` Phillip Susi
2014-01-07 19:18 ` Alan Stern
2014-01-07 23:47 ` Phillip Susi
2014-01-08 17:46 ` Alan Stern
2014-01-08 18:31 ` Alan Stern
2014-01-08 20:44 ` Allow runtime suspend during system resume Alan Stern
2014-01-08 21:17 ` Phillip Susi
2014-01-08 21:34 ` Alan Stern
2014-01-09 10:14 ` Ulf Hansson
2014-01-09 15:41 ` Alan Stern
2014-01-08 22:55 ` Rafael J. Wysocki
2014-01-08 23:24 ` Alan Stern
2014-01-09 0:05 ` Rafael J. Wysocki
2014-01-09 15:32 ` Alan Stern
2014-01-09 15:50 ` Phillip Susi
2014-01-09 16:08 ` Alan Stern
2014-01-09 16:30 ` Phillip Susi
2014-01-09 17:04 ` Alan Stern
2014-01-10 1:25 ` Rafael J. Wysocki
2014-01-10 1:55 ` Phillip Susi
2014-01-10 13:35 ` Rafael J. Wysocki
2014-01-10 14:46 ` Phillip Susi
2014-01-10 15:25 ` Alan Stern
2014-01-10 23:02 ` Rafael J. Wysocki
2014-01-11 2:08 ` Phillip Susi
2014-01-11 22:50 ` Alan Stern
2014-01-12 1:50 ` Phillip Susi
2014-01-11 22:34 ` Alan Stern
2014-01-08 20:20 ` REQ_PM vs REQ_TYPE_PM_RESUME Phillip Susi
2014-01-08 21:21 ` Alan Stern
2014-01-08 21:50 ` Phillip Susi
2014-01-09 1:29 ` Aaron Lu
2014-01-09 12:17 ` Rafael J. Wysocki
2014-01-09 13:18 ` Rafael J. Wysocki
2014-01-09 15:40 ` Alan Stern
2014-01-09 15:53 ` Phillip Susi
2014-01-09 16:14 ` Alan Stern
2014-01-09 16:34 ` Phillip Susi
2014-01-09 17:06 ` Alan Stern
2014-01-16 16:59 ` Disk spin-up optimization during system resume Alan Stern
2014-01-16 18:04 ` Todd E Brandt
2014-01-16 18:33 ` Phillip Susi
2014-01-16 20:05 ` Alan Stern
2014-01-16 22:04 ` Todd E Brandt
2014-01-17 14:57 ` Alan Stern
2014-01-17 19:31 ` Dan Williams
2014-01-17 20:15 ` Alan Stern
2014-01-17 20:24 ` Tejun Heo
2014-01-17 20:55 ` Phillip Susi
2014-01-18 14:04 ` Tejun Heo
2014-01-18 1:36 ` Todd E Brandt
2014-01-18 1:41 ` Alan Stern
2014-01-18 2:15 ` Dan Williams
2014-01-18 2:33 ` Alan Stern
2014-01-18 3:24 ` Phillip Susi
2014-01-18 13:59 ` Tejun Heo
2014-01-17 20:49 ` Phillip Susi
2014-01-17 22:17 ` Dan Williams
2014-01-18 3:18 ` Phillip Susi
2014-01-18 4:09 ` Dan Williams
2014-01-18 14:08 ` Alan Stern
2014-01-21 10:12 ` Dan Williams
2014-01-21 14:37 ` Phillip Susi
2014-01-21 16:03 ` Alan Stern
2014-01-21 16:18 ` Phillip Susi
2014-01-21 16:49 ` Alan Stern
2014-01-21 15:44 ` Alan Stern
2014-01-21 16:18 ` Dan Williams
2014-01-21 16:55 ` Dan Williams
2014-01-20 12:38 ` CrashPlan Pro
2014-01-20 14:30 ` Phillip Susi
2014-01-18 1:24 ` Todd E Brandt
2014-01-18 3:20 ` Phillip Susi
2014-01-16 18:39 ` Phillip Susi
2014-01-16 20:08 ` Alan Stern
2014-01-17 10:16 ` Oliver Neukum
2014-01-17 10:21 ` Tejun Heo
2014-01-17 18:18 ` Alan Stern
2014-01-17 18:39 ` James Bottomley
2014-01-17 19:07 ` Tejun Heo
2013-11-11 16:59 ` [PATCH/RESEND v2 0/2] SATA disk resume time optimization Todd E Brandt
2013-11-11 17:08 ` Phillip Susi
2013-12-17 12:15 ` Tejun Heo
2013-12-17 14:24 ` Phillip Susi
2013-11-27 16:18 ` Phillip Susi
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=52B06750.7080903@ubuntu.com \
--to=psusi@ubuntu.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=tj@kernel.org \
--cc=todd.e.brandt@linux.intel.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 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.