Skip to content

Commit 34f71de

Browse files
committed
net: avoid false positive warnings in __net_mp_close_rxq()
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: a70f891 ("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>
1 parent ec304b7 commit 34f71de

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

net/core/devmem.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,21 +116,19 @@ void net_devmem_unbind_dmabuf(struct net_devmem_dmabuf_binding *binding)
116116
struct netdev_rx_queue *rxq;
117117
unsigned long xa_idx;
118118
unsigned int rxq_idx;
119-
int err;
120119

121120
if (binding->list.next)
122121
list_del(&binding->list);
123122

124123
xa_for_each(&binding->bound_rxqs, xa_idx, rxq) {
125-
WARN_ON(rxq->mp_params.mp_priv != binding);
126-
127-
rxq->mp_params.mp_priv = NULL;
128-
rxq->mp_params.mp_ops = NULL;
124+
const struct pp_memory_provider_params mp_params = {
125+
.mp_priv = binding,
126+
.mp_ops = &dmabuf_devmem_ops,
127+
};
129128

130129
rxq_idx = get_netdev_rx_queue_index(rxq);
131130

132-
err = netdev_rx_queue_restart(binding->dev, rxq_idx);
133-
WARN_ON(err && err != -ENETDOWN);
131+
__net_mp_close_rxq(binding->dev, rxq_idx, &mp_params);
134132
}
135133

136134
xa_erase(&net_devmem_dmabuf_bindings, binding->id);

net/core/netdev_rx_queue.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ void __net_mp_close_rxq(struct net_device *dev, unsigned int ifq_idx,
154154
const struct pp_memory_provider_params *old_p)
155155
{
156156
struct netdev_rx_queue *rxq;
157+
int err;
157158

158159
if (WARN_ON_ONCE(ifq_idx >= dev->real_num_rx_queues))
159160
return;
@@ -173,7 +174,8 @@ void __net_mp_close_rxq(struct net_device *dev, unsigned int ifq_idx,
173174

174175
rxq->mp_params.mp_ops = NULL;
175176
rxq->mp_params.mp_priv = NULL;
176-
WARN_ON(netdev_rx_queue_restart(dev, ifq_idx));
177+
err = netdev_rx_queue_restart(dev, ifq_idx);
178+
WARN_ON(err && err != -ENETDOWN);
177179
}
178180

179181
void net_mp_close_rxq(struct net_device *dev, unsigned ifq_idx,

0 commit comments

Comments
 (0)