Commit bcee7559 authored by Amit Cohen's avatar Amit Cohen Committed by sanglipeng1
Browse files

selftests: mlxsw: qos_pfc: Adjust the test to support 8 lanes

stable inclusion
from stable-v5.10.209
commit 8ba74e90162e2934f380e44ee6b2d73b6f31fb33
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I9U3NW

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=8ba74e90162e2934f380e44ee6b2d73b6f31fb33



--------------------------------

[ Upstream commit b34f4de6d30cbaa8fed905a5080b6eace8c84dc7 ]

'qos_pfc' test checks PFC behavior. The idea is to limit the traffic
using a shaper somewhere in the flow of the packets. In this area, the
buffer is smaller than the buffer at the beginning of the flow, so it fills
up until there is no more space left. The test configures there PFC
which is supposed to notice that the headroom is filling up and send PFC
Xoff to indicate the transmitter to stop sending traffic for the priorities
sharing this PG.

The Xon/Xoff threshold is auto-configured and always equal to
2*(MTU rounded up to cell size). Even after sending the PFC Xoff packet,
traffic will keep arriving until the transmitter receives and processes
the PFC packet. This amount of traffic is known as the PFC delay allowance.

Currently the buffer for the delay traffic is configured as 100KB. The
MTU in the test is 10KB, therefore the threshold for Xoff is about 20KB.
This allows 80KB extra to be stored in this buffer.

8-lane ports use two buffers among which the configured buffer is split,
the Xoff threshold then applies to each buffer in parallel.

The test does not take into account the behavior of 8-lane ports, when the
ports are configured to 400Gbps with 8 lanes or 800Gbps with 8 lanes,
packets are dropped and the test fails.

Check if the relevant ports use 8 lanes, in such case double the size of
the buffer, as the headroom is split half-half.

Cc: Shuah Khan <shuah@kernel.org>
Fixes: bfa80478 ("selftests: mlxsw: Add a PFC test")
Signed-off-by: default avatarAmit Cohen <amcohen@nvidia.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
Link: https://lore.kernel.org/r/23ff11b7dff031eb04a41c0f5254a2b636cd8ebb.1705502064.git.petrm@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarsanglipeng1 <sanglipeng1@jd.com>
parent 1186d59d
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -121,6 +121,9 @@ h2_destroy()

switch_create()
{
	local lanes_swp4
	local pg1_size

	# pools
	# -----

@@ -230,7 +233,20 @@ switch_create()
	dcb pfc set dev $swp4 prio-pfc all:off 1:on
	# PG0 will get autoconfigured to Xoff, give PG1 arbitrarily 100K, which
	# is (-2*MTU) about 80K of delay provision.
	dcb buffer set dev $swp4 buffer-size all:0 1:$_100KB
	pg1_size=$_100KB

	setup_wait_dev_with_timeout $swp4

	lanes_swp4=$(ethtool $swp4 | grep 'Lanes:')
	lanes_swp4=${lanes_swp4#*"Lanes: "}

	# 8-lane ports use two buffers among which the configured buffer
	# is split, so double the size to get twice (20K + 80K).
	if [[ $lanes_swp4 -eq 8 ]]; then
		pg1_size=$((pg1_size * 2))
	fi

	dcb buffer set dev $swp4 buffer-size all:0 1:$pg1_size

	# bridges
	# -------