Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e65dde71 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

opti621: 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 6c5f8cc3.

* Bump driver version.

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent f949820d
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
/*
 *  linux/drivers/ide/pci/opti621.c		Version 0.8	Aug 27, 2007
 *  linux/drivers/ide/pci/opti621.c		Version 0.9	Sep 24, 2007
 *
 *  Copyright (C) 1996-1998  Linus Torvalds & authors (see below)
 */
@@ -133,6 +133,8 @@ static int reg_base;
#define PIO_NOT_EXIST 254
#define PIO_DONT_KNOW 255

static DEFINE_SPINLOCK(opti621_lock);

/* there are stored pio numbers from other calls of opti621_set_pio_mode */
static void compute_pios(ide_drive_t *drive, const u8 pio)
/* Store values into drive->drive_data
@@ -278,7 +280,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)
		second.recovery_time, drdy);
#endif

	spin_lock_irqsave(&ide_lock, flags);
	spin_lock_irqsave(&opti621_lock, flags);

     	reg_base = hwif->io_ports[IDE_DATA_OFFSET];

@@ -317,7 +319,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)
	/*  and read prefetch for both drives */
	write_reg(misc, MISC_REG);

	spin_unlock_irqrestore(&ide_lock, flags);
	spin_unlock_irqrestore(&opti621_lock, flags);
}

/*