Trying to turn off DMA on my Linux machine returns:

HDIO_GET_DMA failed: Inappropriate ioctl for device

I remember that this used to work to turn DMA on or off. I also tried using the kernel parameter libata.dma=0 but it had no effect! The ATA driver and DMA seem to work well however. So I just wonder weather I should worry about this or it is just not supported anymore.

The distro is Ubuntu 12 and the kernel is 3.5.0-54-generic. The chipset is

00:1f.2 SATA controller: Intel Corporation 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] (rev 04)

1 Answer 1


HDIO_*_DMA are not supported by libata.

See https://ata.wiki.kernel.org/index.php/Libata_FAQ:

Older, unsupported ioctls

Why does HDIO_SET_DMA fail? I want to use DMA! Why does HDIO_SET_UNMASKINTR fail?

libata intentionally does not support all the HDIO_xxx ioctls that were supported by the older IDE driver. It is now preferred to use SG_IO as a generalized ATA command submission method, rather than creating a myriad of ioctls for each specific purpose.

The design decision was made only to support the HDIO_xxx ioctls that were heavily used by other programs. Generally the driver always programs the hardware to its maximum capability automatically, completely without user intervention. Therefore, for example, HDIO_SET_DMA is not needed for the vast majority of users because DMA is automatically enabled and used where available.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .