[lkml]   [2004]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Worrisome IDE PIO transfers...

    [ Geert added to cc: ]

    On Sunday 29 of February 2004 00:24, Jeff Garzik wrote:
    > Looking at the function that is used to transfer data when in PIO mode...
    > void taskfile_output_data (ide_drive_t *drive, void *buffer, u32 wcount)
    > {
    > if (drive->bswap) {
    > ata_bswap_data(buffer, wcount);
    > HWIF(drive)->ata_output_data(drive, buffer, wcount);
    > ata_bswap_data(buffer, wcount);
    > } else {
    > HWIF(drive)->ata_output_data(drive, buffer, wcount);
    > }
    > }
    > Swapping the data in-place is very, very wrong... you don't want to be
    > touching the data that userspace might have mmap'd ... Additionally,
    > byteswapping back and forth for each PIO sector chews unnecessary CPU.

    This is used for accessing "normal" disks on beasts with byte-swapped IDE
    bus (Atari/Q40/TiVo) and "byteswapped" disks on normal machines.

    [ Hm. actually I don't see how it can be used for accessing "normal" disks,
    as data is byteswapped by IDE bus and then swapped back by IDE driver. ]

    Manfred noticed the same issue some time ago:
    but discussion ended without final conclusion.

    I like Alan's idea to use loopback instead of "bswap".

    > Seems to me the architecture's OUTS[WL] hook (or a new, similar hook)
    > that swaps as it writes would be _much_ preferred, and eliminate this
    > possible data corruption issue.

    I think something similar has been already done
    (grep for insw_swapw/outsw_swapw in ide-iops.c and asm-m68k/ide.h).


    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 14:01    [W:0.020 / U:3.016 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site