diff options
Diffstat (limited to 'drivers/ide/umc8672.c')
-rw-r--r-- | drivers/ide/umc8672.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/ide/umc8672.c b/drivers/ide/umc8672.c index 1da076e0c917..e29978cf6197 100644 --- a/drivers/ide/umc8672.c +++ b/drivers/ide/umc8672.c | |||
@@ -107,18 +107,21 @@ static void umc_set_speeds(u8 speeds[]) | |||
107 | static void umc_set_pio_mode(ide_drive_t *drive, const u8 pio) | 107 | static void umc_set_pio_mode(ide_drive_t *drive, const u8 pio) |
108 | { | 108 | { |
109 | ide_hwif_t *hwif = drive->hwif; | 109 | ide_hwif_t *hwif = drive->hwif; |
110 | unsigned long flags; | 110 | ide_hwgroup_t *mate_hwgroup = hwif->mate ? hwif->mate->hwgroup : NULL; |
111 | unsigned long uninitialized_var(flags); | ||
111 | 112 | ||
112 | printk("%s: setting umc8672 to PIO mode%d (speed %d)\n", | 113 | printk("%s: setting umc8672 to PIO mode%d (speed %d)\n", |
113 | drive->name, pio, pio_to_umc[pio]); | 114 | drive->name, pio, pio_to_umc[pio]); |
114 | spin_lock_irqsave(&ide_lock, flags); | 115 | if (mate_hwgroup) |
115 | if (hwif->mate && hwif->mate->hwgroup->handler) { | 116 | spin_lock_irqsave(&mate_hwgroup->lock, flags); |
117 | if (mate_hwgroup && mate_hwgroup->handler) { | ||
116 | printk(KERN_ERR "umc8672: other interface is busy: exiting tune_umc()\n"); | 118 | printk(KERN_ERR "umc8672: other interface is busy: exiting tune_umc()\n"); |
117 | } else { | 119 | } else { |
118 | current_speeds[drive->name[2] - 'a'] = pio_to_umc[pio]; | 120 | current_speeds[drive->name[2] - 'a'] = pio_to_umc[pio]; |
119 | umc_set_speeds(current_speeds); | 121 | umc_set_speeds(current_speeds); |
120 | } | 122 | } |
121 | spin_unlock_irqrestore(&ide_lock, flags); | 123 | if (mate_hwgroup) |
124 | spin_unlock_irqrestore(&mate_hwgroup->lock, flags); | ||
122 | } | 125 | } |
123 | 126 | ||
124 | static const struct ide_port_ops umc8672_port_ops = { | 127 | static const struct ide_port_ops umc8672_port_ops = { |