* [patch 6/6] ide: improve handling of Power Management requests
@ 2009-06-23 21:35 Bartlomiej Zolnierkiewicz
2009-06-23 23:24 ` David Miller
2009-06-24 6:52 ` David Miller
0 siblings, 2 replies; 4+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2009-06-23 21:35 UTC (permalink / raw)
To: David Miller; +Cc: linux-ide, linux-kernel
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: [PATCH] ide: improve handling of Power Management requests
Make hwif->rq point to PM request during PM sequence and do not allow
any other types of requests to slip in (the old comment was never correct
as there should be no such requests generated during PM sequence).
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
This was tested in the past (with an additional testing from Borislav)
however there were block layer changes in the meantime so you may want
to give it some more testing time just to be sure.
drivers/ide/ide-io.c | 54 ++++++++++++++++++++-------------------------------
1 file changed, 22 insertions(+), 32 deletions(-)
Index: b/drivers/ide/ide-io.c
===================================================================
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -466,10 +466,14 @@ void do_ide_request(struct request_queue
if (!ide_lock_port(hwif)) {
ide_hwif_t *prev_port;
-
- WARN_ON_ONCE(hwif->rq);
repeat:
prev_port = hwif->host->cur_port;
+
+ if (drive->dev_flags & IDE_DFLAG_BLOCKED)
+ rq = hwif->rq;
+ else
+ WARN_ON_ONCE(hwif->rq);
+
if (drive->dev_flags & IDE_DFLAG_SLEEPING &&
time_after(drive->sleep, jiffies)) {
ide_unlock_port(hwif);
@@ -496,43 +500,29 @@ repeat:
hwif->cur_dev = drive;
drive->dev_flags &= ~(IDE_DFLAG_SLEEPING | IDE_DFLAG_PARKED);
- spin_unlock_irq(&hwif->lock);
- spin_lock_irq(q->queue_lock);
- /*
- * we know that the queue isn't empty, but this can happen
- * if the q->prep_rq_fn() decides to kill a request
- */
- if (!rq)
+ if (rq == NULL) {
+ spin_unlock_irq(&hwif->lock);
+ spin_lock_irq(q->queue_lock);
+ /*
+ * we know that the queue isn't empty, but this can
+ * happen if ->prep_rq_fn() decides to kill a request
+ */
rq = blk_fetch_request(drive->queue);
+ spin_unlock_irq(q->queue_lock);
+ spin_lock_irq(&hwif->lock);
- spin_unlock_irq(q->queue_lock);
- spin_lock_irq(&hwif->lock);
-
- if (!rq) {
- ide_unlock_port(hwif);
- goto out;
+ if (rq == NULL) {
+ ide_unlock_port(hwif);
+ goto out;
+ }
}
/*
* Sanity: don't accept a request that isn't a PM request
- * if we are currently power managed. This is very important as
- * blk_stop_queue() doesn't prevent the blk_fetch_request()
- * above to return us whatever is in the queue. Since we call
- * ide_do_request() ourselves, we end up taking requests while
- * the queue is blocked...
- *
- * We let requests forced at head of queue with ide-preempt
- * though. I hope that doesn't happen too much, hopefully not
- * unless the subdriver triggers such a thing in its own PM
- * state machine.
+ * if we are currently power managed.
*/
- if ((drive->dev_flags & IDE_DFLAG_BLOCKED) &&
- blk_pm_request(rq) == 0 &&
- (rq->cmd_flags & REQ_PREEMPT) == 0) {
- /* there should be no pending command at this point */
- ide_unlock_port(hwif);
- goto plug_device;
- }
+ BUG_ON((drive->dev_flags & IDE_DFLAG_BLOCKED) &&
+ blk_pm_request(rq) == 0);
hwif->rq = rq;
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch 6/6] ide: improve handling of Power Management requests
2009-06-23 21:35 [patch 6/6] ide: improve handling of Power Management requests Bartlomiej Zolnierkiewicz
@ 2009-06-23 23:24 ` David Miller
2009-06-24 1:36 ` Bartlomiej Zolnierkiewicz
2009-06-24 6:52 ` David Miller
1 sibling, 1 reply; 4+ messages in thread
From: David Miller @ 2009-06-23 23:24 UTC (permalink / raw)
To: bzolnier; +Cc: linux-ide, linux-kernel
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Date: Tue, 23 Jun 2009 23:35:56 +0200
> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> Subject: [PATCH] ide: improve handling of Power Management requests
>
> Make hwif->rq point to PM request during PM sequence and do not allow
> any other types of requests to slip in (the old comment was never correct
> as there should be no such requests generated during PM sequence).
>
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> ---
> This was tested in the past (with an additional testing from Borislav)
> however there were block layer changes in the meantime so you may want
> to give it some more testing time just to be sure.
In looking at this change, it occurs to me that this queue blocking
facility could also be used to solve the user SET_XFER race.
Couldn't it?
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch 6/6] ide: improve handling of Power Management requests
2009-06-23 23:24 ` David Miller
@ 2009-06-24 1:36 ` Bartlomiej Zolnierkiewicz
0 siblings, 0 replies; 4+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2009-06-24 1:36 UTC (permalink / raw)
To: David Miller; +Cc: linux-ide, linux-kernel
On Wednesday 24 June 2009 01:24:02 David Miller wrote:
> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> Date: Tue, 23 Jun 2009 23:35:56 +0200
>
> > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> > Subject: [PATCH] ide: improve handling of Power Management requests
> >
> > Make hwif->rq point to PM request during PM sequence and do not allow
> > any other types of requests to slip in (the old comment was never correct
> > as there should be no such requests generated during PM sequence).
> >
> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> > ---
> > This was tested in the past (with an additional testing from Borislav)
> > however there were block layer changes in the meantime so you may want
> > to give it some more testing time just to be sure.
>
> In looking at this change, it occurs to me that this queue blocking
> facility could also be used to solve the user SET_XFER race.
>
> Couldn't it?
Probably. This is software, almost everything is possible.. ;)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch 6/6] ide: improve handling of Power Management requests
2009-06-23 21:35 [patch 6/6] ide: improve handling of Power Management requests Bartlomiej Zolnierkiewicz
2009-06-23 23:24 ` David Miller
@ 2009-06-24 6:52 ` David Miller
1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2009-06-24 6:52 UTC (permalink / raw)
To: bzolnier; +Cc: linux-ide, linux-kernel
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Date: Tue, 23 Jun 2009 23:35:56 +0200
> Make hwif->rq point to PM request during PM sequence and do not allow
> any other types of requests to slip in (the old comment was never correct
> as there should be no such requests generated during PM sequence).
>
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
> ---
> This was tested in the past (with an additional testing from Borislav)
> however there were block layer changes in the meantime so you may want
> to give it some more testing time just to be sure.
This patch looks great, applied!
Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-06-24 6:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-23 21:35 [patch 6/6] ide: improve handling of Power Management requests Bartlomiej Zolnierkiewicz
2009-06-23 23:24 ` David Miller
2009-06-24 1:36 ` Bartlomiej Zolnierkiewicz
2009-06-24 6:52 ` David Miller
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).