Messages in this thread | | | Date | Sat, 28 Feb 2004 18:24:28 -0500 | From | Jeff Garzik <> | Subject | Worrisome IDE PIO transfers... |
| |
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.
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.
Jeff
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |