ide: push local_irq_{save,restore}() to do_identify()
Push local_irq_{save,restore}() from actual_try_to_identify() to do_identify() and remove no longer needed local_irq_enable(). Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
@@ -116,14 +116,16 @@ static void do_identify(ide_drive_t *drive, u8 cmd)
|
|||||||
ide_hwif_t *hwif = HWIF(drive);
|
ide_hwif_t *hwif = HWIF(drive);
|
||||||
u16 *id = drive->id;
|
u16 *id = drive->id;
|
||||||
char *m = (char *)&id[ATA_ID_PROD];
|
char *m = (char *)&id[ATA_ID_PROD];
|
||||||
|
unsigned long flags;
|
||||||
int bswap = 1, is_cfa;
|
int bswap = 1, is_cfa;
|
||||||
|
|
||||||
|
/* local CPU only; some systems need this */
|
||||||
|
local_irq_save(flags);
|
||||||
/* read 512 bytes of id info */
|
/* read 512 bytes of id info */
|
||||||
hwif->tp_ops->input_data(drive, NULL, id, SECTOR_SIZE);
|
hwif->tp_ops->input_data(drive, NULL, id, SECTOR_SIZE);
|
||||||
|
local_irq_restore(flags);
|
||||||
|
|
||||||
drive->dev_flags |= IDE_DFLAG_ID_READ;
|
drive->dev_flags |= IDE_DFLAG_ID_READ;
|
||||||
|
|
||||||
local_irq_enable();
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printk(KERN_INFO "%s: dumping identify data\n", drive->name);
|
printk(KERN_INFO "%s: dumping identify data\n", drive->name);
|
||||||
ide_dump_identify((u8 *)id);
|
ide_dump_identify((u8 *)id);
|
||||||
@@ -306,17 +308,12 @@ static int actual_try_to_identify (ide_drive_t *drive, u8 cmd)
|
|||||||
s = tp_ops->read_status(hwif);
|
s = tp_ops->read_status(hwif);
|
||||||
|
|
||||||
if (OK_STAT(s, ATA_DRQ, BAD_R_STAT)) {
|
if (OK_STAT(s, ATA_DRQ, BAD_R_STAT)) {
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
/* local CPU only; some systems need this */
|
|
||||||
local_irq_save(flags);
|
|
||||||
/* drive returned ID */
|
/* drive returned ID */
|
||||||
do_identify(drive, cmd);
|
do_identify(drive, cmd);
|
||||||
/* drive responded with ID */
|
/* drive responded with ID */
|
||||||
rc = 0;
|
rc = 0;
|
||||||
/* clear drive IRQ */
|
/* clear drive IRQ */
|
||||||
(void)tp_ops->read_status(hwif);
|
(void)tp_ops->read_status(hwif);
|
||||||
local_irq_restore(flags);
|
|
||||||
} else {
|
} else {
|
||||||
/* drive refused ID */
|
/* drive refused ID */
|
||||||
rc = 2;
|
rc = 2;
|
||||||
|
Reference in New Issue
Block a user