Message ID | 1631519629-12338-1-git-send-email-ayal@nvidia.com (mailing list archive) |
---|---|
State | Accepted |
Commit | e50e711351bdc656a8e6ca1022b4293cae8dcd59 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] udp_tunnel: Fix udp_tunnel_nic work-queue type | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | success | CCed 5 of 5 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 8 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
Hello: This patch was applied to netdev/net.git (refs/heads/master): On Mon, 13 Sep 2021 10:53:49 +0300 you wrote: > Turn udp_tunnel_nic work-queue to an ordered work-queue. This queue > holds the UDP-tunnel configuration commands of the different netdevs. > When the netdevs are functions of the same NIC the order of > execution may be crucial. > > Problem example: > NIC with 2 PFs, both PFs declare offload quota of up to 3 UDP-ports. > $ifconfig eth2 1.1.1.1/16 up > > [...] Here is the summary with links: - [net] udp_tunnel: Fix udp_tunnel_nic work-queue type https://git.kernel.org/netdev/net/c/e50e711351bd You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
On Mon, 13 Sep 2021 10:53:49 +0300 Aya Levin wrote: > Turn udp_tunnel_nic work-queue to an ordered work-queue. This queue > holds the UDP-tunnel configuration commands of the different netdevs. > When the netdevs are functions of the same NIC the order of > execution may be crucial. > > Problem example: > NIC with 2 PFs, both PFs declare offload quota of up to 3 UDP-ports. > $ifconfig eth2 1.1.1.1/16 up > > $ip link add eth2_19503 type vxlan id 5049 remote 1.1.1.2 dev eth2 dstport 19053 > $ip link set dev eth2_19503 up > > $ip link add eth2_19504 type vxlan id 5049 remote 1.1.1.3 dev eth2 dstport 19054 > $ip link set dev eth2_19504 up > > $ip link add eth2_19505 type vxlan id 5049 remote 1.1.1.4 dev eth2 dstport 19055 > $ip link set dev eth2_19505 up > > $ip link add eth2_19506 type vxlan id 5049 remote 1.1.1.5 dev eth2 dstport 19056 > $ip link set dev eth2_19506 up > > NIC RX port offload infrastructure offloads the first 3 UDP-ports (on > all devices which sets NETIF_F_RX_UDP_TUNNEL_PORT feature) and not > UDP-port 19056. So both PFs gets this offload configuration. > > $ip link set dev eth2_19504 down > > This triggers udp-tunnel-core to remove the UDP-port 19504 from > offload-ports-list and offload UDP-port 19056 instead. > > In this scenario it is important that the UDP-port of 19504 will be > removed from both PFs before trying to add UDP-port 19056. The NIC can > stop offloading a UDP-port only when all references are removed. > Otherwise the NIC may report exceeding of the offload quota. > > Fixes: cc4e3835eff4 ("udp_tunnel: add central NIC RX port offload infrastructure") > Signed-off-by: Aya Levin <ayal@nvidia.com> > Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Obviously not. If you hardware uses a single port table regardless of the number of PFs you should use the shared table version of the API, like Intel does.
diff --git a/net/ipv4/udp_tunnel_nic.c b/net/ipv4/udp_tunnel_nic.c index 0d122edc368d..b91003538d87 100644 --- a/net/ipv4/udp_tunnel_nic.c +++ b/net/ipv4/udp_tunnel_nic.c @@ -935,7 +935,7 @@ static int __init udp_tunnel_nic_init_module(void) { int err; - udp_tunnel_nic_workqueue = alloc_workqueue("udp_tunnel_nic", 0, 0); + udp_tunnel_nic_workqueue = alloc_ordered_workqueue("udp_tunnel_nic", 0); if (!udp_tunnel_nic_workqueue) return -ENOMEM;