-
Notifications
You must be signed in to change notification settings - Fork 172
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use pgprot_noncached for ARM64 #28
Conversation
issue ありがとうございます。 私も当初、pgprot_noncached(vm_page_prot) にしていたのですが、ARM64 の場合、pgprot_noncached(vm_page_prot) だと memset() で Bus error が起きました。
ここでの u-dma-buf_test は、https://github.com/ikwzm/udmabuf の含まれている u-dma-buf_test.c をコンパイルしたものです。 この問題は pgprot_noncached(vm_page_prot) を pgprot_writecombine(vm_page_prot) に変更することで治りました。変更後の u-dma-buf_test 実行結果は次の通りです。
ですので、pgprot_noncached に変更するのは見送らせてください。 しかし、ご指摘の通り、問題があるのはわかりました。 |
前言撤回します あなたの pull request をマージさせてもらいました。ありがとうございます。 マージした理由は、Readme.md や Readme.ja.md にも書きましたが、キャッシュコヒーレンシの問題は発症した場合とても分かりにくくデバッグが困難だからです。それに悩むくらいなら、バスエラーを発生させた方がまだよいだろうと判断しました。 もしバスエラーが発生した場合は、O_SYNC によるキャッシュ無効化ではなく、ハードウェアによるキャッシュコヒーレンシ維持か、sync_for_cpu、sync_for_device によるマニュアルでのキャッシュコヒーレンシ維持を使うことを検討してください。 この度は、貴重な pull request ありがとうございました。今後ともよろしくお願いします。 |
レビュー & マージありがとうございました! |
はじめまして、お世話になっております。
Ultra96 上で udmabuf を用いて 72 byte のデータを udmabuf に配置しその後 AXI DMA を用いて PL に送信してみたのですが、最初の 64 byte のみ送信され、残りの値が 0 になってしまいました。
以下のコードで再現します。
以下のようにして実行できます。
1で埋められた配列 arr を udmabuf で確保したメモリに memcpy した後、
/dev/mem
を通じて phys_addr+64 にアクセスしているのですが、0が返ってきてしまいます。(0~63 にアクセスしたときは正しく1が返ってきます。)この PR の変更を適用することで解決したのですが、もし正しい修正ならマージしていただけますでしょうか。
よろしくお願いいたします。