diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-01-06 11:20:47 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-01-06 11:20:47 -0500 |
commit | 42cf2611b28602cf4c9dc7c22bc8653a10dff60d (patch) | |
tree | 2c10f114525ec76c5888cdc0d3a7a58481c995d3 | |
parent | b46f205da647608a4064ce0a0acb07a8c74c6f23 (diff) |
ide: fix setting nIEN on idle devices
Fix do_ide_request() to operate on previous device / port instead of
the current one. The original code was wrong since at least Feb 2002
(2.4.0 timeframe).
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r-- | drivers/ide/ide-io.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index c3cbe5a1e307..1d63159fc97d 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -724,7 +724,9 @@ void do_ide_request(struct request_queue *q) | |||
724 | spin_lock_irq(&hwgroup->lock); | 724 | spin_lock_irq(&hwgroup->lock); |
725 | 725 | ||
726 | if (!ide_lock_hwgroup(hwgroup)) { | 726 | if (!ide_lock_hwgroup(hwgroup)) { |
727 | ide_hwif_t *prev_port; | ||
727 | repeat: | 728 | repeat: |
729 | prev_port = hwgroup->hwif; | ||
728 | hwgroup->rq = NULL; | 730 | hwgroup->rq = NULL; |
729 | 731 | ||
730 | if (drive->dev_flags & IDE_DFLAG_SLEEPING) { | 732 | if (drive->dev_flags & IDE_DFLAG_SLEEPING) { |
@@ -734,13 +736,13 @@ repeat: | |||
734 | } | 736 | } |
735 | } | 737 | } |
736 | 738 | ||
737 | if (hwif != hwgroup->hwif) { | 739 | if (hwif != prev_port) { |
738 | /* | 740 | /* |
739 | * set nIEN for previous hwif, drives in the | 741 | * set nIEN for previous port, drives in the |
740 | * quirk_list may not like intr setups/cleanups | 742 | * quirk_list may not like intr setups/cleanups |
741 | */ | 743 | */ |
742 | if (drive->quirk_list == 0) | 744 | if (hwgroup->drive->quirk_list == 0) |
743 | hwif->tp_ops->set_irq(hwif, 0); | 745 | prev_port->tp_ops->set_irq(prev_port, 0); |
744 | } | 746 | } |
745 | hwgroup->hwif = hwif; | 747 | hwgroup->hwif = hwif; |
746 | hwgroup->drive = drive; | 748 | hwgroup->drive = drive; |