Skip to contentSkip to conversation

ali14xx: fix deadlock on error handling

PATCH NAK Bartlomiej Zolnierkiewicz 3 participants 3 messages Oct 1, 2007 – Oct 2, 2007 libata

lore
Share & tools
lore
#0 lore raw

PATCH 1/15 ali14xx: fix deadlock on error handling

Stop abusing ide_lock lock by switching to a private locking.

Fixes same issue as fixed by Alan Cox in atiixp host driver with commit 6c5f8cc33eb2e10b6ab788bbe259fc142a068627.

---
 drivers/ide/legacy/ali14xx.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/ide/legacy/ali14xx.c +4 -2
Index: b/drivers/ide/legacy/ali14xx.c
===================================================================
@@ -102,6 +102,8 @@ static void outReg (u8 data, u8 reg)
 	outb_p(data, dataPort);
 }
 
+static DEFINE_SPINLOCK(ali14xx_lock);
+
 /*
  * Set PIO mode for the specified drive.
  * This function computes timing parameters
@@ -129,14 +131,14 @@ static void ali14xx_set_pio_mode(ide_dri
 
 	/* stuff timing parameters into controller registers */
 	driveNum = (HWIF(drive)->index << 1) + drive->select.b.unit;
-	spin_lock_irqsave(&ide_lock, flags);
+	spin_lock_irqsave(&ali14xx_lock, flags);
 	outb_p(regOn, basePort);
 	outReg(param1, regTab[driveNum].reg1);
 	outReg(param2, regTab[driveNum].reg2);
 	outReg(param3, regTab[driveNum].reg3);
 	outReg(param4, regTab[driveNum].reg4);
 	outb_p(regOff, basePort);
-	spin_unlock_irqrestore(&ide_lock, flags);
+	spin_unlock_irqrestore(&ali14xx_lock, flags);
 }
 
 /*
Acked-by on v1 1/15
#1 lore raw
Quoted 3 lines · Bartlomiej Zolnierkiewicz

Stop abusing ide_lock lock by switching to a private locking.

Fixes same issue as fixed by Alan Cox in atiixp host driver with

Has been also fixed in the piix driver.

Quoted 1 line

commit 6c5f8cc33eb2e10b6ab788bbe259fc142a068627.

Heh, I've looked hard at the code trying to understand how this can
happen, and was unable to figure out. Probably was not hard enough...

Quoted 1 line

MBR, Sergei

#2 lore raw
Quoted 4 lines · On Tue, 02 Oct 2007 16:46:28 +0400 Sergei Shtylyov <[email protected]>…
Quoted 1 line · Bartlomiej Zolnierkiewicz

Stop abusing ide_lock lock by switching to a private locking.

Quoted 8 lines
Quoted 1 line

Fixes same issue as fixed by Alan Cox in atiixp host driver with

Has been also fixed in the piix driver.

Quoted 1 line

commit 6c5f8cc33eb2e10b6ab788bbe259fc142a068627.

Heh, I've looked hard at the code trying to understand how this can
happen, and was unable to figure out. Probably was not hard enough...

The old IDE code timer, error handling and interrupt paths all race each other. Anything can happen including this.

The proper fix is to rewrite the error handling but it was easier to port the drivers to working error handling instead - hence libata PATA

Alan