我试图用dmatest.c在英特尔至强服务器和普通笔记本电脑与i7处理器测试DMA。 这是从来没有能够得到一个通道 - 我发现了这一点通过调试dmatest.c本身。 下面854行始终执行(我把我自己的printk那里)。
有什么我应该做的就是这个API执行前的工作(如DMA模块或什么吗?)
或者,我用错API集? 在至强服务器,我做了大量的研究,它可以被加载ioatdma.ko模块。 modprobe的IOATDMA有的可在/ SYS /班/后DMA,如dma0channel0,dma1channel0 .... etc文件
但是,运行dmatest代码,但它仍然不能得到任何通道。
任何帮助或暗示的赞赏。
836 static void request_channels(struct dmatest_info *info,
837 enum dma_transaction_type type)
838 {
839 dma_cap_mask_t mask;
840
841 dma_cap_zero(mask);
842 dma_cap_set(type, mask);
843 for (;;) {
844 struct dmatest_params *params = &info->params;
845 struct dma_chan *chan;
846
847 chan = dma_request_channel(mask, filter, params);
848 if (chan) {
849 if (dmatest_add_channel(info, chan)) {
850 dma_release_channel(chan);
851 break; /* add_channel failed, punt */
852 }
853 } else
854 break; /* no more channels available */
测试命令,我使用的(以下在内核DOC dmatest.txt文件):
% echo dma0chan0 > /sys/kernel/debug/dmatest/channel
% echo 2000 > /sys/kernel/debug/dmatest/timeout
% echo 1 > /sys/kernel/debug/dmatest/iterations
% echo 1 > /sys/kernel/debug/dmatest/run