1. 16 12月, 2015 13 次提交
    • I
      mlxsw: reg: Add lag_vid field to SFD register · afd7f979
      Ido Schimmel 提交于
      Unicast LAG records in the Switch Filtering Database (SFD) register have
      a lag_vid field indicating the VLAN ID in case of vFIDs. This field is
      no longer reserved since we are going to add support for VLAN devices on
      top of LAG.
      
      Add the lag_vid field to be used by VLAN devies on top of LAG.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      afd7f979
    • I
      mlxsw: spectrum: Add support for VLAN devices bridging · 26f0e7fb
      Ido Schimmel 提交于
      All the member VLAN devices in a bridge need to share the same vFID.
      
      To achieve that, expand the vFID struct to include the associated bridge
      device (or lack of) and allow one to lookup a vFID based on a bridge
      device.
      
      When joining a bridge, lookup the relevant vFID or create one if none
      exists. Next, make the VLAN device use the vFID.
      
      Leaving a bridge can either occur because a user removed the VLAN device
      from a bridge or because the VLAN device was deleted by the user. In the
      latter case the bridge's teardown sequence is invoked after the hardware
      vPort is already gone. Therefore, when unlinking the VLAN device from
      the real device, check if the associated vPort is bridged and act
      accordingly. The bridge's notification will be ignored in this case.
      
      Note that bridging a VLAN interface with an ordinary port netdev is
      currently not supported, but not forbidden. This will be addressed in a
      follow-up patchset.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      26f0e7fb
    • I
      mlxsw: spectrum: Handle VLAN devices linking / unlinking · 9589a7b5
      Ido Schimmel 提交于
      When a VLAN interface is configured on top of a physical port we should
      associate the VLAN device with the matching vPort. Likewise, when it's
      removed, we should revert back to the underlying port netdev.
      
      While not a must, this is consistent with port netdevs and also provides
      a more accurate error printing via netdev_err() and friends.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9589a7b5
    • I
      mlxsw: spectrum: Adjust FDB notifications for VLAN devices · aac78a44
      Ido Schimmel 提交于
      FDB notifications contain the FID and port (or LAG ID) on which the MAC
      was learned. In the case of the 802.1Q bridge one can easily derive the
      matching VID - as FID equals VID - and generate the appropriate
      notification for the software bridge. With VLAN devices this is no
      longer the case, as these are associated with a vFID.
      
      Solve that by converting the FID to a vFID and lookup the matching VLAN
      device. From that derive the VID and whether learning (and learning
      sync) should occur.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      aac78a44
    • I
      mlxsw: spectrum: Adjust switchdev ops for VLAN devices · 54a73201
      Ido Schimmel 提交于
      switchdev ops can now be called for VLAN devices and we need to be
      prepared for it. Until now they were only called for the port netdev.
      
      Use the newly propagated orig_dev passed as part of the switchdev
      attr/obj and determine whether the original device is a VLAN device. If
      so, act accordingly, otherwise continue as usual.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      54a73201
    • I
      mlxsw: spectrum: Use FID instead of VID when accessing FDB · 9de6a80e
      Ido Schimmel 提交于
      In the Spectrum ASIC - unlike SwitchX-2 - FDB access is done by
      specifying FID as parameter and not VID.
      
      Change the relevant variables and parameters names to reflect that.
      
      Note that this was OK up until now, since FID was always equal to VID,
      but with the introduction of VLAN interfaces this is no longer the case.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9de6a80e
    • I
      mlxsw: spectrum: Add another flood table for vFIDs · 19ae6124
      Ido Schimmel 提交于
      We previously used only one flood table for packets classified to vFIDs.
      However, since we are going to add support for bridges between VLAN
      interfaces (mapped to vFIDs) we need to add one more flood table.
      
      That way we can separate the flooding domain of unknown unicast traffic
      from all the rest and support flood control (as we do with the 802.1Q
      bridge).
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      19ae6124
    • I
      mlxsw: spectrum: Use appropriate parameter name · c06a94ef
      Ido Schimmel 提交于
      The __mlxsw_sp_port_flood_set function is now used to configure flooding
      for both FIDs and vFIDs, so change the parameter name to 'idx' instead
      of 'fid'. This is also consistent with hardware documentation.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c06a94ef
    • I
      mlxsw: spectrum: Split vFID range in two · 7f71eb46
      Ido Schimmel 提交于
      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: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7f71eb46
    • I
      mlxsw: spectrum: Allocate active VLANs only for port netdevs · bd40e9d6
      Ido Schimmel 提交于
      When adding support for bridges between VLAN interfaces, we'll introduce
      a new entity called a vPort, which is a represntation of the VLAN
      interface in the hardware.
      
      The main difference between a vPort and a physical port is that several
      FIDs can be bound to the latter, whereas only one (called a vFID) can be
      bound to the first.
      
      Therefore, it makes sense to use the same struct to represent the two,
      but to only allocate the 'active_vlans' bitmap in case of a physical
      port.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bd40e9d6
    • I
      switchdev: Pass original device to port netdev driver · 6ff64f6f
      Ido Schimmel 提交于
      switchdev drivers need to know the netdev on which the switchdev op was
      invoked. For example, the STP state of a VLAN interface configured on top
      of a port can change while being member in a bridge. In this case, the
      underlying driver should only change the STP state of that particular
      VLAN and not of all the VLANs configured on the port.
      
      However, current switchdev infrastructure only passes the port netdev down
      to the driver. Solve that by passing the original device down to the
      driver as part of the required switchdev object / attribute.
      
      This doesn't entail any change in current switchdev drivers. It simply
      enables those supporting stacked devices to know the originating device
      and act accordingly.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6ff64f6f
    • I
      switchdev: vlan: Use switchdev_port* in vlan_netdev_ops · 9d547833
      Ido Schimmel 提交于
      We need to be able to propagate static FDB entries and certain bridge
      port attributes (e.g. learning, flooding) down to the port netdev
      driver when bridge port is a VLAN interface.
      
      Achieve that by setting ndo_bridge* and ndo_fdb* in vlan_netdev_ops to
      the corresponding switchdev_port* functions. This is consistent with
      team and bond devices.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9d547833
    • D
      Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue · 335b3209
      David S. Miller 提交于
      Jeff Kirsher says:
      
      ====================
      1GbE Intel Wired LAN Driver Updates 2015-12-14
      
      This series contains updates to e1000e and igb.
      
      Alex Duyck changes e1000_up() to void since it always returned 0, also
      by making it void, we can drop some code since we no longer have to worry
      about non-zero return values.
      
      Aaron Sierra removes GS40G specific defines and functions since the i210
      internal PHY can be accessed with the access functions shared by 82580,
      i350 and i354 devices.  Also removes the code to add the PHY address into
      the PCDL register address, since there is no real reason to do so.
      
      Joe updates the cable length function reports all four pairs true min, max
      and average cable length for i210.  Also updated ethtool to use enum-based
      labels instead of hard coded values.
      
      Benjamin Poirier cleans up code that is never reachable since MSI-X
      interrupts are not shared in e1000e.  Also removes the ICR read in the
      other interrupt handler, since the information is not needed and IMS is
      configured such that the only link status change can trigger the other
      interrupt handler.  Fixed in MSI-X mode, there is no handler for the LSC
      interrupt so there is no point in writing that to ICS now that we always
      assume other interrupts are caused by LSC.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      335b3209
  2. 15 12月, 2015 27 次提交