On Sun, Jul 16, 2023 at 4:57 PM Andy Lutomirski luto@kernel.org wrote:
On 7/10/23 15:32, Mina Almasry wrote:
Add an interface for the user to notify the kernel that it is done reading the NET_RX dmabuf pages returned as cmsg. The kernel will drop the reference on the NET_RX pages to make them available for re-use.
Signed-off-by: Mina Almasry almasrymina@google.com
for (i = 0; i < num_tokens; i++) {
for (j = 0; j < tokens[i].token_count; j++) {
struct page *pg = xa_erase(&sk->sk_pagepool,
tokens[i].token_start + j);
if (pg)
put_page(pg);
else
/* -EINTR here notifies the userspace
* that not all tokens passed to it have
* been freed.
*/
ret = -EINTR;
Unless I'm missing something, this type of error reporting is unrecoverable -- userspace doesn't know how many tokens have been freed.
I think you should either make it explicitly unrecoverable (somehow shut down dmabuf handling entirely) or tell userspace how many tokens were successfully freed.
Thank you, the latter suggestion sounds perfect actually. The user can't do much if the kernel fails to free all the tokens, but at least it can know that something wrong is happening and can log an error for further debugging. Great suggestion! Thanks!