0

私は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 が失敗するのはなぜですか? どうすればこれをデバッグできますか?

4

1 に答える 1

0

一部のアーキテクチャではスタックが成長し、他のアーキテクチャではスタックが成長します。このようなフラグの必要性を生み出した変人については、hppa と hppa64 を参照してください。

そのため、カーネル スレッドまたはプロセスのスタックの設定に対処する必要があるときはいつでも、スタックが成長する方向も提供する必要があります。

于 2012-11-10T19:21:26.447 に答える