mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-30 03:07:44 +08:00
netdevsim: allow normal queue reset while down
Resetting queues while the device is down should be legal. Allow it, test it. Ideally we'd test this with a real device supporting devmem but I don't have access to such devices. Reviewed-by: Mina Almasry <almasrymina@google.com> Link: https://patch.msgid.link/20250206225638.1387810-5-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -645,8 +645,11 @@ nsim_queue_mem_alloc(struct net_device *dev, void *per_queue_mem, int idx)
|
||||
if (ns->rq_reset_mode > 3)
|
||||
return -EINVAL;
|
||||
|
||||
if (ns->rq_reset_mode == 1)
|
||||
if (ns->rq_reset_mode == 1) {
|
||||
if (!netif_running(ns->netdev))
|
||||
return -ENETDOWN;
|
||||
return nsim_create_page_pool(&qmem->pp, &ns->rq[idx]->napi);
|
||||
}
|
||||
|
||||
qmem->rq = nsim_queue_alloc();
|
||||
if (!qmem->rq)
|
||||
@@ -754,11 +757,6 @@ nsim_qreset_write(struct file *file, const char __user *data,
|
||||
return -EINVAL;
|
||||
|
||||
rtnl_lock();
|
||||
if (!netif_running(ns->netdev)) {
|
||||
ret = -ENETDOWN;
|
||||
goto exit_unlock;
|
||||
}
|
||||
|
||||
if (queue >= ns->netdev->real_num_rx_queues) {
|
||||
ret = -EINVAL;
|
||||
goto exit_unlock;
|
||||
|
||||
@@ -35,6 +35,21 @@ def napi_list_check(nf) -> None:
|
||||
comment=f"queue count after reset queue {q} mode {i}")
|
||||
|
||||
|
||||
def nsim_rxq_reset_down(nf) -> None:
|
||||
"""
|
||||
Test that the queue API supports resetting a queue
|
||||
while the interface is down. We should convert this
|
||||
test to testing real HW once more devices support
|
||||
queue API.
|
||||
"""
|
||||
with NetdevSimDev(queue_count=4) as nsimdev:
|
||||
nsim = nsimdev.nsims[0]
|
||||
|
||||
ip(f"link set dev {nsim.ifname} down")
|
||||
for i in [0, 2, 3]:
|
||||
nsim.dfs_write("queue_reset", f"1 {i}")
|
||||
|
||||
|
||||
def page_pool_check(nf) -> None:
|
||||
with NetdevSimDev() as nsimdev:
|
||||
nsim = nsimdev.nsims[0]
|
||||
@@ -106,7 +121,8 @@ def page_pool_check(nf) -> None:
|
||||
|
||||
def main() -> None:
|
||||
nf = NetdevFamily()
|
||||
ksft_run([empty_check, lo_check, page_pool_check, napi_list_check],
|
||||
ksft_run([empty_check, lo_check, page_pool_check, napi_list_check,
|
||||
nsim_rxq_reset_down],
|
||||
args=(nf, ))
|
||||
ksft_exit()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user