]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: avoid false positive warnings in __net_mp_close_rxq()
authorJakub Kicinski <kuba@kernel.org>
Thu, 3 Apr 2025 01:34:05 +0000 (18:34 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 4 Apr 2025 14:35:38 +0000 (07:35 -0700)
Commit under Fixes solved the problem of spurious warnings when we
uninstall an MP from a device while its down. The __net_mp_close_rxq()
which is used by io_uring was not fixed. Move the fix over and reuse
__net_mp_close_rxq() in the devmem path.

Acked-by: Stanislav Fomichev <sdf@fomichev.me>
Fixes: a70f891e0fa0 ("net: devmem: do not WARN conditionally after netdev_rx_queue_restart()")
Reviewed-by: Mina Almasry <almasrymina@google.com>
Link: https://patch.msgid.link/20250403013405.2827250-3-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/devmem.c
net/core/netdev_rx_queue.c

index f2ce3c2ebc9744a31aaf386162ee5720ef562141..6e27a47d04935436fb7ee68a422734154a55bf99 100644 (file)
@@ -116,21 +116,19 @@ void net_devmem_unbind_dmabuf(struct net_devmem_dmabuf_binding *binding)
        struct netdev_rx_queue *rxq;
        unsigned long xa_idx;
        unsigned int rxq_idx;
-       int err;
 
        if (binding->list.next)
                list_del(&binding->list);
 
        xa_for_each(&binding->bound_rxqs, xa_idx, rxq) {
-               WARN_ON(rxq->mp_params.mp_priv != binding);
-
-               rxq->mp_params.mp_priv = NULL;
-               rxq->mp_params.mp_ops = NULL;
+               const struct pp_memory_provider_params mp_params = {
+                       .mp_priv        = binding,
+                       .mp_ops         = &dmabuf_devmem_ops,
+               };
 
                rxq_idx = get_netdev_rx_queue_index(rxq);
 
-               err = netdev_rx_queue_restart(binding->dev, rxq_idx);
-               WARN_ON(err && err != -ENETDOWN);
+               __net_mp_close_rxq(binding->dev, rxq_idx, &mp_params);
        }
 
        xa_erase(&net_devmem_dmabuf_bindings, binding->id);
index 556b5393ec9f27345b20f7ce7d87e3ce00b39af2..d126f10197bf471be67365b470270b0f9dcf7494 100644 (file)
@@ -154,6 +154,7 @@ void __net_mp_close_rxq(struct net_device *dev, unsigned int ifq_idx,
                        const struct pp_memory_provider_params *old_p)
 {
        struct netdev_rx_queue *rxq;
+       int err;
 
        if (WARN_ON_ONCE(ifq_idx >= dev->real_num_rx_queues))
                return;
@@ -173,7 +174,8 @@ void __net_mp_close_rxq(struct net_device *dev, unsigned int ifq_idx,
 
        rxq->mp_params.mp_ops = NULL;
        rxq->mp_params.mp_priv = NULL;
-       WARN_ON(netdev_rx_queue_restart(dev, ifq_idx));
+       err = netdev_rx_queue_restart(dev, ifq_idx);
+       WARN_ON(err && err != -ENETDOWN);
 }
 
 void net_mp_close_rxq(struct net_device *dev, unsigned ifq_idx,