ide: fix races in handling of user-space SET XFER commands
* Make cmd->tf_flags field 'u16' and add IDE_TFLAG_SET_XFER taskfile flag. * Update ide_finish_cmd() to set xfer / re-read id if the new flag is set. * Convert set_xfer_rate() (write handler for /proc/ide/hd?/current_speed) and ide_cmd_ioctl() (HDIO_DRIVE_CMD ioctl handler) to use the new flag. * Remove no longer needed disable_irq_nosync() + enable_irq() from ide_config_drive_speed(). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
fa56d4cb40
commit
665d66e8fa
@ -363,14 +363,6 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
|
||||
* this point (lost interrupt).
|
||||
*/
|
||||
|
||||
/*
|
||||
* FIXME: we race against the running IRQ here if
|
||||
* this is called from non IRQ context. If we use
|
||||
* disable_irq() we hang on the error path. Work
|
||||
* is needed.
|
||||
*/
|
||||
disable_irq_nosync(hwif->irq);
|
||||
|
||||
udelay(1);
|
||||
tp_ops->dev_select(drive);
|
||||
SELECT_MASK(drive, 1);
|
||||
@ -394,8 +386,6 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
|
||||
|
||||
SELECT_MASK(drive, 0);
|
||||
|
||||
enable_irq(hwif->irq);
|
||||
|
||||
if (error) {
|
||||
(void) ide_dump_status(drive, "set_drive_speed_status", stat);
|
||||
return error;
|
||||
|
Reference in New Issue
Block a user