私はカーネルスレッドで実行されている次のようしている:私は非常に頻繁にUDPパケットを受信正常にブロックするkernel_recvmsg()を終了するには?
size = kernel_recvmsg(kthread->sock, &msg, &iov, 1, bufsize, MSG_DONTWAIT)
(10ms毎の者が言ってみましょう)。できるだけ早くそれらを処理するために、私はkernel_recvmsg()があるループの中にスリープを持っていません。残念ながら、私はUDPパケットが到着していない間に非常に大きなCPU消費を観察します。 ソケットをブロックして(MSG_DONTWAITを削除する)、間接的にkernel_recvmsg()をブロック解除して終了する方法がありますか?
予期せぬsock_release()を実行するとどうなりますか? kernel_recvmsg()はブロックを解除してエラーを返し、それに応じて処理することができますか(ループとスレッドを終了しますか)?
はい、これは良い選択肢です。ありがとう! – valioiv