Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 133400
b: refs/heads/master
c: 2f40c9b
h: refs/heads/master
v: v3
  • Loading branch information
Bartlomiej Zolnierkiewicz committed Mar 24, 2009
1 parent 76c6f2a commit 7139fae
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d45b70ab9bbf1a46ae52972d532f9e267b8d39d9
refs/heads/master: 2f40c9b0b65b5635e2e13dfa068bd56fe7a8ff98
33 changes: 20 additions & 13 deletions trunk/drivers/ide/ide-iops.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,12 @@ int ide_driveid_update(ide_drive_t *drive)
const struct ide_tp_ops *tp_ops = hwif->tp_ops;
u16 *id;
unsigned long flags;
u8 stat;
int rc;
u8 uninitialized_var(s);

id = kmalloc(SECTOR_SIZE, GFP_ATOMIC);
if (id == NULL)
return 0;

/*
* Re-read drive->id for possible DMA mode
Expand All @@ -306,25 +311,21 @@ int ide_driveid_update(ide_drive_t *drive)
tp_ops->exec_command(hwif, ATA_CMD_ID_ATA);

if (ide_busy_sleep(hwif, WAIT_WORSTCASE, 1)) {
SELECT_MASK(drive, 0);
return 0;
rc = 1;
goto out_err;
}

msleep(50); /* wait for IRQ and ATA_DRQ */
stat = tp_ops->read_status(hwif);

if (!OK_STAT(stat, ATA_DRQ, BAD_R_STAT)) {
SELECT_MASK(drive, 0);
printk("%s: CHECK for good STATUS\n", drive->name);
return 0;
s = tp_ops->read_status(hwif);

if (!OK_STAT(s, ATA_DRQ, BAD_R_STAT)) {
rc = 2;
goto out_err;
}

local_irq_save(flags);
SELECT_MASK(drive, 0);
id = kmalloc(SECTOR_SIZE, GFP_ATOMIC);
if (!id) {
local_irq_restore(flags);
return 0;
}
tp_ops->input_data(drive, NULL, id, SECTOR_SIZE);
(void)tp_ops->read_status(hwif); /* clear drive IRQ */
local_irq_enable();
Expand All @@ -342,6 +343,12 @@ int ide_driveid_update(ide_drive_t *drive)
ide_dma_off(drive);

return 1;
out_err:
SELECT_MASK(drive, 0);
if (rc == 2)
printk(KERN_ERR "%s: %s: bad status\n", drive->name, __func__);
kfree(id);
return 0;
}

int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
Expand Down

0 comments on commit 7139fae

Please sign in to comment.