]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: calculate the largest_mtu across all ports in the tree
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 21 Jun 2021 16:42:17 +0000 (19:42 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 21 Jun 2021 19:50:20 +0000 (12:50 -0700)
commit213bcc3a741efd2a61d1c2ebc7178103e5e9f498
treeb96d718085a82590f0d46aab077ad96f312be7be
parent34a6ddcf67f8ed4f8af48c770e1c35ca0d3df685
net: dsa: calculate the largest_mtu across all ports in the tree

If we have a cross-chip topology like this:

   sw0p0     sw0p1     sw0p2     sw0p3     sw0p4
[  cpu  ] [  user ] [  user ] [  dsa  ] [  user ]
                                  |
                                  +---------+
                                            |
   sw1p0     sw1p1     sw1p2     sw1p3     sw1p4
[  user ] [  user ] [  user ] [  dsa  ] [  dsa  ]

and we issue the following commands:

1. ip link set sw0p1 mtu 1700
2. ip link set sw1p1 mtu 1600

we notice the following happening:

Command 1. emits a non-targeted MTU notifier for the CPU port (sw0p0)
with the largest_mtu calculated across switch 0, of 1700. This matches
sw0p0, sw0p3 and sw1p4 (all CPU ports and DSA links).
Then, it emits a targeted MTU notifier for the user port (sw0p1), again
with MTU 1700 (this doesn't matter).

Command 2. emits a non-targeted MTU notifier for the CPU port (sw0p0)
with the largest_mtu calculated across switch 1, of 1600. This matches
the same group of ports as above, and decreases the MTU for the CPU port
and the DSA links from 1700 to 1600.

As a result, the sw0p1 user port can no longer communicate with its CPU
port at MTU 1700.

To address this, we should calculate the largest_mtu across all switches
that may share a CPU port, and only emit MTU notifiers with that value.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/slave.c