mlxsw: spectrum: Split vFID range in two
authorIdo Schimmel <idosch@mellanox.com>
Tue, 15 Dec 2015 15:03:37 +0000 (16:03 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Dec 2015 16:58:21 +0000 (11:58 -0500)
commit7f71eb46a4858499e6e1be796786a6a1a8d685e5
treec17c10625d259a65fe7d10618e19206f687f26bb
parentbd40e9d6d5386d08ae1e54f28444f3e98c23485c
mlxsw: spectrum: Split vFID range in two

Up until now we used a 1:1 mapping - based on VID - to map a VLAN
interface to a vFID. However, a different scheme is needed in order to
support bridges between VLAN interfaces, as all the member interfaces -
which can have different VIDs - need to share the same vFID.

Solve that by splitting the vFID range in two:
 1. Non-bridged VLAN interfaces
 2. Bridged VLAN interfaces

When a VLAN interface is created, assign it the next available vFID in
the first range, unless one already exists for that VID or number of
vFIDs in the range was exceeded. When interface is removed, free the
vFID, unless other interfaces are mapped to it.

To accomplish the above:
 1. Store the VID to vFID mapping in a new struct (mlxsw_sp_vfid), which
    has a global context and holds a reference count.
 2. Create a vPort (dummy in case of bridge SELF invocation) on top of
    of the physical port and hold a reference to the associated vFID.

     vfid                    vfid
+-------------+         +-------------+
| vfid        |         | vfid        |
| vid         +---> ... | vid         |
| nr_vports   |         | nr_vports   |
+------+------+         +------+------+
       |
       +-----------------------+-------+
       |        |
     vport      vport
+-------------+          +-------------+
| ...       |          | ...       |
| *vfid       +---> ...  | *vfid       +---> ...
| ...       |          | ...       |
+------+------+          +------+------+
       |                               |
     port      port
+-------------+          +-------------+
| ...         |          | ...         |
| vports_list |          | vports_list |
| ...         |          | ...         |
+-------------+          +-------------+
     swXpY      swXpZ

Next patches in the series will add the missing infrastructure for the
second range and transfer vPorts between the two ranges according to the
received notifications.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c