pata_ali: Lots of problems still showing up with small ATAPI DMA
Hopefully there is a better long term solution but for now lets favour reliability. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
@@ -285,6 +285,21 @@ static void ali_lock_sectors(struct ata_device *adev)
|
|||||||
adev->max_sectors = 255;
|
adev->max_sectors = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ali_check_atapi_dma - DMA check for most ALi controllers
|
||||||
|
* @adev: Device
|
||||||
|
*
|
||||||
|
* Called to decide whether commands should be sent by DMA or PIO
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int ali_check_atapi_dma(struct ata_queued_cmd *qc)
|
||||||
|
{
|
||||||
|
/* If its not a media command, its not worth it */
|
||||||
|
if (qc->nbytes < 2048)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct scsi_host_template ali_sht = {
|
static struct scsi_host_template ali_sht = {
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
@@ -381,6 +396,7 @@ static struct ata_port_operations ali_c2_port_ops = {
|
|||||||
.mode_filter = ata_pci_default_filter,
|
.mode_filter = ata_pci_default_filter,
|
||||||
.tf_load = ata_tf_load,
|
.tf_load = ata_tf_load,
|
||||||
.tf_read = ata_tf_read,
|
.tf_read = ata_tf_read,
|
||||||
|
.check_atapi_dma = ali_check_atapi_dma,
|
||||||
.check_status = ata_check_status,
|
.check_status = ata_check_status,
|
||||||
.exec_command = ata_exec_command,
|
.exec_command = ata_exec_command,
|
||||||
.dev_select = ata_std_dev_select,
|
.dev_select = ata_std_dev_select,
|
||||||
@@ -418,6 +434,7 @@ static struct ata_port_operations ali_c5_port_ops = {
|
|||||||
.mode_filter = ata_pci_default_filter,
|
.mode_filter = ata_pci_default_filter,
|
||||||
.tf_load = ata_tf_load,
|
.tf_load = ata_tf_load,
|
||||||
.tf_read = ata_tf_read,
|
.tf_read = ata_tf_read,
|
||||||
|
.check_atapi_dma = ali_check_atapi_dma,
|
||||||
.check_status = ata_check_status,
|
.check_status = ata_check_status,
|
||||||
.exec_command = ata_exec_command,
|
.exec_command = ata_exec_command,
|
||||||
.dev_select = ata_std_dev_select,
|
.dev_select = ata_std_dev_select,
|
||||||
|
Reference in New Issue
Block a user