ide: set hwif->expiry prior to calling [__]ide_set_handler()
* Set hwif->expiry prior to calling [__]ide_set_handler() and drop 'expiry' argument. * Set hwif->expiry to NULL in ide_{timer_expiry,intr}() and remove 'hwif->expiry = NULL' assignments. There should be no functional changes caused by this patch. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
b788ee9c65
commit
60c0cd02b2
7 changed files with 24 additions and 21 deletions
|
@ -483,7 +483,7 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
|
||||||
rq->cmd[0], bcount);
|
rq->cmd[0], bcount);
|
||||||
next_irq:
|
next_irq:
|
||||||
/* And set the interrupt handler again */
|
/* And set the interrupt handler again */
|
||||||
ide_set_handler(drive, ide_pc_intr, timeout, NULL);
|
ide_set_handler(drive, ide_pc_intr, timeout);
|
||||||
return ide_started;
|
return ide_started;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -602,11 +602,13 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hwif->expiry = expiry;
|
||||||
|
|
||||||
/* Set the interrupt routine */
|
/* Set the interrupt routine */
|
||||||
ide_set_handler(drive,
|
ide_set_handler(drive,
|
||||||
(dev_is_idecd(drive) ? drive->irq_handler
|
(dev_is_idecd(drive) ? drive->irq_handler
|
||||||
: ide_pc_intr),
|
: ide_pc_intr),
|
||||||
timeout, expiry);
|
timeout);
|
||||||
|
|
||||||
/* Begin DMA, if necessary */
|
/* Begin DMA, if necessary */
|
||||||
if (dev_is_idecd(drive)) {
|
if (dev_is_idecd(drive)) {
|
||||||
|
|
|
@ -959,7 +959,8 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
|
||||||
expiry = ide_cd_expiry;
|
expiry = ide_cd_expiry;
|
||||||
}
|
}
|
||||||
|
|
||||||
ide_set_handler(drive, cdrom_newpc_intr, timeout, expiry);
|
hwif->expiry = expiry;
|
||||||
|
ide_set_handler(drive, cdrom_newpc_intr, timeout);
|
||||||
return ide_started;
|
return ide_started;
|
||||||
|
|
||||||
end_request:
|
end_request:
|
||||||
|
|
|
@ -175,8 +175,7 @@ static ide_startstop_t atapi_reset_pollfunc(ide_drive_t *drive)
|
||||||
printk(KERN_INFO "%s: ATAPI reset complete\n", drive->name);
|
printk(KERN_INFO "%s: ATAPI reset complete\n", drive->name);
|
||||||
else {
|
else {
|
||||||
if (time_before(jiffies, hwif->poll_timeout)) {
|
if (time_before(jiffies, hwif->poll_timeout)) {
|
||||||
ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20,
|
ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20);
|
||||||
NULL);
|
|
||||||
/* continue polling */
|
/* continue polling */
|
||||||
return ide_started;
|
return ide_started;
|
||||||
}
|
}
|
||||||
|
@ -238,7 +237,7 @@ static ide_startstop_t reset_pollfunc(ide_drive_t *drive)
|
||||||
|
|
||||||
if (!OK_STAT(tmp, 0, ATA_BUSY)) {
|
if (!OK_STAT(tmp, 0, ATA_BUSY)) {
|
||||||
if (time_before(jiffies, hwif->poll_timeout)) {
|
if (time_before(jiffies, hwif->poll_timeout)) {
|
||||||
ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
|
ide_set_handler(drive, &reset_pollfunc, HZ/20);
|
||||||
/* continue polling */
|
/* continue polling */
|
||||||
return ide_started;
|
return ide_started;
|
||||||
}
|
}
|
||||||
|
@ -355,7 +354,7 @@ static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi)
|
||||||
ndelay(400);
|
ndelay(400);
|
||||||
hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
|
hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
|
||||||
hwif->polling = 1;
|
hwif->polling = 1;
|
||||||
__ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20, NULL);
|
__ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20);
|
||||||
spin_unlock_irqrestore(&hwif->lock, flags);
|
spin_unlock_irqrestore(&hwif->lock, flags);
|
||||||
return ide_started;
|
return ide_started;
|
||||||
}
|
}
|
||||||
|
@ -415,7 +414,7 @@ static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi)
|
||||||
udelay(10);
|
udelay(10);
|
||||||
hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
|
hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
|
||||||
hwif->polling = 1;
|
hwif->polling = 1;
|
||||||
__ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
|
__ide_set_handler(drive, &reset_pollfunc, HZ/20);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some weird controller like resetting themselves to a strange
|
* Some weird controller like resetting themselves to a strange
|
||||||
|
|
|
@ -651,6 +651,7 @@ void ide_timer_expiry (unsigned long data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hwif->handler = NULL;
|
hwif->handler = NULL;
|
||||||
|
hwif->expiry = NULL;
|
||||||
/*
|
/*
|
||||||
* We need to simulate a real interrupt when invoking
|
* We need to simulate a real interrupt when invoking
|
||||||
* the handler() function, which means we need to
|
* the handler() function, which means we need to
|
||||||
|
@ -830,6 +831,7 @@ irqreturn_t ide_intr (int irq, void *dev_id)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hwif->handler = NULL;
|
hwif->handler = NULL;
|
||||||
|
hwif->expiry = NULL;
|
||||||
hwif->req_gen++;
|
hwif->req_gen++;
|
||||||
del_timer(&hwif->timer);
|
del_timer(&hwif->timer);
|
||||||
spin_unlock(&hwif->lock);
|
spin_unlock(&hwif->lock);
|
||||||
|
|
|
@ -425,26 +425,25 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
|
||||||
* See also ide_execute_command
|
* See also ide_execute_command
|
||||||
*/
|
*/
|
||||||
void __ide_set_handler(ide_drive_t *drive, ide_handler_t *handler,
|
void __ide_set_handler(ide_drive_t *drive, ide_handler_t *handler,
|
||||||
unsigned int timeout, ide_expiry_t *expiry)
|
unsigned int timeout)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = drive->hwif;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
|
||||||
BUG_ON(hwif->handler);
|
BUG_ON(hwif->handler);
|
||||||
hwif->handler = handler;
|
hwif->handler = handler;
|
||||||
hwif->expiry = expiry;
|
|
||||||
hwif->timer.expires = jiffies + timeout;
|
hwif->timer.expires = jiffies + timeout;
|
||||||
hwif->req_gen_timer = hwif->req_gen;
|
hwif->req_gen_timer = hwif->req_gen;
|
||||||
add_timer(&hwif->timer);
|
add_timer(&hwif->timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler,
|
void ide_set_handler(ide_drive_t *drive, ide_handler_t *handler,
|
||||||
unsigned int timeout, ide_expiry_t *expiry)
|
unsigned int timeout)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = drive->hwif;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&hwif->lock, flags);
|
spin_lock_irqsave(&hwif->lock, flags);
|
||||||
__ide_set_handler(drive, handler, timeout, expiry);
|
__ide_set_handler(drive, handler, timeout);
|
||||||
spin_unlock_irqrestore(&hwif->lock, flags);
|
spin_unlock_irqrestore(&hwif->lock, flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ide_set_handler);
|
EXPORT_SYMBOL(ide_set_handler);
|
||||||
|
@ -469,8 +468,10 @@ void ide_execute_command(ide_drive_t *drive, u8 cmd, ide_handler_t *handler,
|
||||||
ide_hwif_t *hwif = drive->hwif;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
hwif->expiry = expiry;
|
||||||
|
|
||||||
spin_lock_irqsave(&hwif->lock, flags);
|
spin_lock_irqsave(&hwif->lock, flags);
|
||||||
__ide_set_handler(drive, handler, timeout, expiry);
|
__ide_set_handler(drive, handler, timeout);
|
||||||
hwif->tp_ops->exec_command(hwif, cmd);
|
hwif->tp_ops->exec_command(hwif, cmd);
|
||||||
/*
|
/*
|
||||||
* Drive takes 400nS to respond, we must avoid the IRQ being
|
* Drive takes 400nS to respond, we must avoid the IRQ being
|
||||||
|
|
|
@ -140,7 +140,7 @@ static ide_startstop_t task_no_data_intr(ide_drive_t *drive)
|
||||||
} else if (custom && tf->command == ATA_CMD_INIT_DEV_PARAMS) {
|
} else if (custom && tf->command == ATA_CMD_INIT_DEV_PARAMS) {
|
||||||
if ((stat & (ATA_ERR | ATA_DRQ)) == 0) {
|
if ((stat & (ATA_ERR | ATA_DRQ)) == 0) {
|
||||||
ide_set_handler(drive, &task_no_data_intr,
|
ide_set_handler(drive, &task_no_data_intr,
|
||||||
WAIT_WORSTCASE, NULL);
|
WAIT_WORSTCASE);
|
||||||
return ide_started;
|
return ide_started;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,7 +347,7 @@ static ide_startstop_t task_pio_intr(ide_drive_t *drive)
|
||||||
}
|
}
|
||||||
out_wait:
|
out_wait:
|
||||||
/* Still data left to transfer. */
|
/* Still data left to transfer. */
|
||||||
ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE, NULL);
|
ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE);
|
||||||
return ide_started;
|
return ide_started;
|
||||||
out_end:
|
out_end:
|
||||||
if ((cmd->tf_flags & IDE_TFLAG_FS) == 0)
|
if ((cmd->tf_flags & IDE_TFLAG_FS) == 0)
|
||||||
|
@ -377,7 +377,7 @@ static ide_startstop_t pre_task_out_intr(ide_drive_t *drive,
|
||||||
if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0)
|
if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0)
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
|
||||||
ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE, NULL);
|
ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE);
|
||||||
|
|
||||||
ide_pio_datablock(drive, cmd, 1);
|
ide_pio_datablock(drive, cmd, 1);
|
||||||
|
|
||||||
|
|
|
@ -1135,10 +1135,8 @@ unsigned int ide_rq_bytes(struct request *);
|
||||||
int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int);
|
int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int);
|
||||||
void ide_kill_rq(ide_drive_t *, struct request *);
|
void ide_kill_rq(ide_drive_t *, struct request *);
|
||||||
|
|
||||||
void __ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int,
|
void __ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int);
|
||||||
ide_expiry_t *);
|
void ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int);
|
||||||
void ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int,
|
|
||||||
ide_expiry_t *);
|
|
||||||
|
|
||||||
void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int,
|
void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int,
|
||||||
ide_expiry_t *);
|
ide_expiry_t *);
|
||||||
|
|
Loading…
Add table
Reference in a new issue