2012-11-07 19 views
0

我继续在FGPA驱动程序上运行我的workget_user_pages - VM_GROWSDOWN标志未设置引起的EFAULT错误

现在我添加了OpenCL支持。所以我有以下test。 这只是添加NUM_OF_EXEC次写入和读取相同缓冲区的请求,然后等待完成。

每个写入/读取请求在驱动程序中序列化,并作为DMA事务顺序执行。 DMA相关代码可以查看here。因此驱动程序需要一个事务,执行它(rsp_setup_dma和fpga_push_data_to_device),等待来自FPGA的中断(fpga_int_handler),释放资源(fpga_finish_dma_write)并开始一个新的事务。当NUM_OF_EXEC等于1时,似乎都可以工作,但是如果我增加它,问题就会出现。在某些时候,get_user_pages(在rsp_setup_dma)返回-EFAULT。调试内核,我发现,分配的vma没有设置VM_GROWSDOWN标志(在mmap.c中的find_extend_vma上)。但在这一点上,我坚持了下来,因为我不知道为什么我需要这个标志,我也不知道为什么没有设置。为什么get_user_pages会因上述症状而失败?我怎样才能调试呢?

回答

0

在某些体系结构中,堆栈增长,其他堆栈增长减少。请参阅hppa和hppa64了解创建此类标志需求的怪异内容。

因此,无论何时您必须处理为内核线程或进程设置堆栈,您都必须提供堆栈增长的方向。