0

I'm continue my work on the FGPA driver.

Now I'm adding OpenCL support. So I have a following test. It's just add NUM_OF_EXEC times write and read requests of same buffers and after that waits for completion.

Each write/read request serialized in driver and sequentially executed as DMA transaction. DMA related code can be viewed here.

So the driver takes a transaction, execute it (rsp_setup_dma and fpga_push_data_to_device), waits for interrupt from FPGA (fpga_int_handler), release resources (fpga_finish_dma_write) and begin a new one. When NUM_OF_EXEC equals to 1, all seems to work, but if I increase it, problem appears. At some point get_user_pages (at rsp_setup_dma) returns -EFAULT. Debugging the kernel, I found out, that allocated vma doesn't have VM_GROWSDOWN flag set (at find_extend_vma in mmap.c). But at this point I stuck, because neither I'm sure that I understand why this flag is needed, neither I have an idea why it is not set. Why can get_user_pages fail with the above symptomps? How can I debug this?

soh
  • 85
  • 1
  • 6

1 Answers1

0

On some architectures the stack grows up and on others the stack grows down. See hppa and hppa64 for the weirdos that created the need for such a flag.

So whenever you have to deal with setting up the stack for a kernel thread or process you'll have to provide the direction in which the stack grows as well.

Paul Irofti
  • 412
  • 3
  • 17