![仍然支持在 Linux 上关闭 DMA](https://linux22.com/image/67557/%E4%BB%8D%E7%84%B6%E6%94%AF%E6%8C%81%E5%9C%A8%20Linux%20%E4%B8%8A%E5%85%B3%E9%97%AD%20DMA.png)
尝试在我的 Linux 机器上关闭 DMA 返回:
HDIO_GET_DMA failed: Inappropriate ioctl for device
我记得这曾经用于打开或关闭 DMA。我也尝试过使用内核参数libata.dma=0
,但没有效果!不过 ATA 驱动程序和 DMA 似乎运行良好。所以我只是想知道我是否应该担心这个问题,或者它不再受支持。
发行版是 Ubuntu 12,内核是 3.5.0-54-generic。芯片组是
00:1f.2 SATA 控制器:Intel Corporation 7 系列/C210 系列芯片组系列 6 端口 SATA 控制器 [AHCI 模式](修订版 04)
答案1
HDIO_*_DMA
libata 不支持。
看https://ata.wiki.kernel.org/index.php/Libata_FAQ:
较旧的、不受支持的 ioctl
为什么HDIO_SET_DMA失败?我想使用DMA!为什么 HDIO_SET_UNMASKINTR 失败?
libata 故意不支持旧版 IDE 驱动程序支持的所有 HDIO_xxx ioctl。现在首选使用 SG_IO 作为通用 ATA 命令提交方法,而不是为每个特定目的创建无数的 ioctl。
设计决策只是为了支持其他程序大量使用的 HDIO_xxx ioctl。通常,驱动程序总是自动将硬件编程至其最大功能,完全无需用户干预。因此,例如,绝大多数用户不需要 HDIO_SET_DMA,因为 DMA 会自动启用并在可用时使用。