mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
ide-cd: move status checking into the IRQ handler
There should be no functional change resulting from this patch. Signed-off-by: Borislav Petkov <petkovbb@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
cfd30daa0d
commit
8e59bfde31
1 changed files with 16 additions and 22 deletions
|
@ -271,29 +271,18 @@ static void ide_cd_complete_failed_rq(ide_drive_t *drive, struct request *rq)
|
||||||
* 1: if the request will be going through error recovery.
|
* 1: if the request will be going through error recovery.
|
||||||
* 2: if the request should be ended.
|
* 2: if the request should be ended.
|
||||||
*/
|
*/
|
||||||
static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
|
static int cdrom_decode_status(ide_drive_t *drive, u8 stat)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = drive->hwif;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
struct request *rq = hwif->rq;
|
struct request *rq = hwif->rq;
|
||||||
int stat, err, sense_key;
|
int err, sense_key;
|
||||||
|
|
||||||
/* check for errors */
|
|
||||||
stat = hwif->tp_ops->read_status(hwif);
|
|
||||||
|
|
||||||
if (stat_ret)
|
|
||||||
*stat_ret = stat;
|
|
||||||
|
|
||||||
if (OK_STAT(stat, good_stat, BAD_R_STAT))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* get the IDE error register */
|
/* get the IDE error register */
|
||||||
err = ide_read_error(drive);
|
err = ide_read_error(drive);
|
||||||
sense_key = err >> 4;
|
sense_key = err >> 4;
|
||||||
|
|
||||||
ide_debug_log(IDE_DBG_RQ, "stat: 0x%x, good_stat: 0x%x, cmd[0]: 0x%x, "
|
ide_debug_log(IDE_DBG_RQ, "cmd[0]: 0x%x, rq->cmd_type: 0x%x, err: 0x%x",
|
||||||
"rq->cmd_type: 0x%x, err: 0x%x",
|
rq->cmd[0], rq->cmd_type, err);
|
||||||
stat, good_stat, rq->cmd[0], rq->cmd_type,
|
|
||||||
err);
|
|
||||||
|
|
||||||
if (blk_sense_request(rq)) {
|
if (blk_sense_request(rq)) {
|
||||||
/*
|
/*
|
||||||
|
@ -624,12 +613,12 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
|
||||||
struct ide_cmd *cmd = &hwif->cmd;
|
struct ide_cmd *cmd = &hwif->cmd;
|
||||||
struct request *rq = hwif->rq;
|
struct request *rq = hwif->rq;
|
||||||
ide_expiry_t *expiry = NULL;
|
ide_expiry_t *expiry = NULL;
|
||||||
int dma_error = 0, dma, stat, thislen, uptodate = 0;
|
int dma_error = 0, dma, thislen, uptodate = 0;
|
||||||
int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc, nsectors;
|
int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc, nsectors;
|
||||||
int sense = blk_sense_request(rq);
|
int sense = blk_sense_request(rq);
|
||||||
unsigned int timeout;
|
unsigned int timeout;
|
||||||
u16 len;
|
u16 len;
|
||||||
u8 ireason;
|
u8 ireason, stat;
|
||||||
|
|
||||||
ide_debug_log(IDE_DBG_PC, "cmd[0]: 0x%x, write: 0x%x",
|
ide_debug_log(IDE_DBG_PC, "cmd[0]: 0x%x, write: 0x%x",
|
||||||
rq->cmd[0], write);
|
rq->cmd[0], write);
|
||||||
|
@ -648,11 +637,16 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = cdrom_decode_status(drive, 0, &stat);
|
/* check status */
|
||||||
if (rc) {
|
stat = hwif->tp_ops->read_status(hwif);
|
||||||
if (rc == 2)
|
|
||||||
goto out_end;
|
if (!OK_STAT(stat, 0, BAD_R_STAT)) {
|
||||||
return ide_stopped;
|
rc = cdrom_decode_status(drive, stat);
|
||||||
|
if (rc) {
|
||||||
|
if (rc == 2)
|
||||||
|
goto out_end;
|
||||||
|
return ide_stopped;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* using dma, transfer is complete now */
|
/* using dma, transfer is complete now */
|
||||||
|
|
Loading…
Reference in a new issue