私はFGPA ドライバーの作業を続けています。
今、OpenCL サポートを追加しています。だから私は次のテストを持っています。同じバッファの書き込みおよび読み取り要求を NUM_OF_EXEC 回追加し、その後完了を待つだけです。
各書き込み/読み取り要求はドライバーでシリアル化され、DMA トランザクションとして順次実行されます。DMA 関連のコードは、ここで表示できます。
したがって、ドライバーはトランザクションを受け取り、それを実行し (rsp_setup_dma および fpga_push_data_to_device)、FPGA からの割り込みを待機し (fpga_int_handler)、リソースを解放し (fpga_finish_dma_write)、新しいリソースを開始します。NUM_OF_EXEC が 1 の場合はすべて機能しているように見えますが、増やすと問題が発生します。ある時点で、(rsp_setup_dma で) get_user_pages が -EFAULT を返します。カーネルをデバッグすると、割り当てられた vma に VM_GROWSDOWN フラグが設定されていないことがわかりました (mmap.c の find_extend_vma で)。しかし、この時点で私は立ち往生しました。なぜなら、このフラグが必要な理由を理解しているかどうかも、設定されていない理由もわからないからです。上記の症状で get_user_pages が失敗するのはなぜですか? どうすればこれをデバッグできますか?