Messages in this thread | | | Date | Tue, 22 Apr 2008 20:12:41 +0400 | From | Sergei Shtylyov <> | Subject | Re: [PATCH 1/5] ide: add ide_pad_transfer() helper |
| |
Bartlomiej Zolnierkiewicz wrote:
> * Add ide_pad_transfer() helper (which uses ->{in,out}put_data methods > internally so the transfer is also padded to drive+host requirements) > and use it instead of ide_atapi_{write_zeros,discard_data}().
> * Remove no longer needed ide_atapi_{write_zeros,discard_data}().
> Cc: Borislav Petkov <petkovbb@gmail.com> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
> Index: b/drivers/ide/ide-tape.c > =================================================================== > --- a/drivers/ide/ide-tape.c > +++ b/drivers/ide/ide-tape.c > @@ -395,7 +395,7 @@ static void idetape_input_buffers(ide_dr > if (bh == NULL) { > printk(KERN_ERR "ide-tape: bh == NULL in " > "idetape_input_buffers\n"); > - ide_atapi_discard_data(drive, bcount); > + ide_pad_transfer(drive, 0, bcount); > return; > } > count = min( > @@ -871,7 +871,7 @@ static ide_startstop_t idetape_pc_intr(i > printk(KERN_ERR "ide-tape: The tape wants to " > "send us more data than expected " > "- discarding data\n"); > - ide_atapi_discard_data(drive, bcount); > + ide_pad_transfer(drive, 0, bcount); > ide_set_handler(drive, &idetape_pc_intr, > IDETAPE_WAIT_CMD, NULL); > return ide_started; > Index: b/drivers/scsi/ide-scsi.c > =================================================================== > --- a/drivers/scsi/ide-scsi.c > +++ b/drivers/scsi/ide-scsi.c > @@ -164,7 +164,7 @@ static void idescsi_input_buffers(ide_dr > > if (bcount) { > printk (KERN_ERR "ide-scsi: scatter gather table too small, discarding data\n"); > - ide_atapi_discard_data(drive, bcount); > + ide_pad_transfer(drive, 0, bcount); > } > } > > @@ -201,7 +201,7 @@ static void idescsi_output_buffers(ide_d > > if (bcount) { > printk (KERN_ERR "ide-scsi: scatter gather table too small, padding with zeros\n"); > - ide_atapi_write_zeros(drive, bcount); > + ide_pad_transfer(drive, 1, bcount); > } > } > > @@ -438,7 +438,7 @@ static ide_startstop_t idescsi_pc_intr ( > } > pc->xferred += temp; > pc->cur_pos += temp; > - ide_atapi_discard_data(drive, bcount - temp); > + ide_pad_transfer(drive, 0, bcount - temp); > ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), idescsi_expiry); > return ide_started; > } > Index: b/include/linux/ide.h > =================================================================== > --- a/include/linux/ide.h > +++ b/include/linux/ide.h > @@ -816,6 +816,8 @@ void ide_execute_command(ide_drive_t *, > > void ide_execute_pkt_cmd(ide_drive_t *); > > +void ide_pad_transfer(ide_drive_t *, int, int); > + > ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8); > > ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); > @@ -1346,27 +1348,4 @@ static inline u8 ide_read_error(ide_driv > > return hwif->INB(hwif->io_ports.error_addr); > } > - > -/* > - * Too bad. The drive wants to send us data which we are not ready to accept. > - * Just throw it away. > - */ > -static inline void ide_atapi_discard_data(ide_drive_t *drive, unsigned bcount) > -{ > - ide_hwif_t *hwif = drive->hwif; > - > - /* FIXME: use ->input_data */ > - while (bcount--) > - (void)hwif->INB(hwif->io_ports.data_addr); > -} > - > -static inline void ide_atapi_write_zeros(ide_drive_t *drive, unsigned bcount) > -{ > - ide_hwif_t *hwif = drive->hwif; > - > - /* FIXME: use ->output_data */ > - while (bcount--) > - hwif->OUTB(0, hwif->io_ports.data_addr); > -} > - > #endif /* _IDE_H */
I doubt that these ever worked as expected since you can't hope that the IDE data transfers are 8-bit if you use 8-bit I/O -- they will be 16-bit anyway. So, this patch is not just a cleanup, it's fixing a bug. :-)
MBR, Sergei
| |