diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-19 18:32:35 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-19 18:32:35 -0400 |
commit | a482958bf60c434dc12ea0491938c8853d9774fb (patch) | |
tree | e53abc56646d51ea6681684ae7b03c164310f4a2 /drivers/ide | |
parent | e65dde715c4241d6b17d86fa4ada2f78668274d9 (diff) |
slc90e66: fix deadlock on error handling
* Stop abusing ide_lock lock (switch to a private locking).
Fixes same issue as fixed by Alan Cox in atiixp host driver with
commit 6c5f8cc33eb2e10b6ab788bbe259fc142a068627.
* Bump driver version.
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide')
-rw-r--r-- | drivers/ide/pci/slc90e66.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index c457bf4289c5..eb4445b229ed 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/slc90e66.c Version 0.18 Aug 9, 2007 | 2 | * linux/drivers/ide/pci/slc90e66.c Version 0.19 Sep 24, 2007 |
3 | * | 3 | * |
4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> | 4 | * Copyright (C) 2000-2002 Andre Hedrick <andre@linux-ide.org> |
5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> | 5 | * Copyright (C) 2006-2007 MontaVista Software, Inc. <source@mvista.com> |
@@ -21,6 +21,8 @@ | |||
21 | 21 | ||
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | 23 | ||
24 | static DEFINE_SPINLOCK(slc90e66_lock); | ||
25 | |||
24 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | 26 | static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) |
25 | { | 27 | { |
26 | ide_hwif_t *hwif = HWIF(drive); | 28 | ide_hwif_t *hwif = HWIF(drive); |
@@ -40,7 +42,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
40 | { 2, 1 }, | 42 | { 2, 1 }, |
41 | { 2, 3 }, }; | 43 | { 2, 3 }, }; |
42 | 44 | ||
43 | spin_lock_irqsave(&ide_lock, flags); | 45 | spin_lock_irqsave(&slc90e66_lock, flags); |
44 | pci_read_config_word(dev, master_port, &master_data); | 46 | pci_read_config_word(dev, master_port, &master_data); |
45 | 47 | ||
46 | if (pio > 1) | 48 | if (pio > 1) |
@@ -71,7 +73,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
71 | pci_write_config_word(dev, master_port, master_data); | 73 | pci_write_config_word(dev, master_port, master_data); |
72 | if (is_slave) | 74 | if (is_slave) |
73 | pci_write_config_byte(dev, slave_port, slave_data); | 75 | pci_write_config_byte(dev, slave_port, slave_data); |
74 | spin_unlock_irqrestore(&ide_lock, flags); | 76 | spin_unlock_irqrestore(&slc90e66_lock, flags); |
75 | } | 77 | } |
76 | 78 | ||
77 | static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) | 79 | static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) |