mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 01:56:42 +07:00
ide: remove try_to_flush_leftover_data()
Just use the new & shiny ide_pad_transfer() helper instead. Also remove the superfluous check for 'drive->media == ide_disk' while at it (ide_ata_error() is used only for ide_disk devices). Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
931ee0dc5c
commit
57279a7a40
@ -358,31 +358,6 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
|
|||||||
|
|
||||||
EXPORT_SYMBOL(ide_end_drive_cmd);
|
EXPORT_SYMBOL(ide_end_drive_cmd);
|
||||||
|
|
||||||
/**
|
|
||||||
* try_to_flush_leftover_data - flush junk
|
|
||||||
* @drive: drive to flush
|
|
||||||
*
|
|
||||||
* try_to_flush_leftover_data() is invoked in response to a drive
|
|
||||||
* unexpectedly having its DRQ_STAT bit set. As an alternative to
|
|
||||||
* resetting the drive, this routine tries to clear the condition
|
|
||||||
* by read a sector's worth of data from the drive. Of course,
|
|
||||||
* this may not help if the drive is *waiting* for data from *us*.
|
|
||||||
*/
|
|
||||||
static void try_to_flush_leftover_data (ide_drive_t *drive)
|
|
||||||
{
|
|
||||||
int i = (drive->mult_count ? drive->mult_count : 1) * SECTOR_WORDS;
|
|
||||||
|
|
||||||
if (drive->media != ide_disk)
|
|
||||||
return;
|
|
||||||
while (i > 0) {
|
|
||||||
u32 buffer[16];
|
|
||||||
u32 wcount = (i > 16) ? 16 : i;
|
|
||||||
|
|
||||||
i -= wcount;
|
|
||||||
drive->hwif->input_data(drive, NULL, buffer, wcount * 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ide_kill_rq(ide_drive_t *drive, struct request *rq)
|
static void ide_kill_rq(ide_drive_t *drive, struct request *rq)
|
||||||
{
|
{
|
||||||
if (rq->rq_disk) {
|
if (rq->rq_disk) {
|
||||||
@ -422,8 +397,11 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ &&
|
if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ &&
|
||||||
(hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0)
|
(hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) {
|
||||||
try_to_flush_leftover_data(drive);
|
int nsect = drive->mult_count ? drive->mult_count : 1;
|
||||||
|
|
||||||
|
ide_pad_transfer(drive, READ, nsect * SECTOR_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) {
|
if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) {
|
||||||
ide_kill_rq(drive, rq);
|
ide_kill_rq(drive, rq);
|
||||||
|
Loading…
Reference in New Issue
Block a user