ali14xx: fix deadlock on error handling
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
@@ -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); }/*
Quoted 3 lines · Bartlomiej Zolnierkiewicz
Stop abusing
ide_locklock 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
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
MBR, Sergei
Quoted 4 lines · On Tue, 02 Oct 2007 16:46:28 +0400 Sergei Shtylyov <[email protected]>…
Quoted 1 line · Bartlomiej Zolnierkiewicz
Stop abusing
ide_locklock 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