On Sun, 6 Feb 2005 at 20:26:55 +0900, Tejun Heo wrote:
> + if (drive->using_dma &&
> + !(hwif->no_lba48_dma && block + rq->nr_sectors > 1ULL << 28)) {
> + /* DMA */
> + if (hwif->dma_setup(drive))
> + goto fallback_to_pio;
> + if (rq_data_dir(rq) == READ) {
> + command = lba48 ? WIN_READDMA_EXT : WIN_READDMA;
> + if (drive->vdma)
> + command = lba48 ? WIN_READ_EXT : WIN_READ;
> + } else {
> + command = lba48 ? WIN_WRITEDMA_EXT : WIN_WRITEDMA;
> + if (drive->vdma)
> + command = lba48 ? WIN_WRITE_EXT : WIN_WRITE;
> }
> - /* fallback to PIO */
> - ide_init_sg_cmd(drive, rq);
> + hwif->dma_exec_cmd(drive, command);
> + hwif->dma_start(drive);
> + return ide_started;
> }
Should that be "block + rq->nr_sectors >= 1ULL << 28"?
Legal sector numbers for LBA28 range from 0 thru (1 << 28 - 1).
LBA28 _capacities_ range from 1 thru (1 << 28) sectors.
And why is it using 1ULL some places and 1UL in others in the ide driver?
--
Chuck