From: Aaron Lu <aaron.lu@intel.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Jens Axboe <axboe@kernel.dk>, "Rafael J. Wysocki" <rjw@sisk.pl>,
James Bottomley <James.Bottomley@hansenpartnership.com>,
linux-pm@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org, Aaron Lu <aaron.lwe@gmail.com>,
Shane Huang <shane.huang@amd.com>
Subject: Re: [PATCH v6 3/4] block: implement runtime pm strategy
Date: Tue, 08 Jan 2013 15:36:51 +0800 [thread overview]
Message-ID: <50EBCC93.5000203@intel.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1301071219540.1658-100000@iolanthe.rowland.org>
On 01/08/2013 01:21 AM, Alan Stern wrote:
> On Sun, 6 Jan 2013, Aaron Lu wrote:
>
>> From: Lin Ming <ming.m.lin@intel.com>
>>
>> When a request is added:
>> If device is suspended or is suspending and the request is not a
>> PM request, resume the device.
>>
>> When the last request finishes:
>> Call pm_runtime_mark_last_busy() and pm_runtime_autosuspend().
>>
>> When pick a request:
>> If device is resuming/suspending, then only PM request is allowed to go.
>> Return NULL for other cases.
>>
>> [aaron.lu@intel.com: PM request does not involve nr_pending counting]
>> [aaron.lu@intel.com: No need to check q->dev]
>> [aaron.lu@intel.com: Autosuspend when the last request finished]
>> Signed-off-by: Lin Ming <ming.m.lin@intel.com>
>> Signed-off-by: Aaron Lu <aaron.lu@intel.com>
>
>> --- a/include/linux/blkdev.h
>> +++ b/include/linux/blkdev.h
>> @@ -974,6 +974,40 @@ extern int blk_pre_runtime_suspend(struct request_queue *q);
>> extern void blk_post_runtime_suspend(struct request_queue *q, int err);
>> extern void blk_pre_runtime_resume(struct request_queue *q);
>> extern void blk_post_runtime_resume(struct request_queue *q, int err);
>> +
>> +static inline void blk_pm_put_request(struct request *rq)
>> +{
>> + if (!(rq->cmd_flags & REQ_PM) && !--rq->q->nr_pending) {
>> + pm_runtime_mark_last_busy(rq->q->dev);
>> + pm_runtime_autosuspend(rq->q->dev);
>> + }
>> +}
>> +
>> +static inline struct request *blk_pm_peek_request(
>> + struct request_queue *q, struct request *rq)
>> +{
>> + if (q->rpm_status == RPM_SUSPENDED ||
>> + (q->rpm_status != RPM_ACTIVE && !(rq->cmd_flags & REQ_PM)))
>> + return NULL;
>> + else
>> + return rq;
>> +}
>> +
>> +static inline void blk_pm_requeue_request(struct request *rq)
>> +{
>> + if (!(rq->cmd_flags & REQ_PM))
>> + rq->q->nr_pending--;
>> +}
>> +
>> +static inline void blk_pm_add_request(struct request_queue *q,
>> + struct request *rq)
>> +{
>> + if (!(rq->cmd_flags & REQ_PM) &&
>> + q->nr_pending++ == 0 &&
>> + (q->rpm_status == RPM_SUSPENDED ||
>> + q->rpm_status == RPM_SUSPENDING))
>> + pm_request_resume(q->dev);
>> +}
>
> These routines also don't belong in include/linux. And they don't need
> to be marked inline.
OK, will move them.
What about create a new file blk-pm.c for all these block pm related
code?
Thanks,
Aaron
next prev parent reply other threads:[~2013-01-08 7:36 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-06 8:41 [PATCH v6 0/4] block layer runtime pm Aaron Lu
2013-01-06 8:41 ` [PATCH v6 1/4] block: add a flag to identify PM request Aaron Lu
2013-01-06 8:41 ` [PATCH v6 2/4] block: add runtime pm helpers Aaron Lu
2013-01-07 17:15 ` Alan Stern
2013-01-07 17:15 ` Alan Stern
2013-01-06 8:41 ` [PATCH v6 3/4] block: implement runtime pm strategy Aaron Lu
2013-01-07 17:21 ` Alan Stern
2013-01-07 17:21 ` Alan Stern
2013-01-08 7:36 ` Aaron Lu [this message]
2013-01-08 15:22 ` Alan Stern
2013-01-08 15:22 ` Alan Stern
2013-01-14 3:03 ` Aaron Lu
2013-01-14 18:13 ` Alan Stern
2013-01-14 18:13 ` Alan Stern
2013-01-06 8:41 ` [PATCH v6 4/4] sd: change to auto suspend mode Aaron Lu
2013-01-07 9:19 ` Oliver Neukum
2013-01-07 9:31 ` Aaron Lu
2013-01-07 17:11 ` [PATCH v6 0/4] block layer runtime pm Alan Stern
2013-01-07 17:11 ` Alan Stern
2013-01-08 7:33 ` Aaron Lu
2013-01-08 15:27 ` Alan Stern
2013-01-08 15:27 ` Alan Stern
2013-01-14 3:14 ` Aaron Lu
2013-01-14 15:41 ` Alan Stern
2013-01-14 15:41 ` Alan Stern
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=50EBCC93.5000203@intel.com \
--to=aaron.lu@intel.com \
--cc=James.Bottomley@hansenpartnership.com \
--cc=aaron.lwe@gmail.com \
--cc=axboe@kernel.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=rjw@sisk.pl \
--cc=shane.huang@amd.com \
--cc=stern@rowland.harvard.edu \
/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.