On 8/13/24 00:57, Jakub Kicinski wrote:
On Mon, 12 Aug 2024 20:10:39 +0100 Pavel Begunkov wrote:
- Drivers need to be able to say "I support unreadable netmem".
Failure to report unreadable netmem support should cause the netlink API to fail when the user tries to bind dmabuf/io uring memory.
- Drivers need to be able to say "I want a header pool (with readable
netmem)" or "I want a data pool (potentially with unreadable netmem)".
Pavel is suggesting implementing both of these in 2 different flags.
Jakub is suggesting implementing both with 1 flag which says "I can support unreadable netmem for this pool" , and guarding against #1 with a refcount check to detect if a dmabuf pool should have been created but wasn't.
That would be iffy IIUC, but I think Jakub just explicitly said that the refcount trick was just for debugging purposes and not for gauging errors like "providers are not supported by the driver".
"Yup, the refcount (now: check of the page pool list) was meant as a WARN_ONCE() to catch bad drivers."
Sorry, insufficient caffeine level in the morning. We can't WARN_ONCE(), indeed.
I'm getting lost, so repeating myself a bit. What I think would be a good approach is if we get an error back from the driver if it doesn't support netiov / providers.
netdev_rx_queue_restart() { ... err = dev->queue_mgmt_ops->ndo_queue_mem_alloc(); if (err == -EOPNOTSUPP) // the driver doesn't support netiov return -EOPNOTSUPP; ... }
That can be done if drivers opt in to support providers, e.g. via a page pool flag.
What I think wouldn't be a great option is getting back a "success" from the driver even though it ignored
netdev_rx_queue_restart() { ... err = dev->queue_mgmt_ops->ndo_queue_mem_alloc(); if (err) return err;
// we get err==0 even if the driver doesn't support // providers, verify it is _actually_ installed if (rxq->mp_params) { // or walking pp list, same thing if (rxq->mp_params->refcount == 0) goto fail; } }
And if we go with the first version, the refcount check can also be added but as a warning. Maybe it's easier to put it into code and discuss then.