1. 28 10月, 2021 22 次提交
  2. 27 10月, 2021 18 次提交
    • D
      Merge branch 'br-fdb-refactoring' · 6487c819
      David S. Miller 提交于
      Vladimir Oltean says:
      
      ====================
      Bridge FDB refactoring
      
      This series refactors the br_fdb.c, br_switchdev.c and switchdev.c files
      to offer the same level of functionality with a bit less code, and to
      clarify the purpose of some functions.
      
      No functional change intended.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6487c819
    • V
      net: switchdev: merge switchdev_handle_fdb_{add,del}_to_device · 716a30a9
      Vladimir Oltean 提交于
      To reduce code churn, the same patch makes multiple changes, since they
      all touch the same lines:
      
      1. The implementations for these two are identical, just with different
         function pointers. Reduce duplications and name the function pointers
         "mod_cb" instead of "add_cb" and "del_cb". Pass the event as argument.
      
      2. Drop the "const" attribute from "orig_dev". If the driver needs to
         check whether orig_dev belongs to itself and then
         call_switchdev_notifiers(orig_dev, SWITCHDEV_FDB_OFFLOADED), it
         can't, because call_switchdev_notifiers takes a non-const struct
         net_device *.
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      716a30a9
    • V
      net: bridge: create a common function for populating switchdev FDB entries · fab9eca8
      Vladimir Oltean 提交于
      There are two places where a switchdev FDB entry is constructed, one is
      br_switchdev_fdb_notify() and the other is br_fdb_replay(). One uses a
      struct initializer, and the other declares the structure as
      uninitialized and populates the elements one by one.
      
      One problem when introducing new members of struct
      switchdev_notifier_fdb_info is that there is a risk for one of these
      functions to run with an uninitialized value.
      
      So centralize the logic of populating such structure into a dedicated
      function. Being the primary location where these structures are created,
      using an uninitialized variable and populating the members one by one
      should be fine, since this one function is supposed to assign values to
      all its members.
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fab9eca8
    • V
      net: bridge: move br_fdb_replay inside br_switchdev.c · 5cda5272
      Vladimir Oltean 提交于
      br_fdb_replay is only called from switchdev code paths, so it makes
      sense to be disabled if switchdev is not enabled in the first place.
      
      As opposed to br_mdb_replay and br_vlan_replay which might be turned off
      depending on bridge support for multicast and VLANs, FDB support is
      always on. So moving br_mdb_replay and br_vlan_replay inside
      br_switchdev.c would mean adding some #ifdef's in br_switchdev.c, so we
      keep those where they are.
      
      The reason for the movement is that in future changes there will be some
      code reuse between br_switchdev_fdb_notify and br_fdb_replay.
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5cda5272
    • V
      net: bridge: reduce indentation level in fdb_create · 9574fb55
      Vladimir Oltean 提交于
      We can express the same logic without an "if" condition as big as the
      function, just return early if the kmem_cache_alloc() call fails.
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9574fb55
    • V
      net: bridge: rename br_fdb_insert to br_fdb_add_local · f6814fdc
      Vladimir Oltean 提交于
      br_fdb_insert() is a wrapper over fdb_insert() that also takes the
      bridge hash_lock.
      
      With fdb_insert() being renamed to fdb_add_local(), rename
      br_fdb_insert() to br_fdb_add_local().
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f6814fdc
    • V
      net: bridge: rename fdb_insert to fdb_add_local · 4731b6d6
      Vladimir Oltean 提交于
      fdb_insert() is not a descriptive name for this function, and also easy
      to confuse with __br_fdb_add(), fdb_add_entry(), br_fdb_update().
      Even more confusingly, it is not even related in any way with those
      functions, neither one calls the other.
      
      Since fdb_insert() basically deals with the creation of a BR_FDB_LOCAL
      entry and is called only from functions where that is the intention:
      
      - br_fdb_changeaddr
      - br_fdb_change_mac_address
      - br_fdb_insert
      
      then rename it to fdb_add_local(), because its removal counterpart is
      called fdb_delete_local().
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4731b6d6
    • V
      net: bridge: remove fdb_insert forward declaration · 5f94a5e2
      Vladimir Oltean 提交于
      fdb_insert() has a forward declaration because its first caller,
      br_fdb_changeaddr(), is declared before fdb_create(), a function which
      fdb_insert() needs.
      
      This patch moves the 2 functions above br_fdb_changeaddr() and deletes
      the forward declaration for fdb_insert().
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5f94a5e2
    • V
      net: bridge: remove fdb_notify forward declaration · 4682048a
      Vladimir Oltean 提交于
      fdb_notify() has a forward declaration because its first caller,
      fdb_delete(), is declared before 3 functions that fdb_notify() needs:
      fdb_to_nud(), fdb_fill_info() and fdb_nlmsg_size().
      
      This patch moves the aforementioned 4 functions above fdb_delete() and
      deletes the forward declaration.
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Acked-by: NNikolay Aleksandrov <nikolay@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4682048a
    • D
      Merge branch 'mvneta-phylink' · e334df1d
      David S. Miller 提交于
      Russell King says:
      
      ====================
      Convert mvneta to phylink supported_interfaces
      
      This patch series converts mvneta to use phylinks supported_interfaces
      bitmap to simplify the validate() implementation. The patches:
      
      1) Add the supported interface modes the supported_interfaces bitmap.
      2) Removes the checks for the interface type being supported from
         the validate callback
      3) Removes the now unnecessary checks and call to
         phylink_helper_basex_speed() to support switching between
         1000base-X and 2500base-X for SFPs
      
      (3) becomes possible because when asking the MAC for its complete
      support, we walk all supported interfaces which will include 1000base-X
      and 2500base-X only if the comphy is present.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e334df1d
    • R
      net: mvneta: drop use of phylink_helper_basex_speed() · 099cbfa2
      Russell King (Oracle) 提交于
      Now that we have a better method to select SFP interface modes, we
      no longer need to use phylink_helper_basex_speed() in a driver's
      validation function, and we can also get rid of our hack to indicate
      both 1000base-X and 2500base-X if the comphy is present to make that
      work. Remove this hack and use of phylink_helper_basex_speed().
      Signed-off-by: NRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      099cbfa2
    • R
      net: mvneta: remove interface checks in mvneta_validate() · d9ca7280
      Russell King (Oracle) 提交于
      As phylink checks the interface mode against the supported_interfaces
      bitmap, we no longer need to validate the interface mode in the
      validation function. Remove this to simplify it.
      Signed-off-by: NRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d9ca7280
    • R
      net: mvneta: populate supported_interfaces member · fdedb695
      Russell King 提交于
      Populate the phy_interface_t bitmap for the Marvell mvneta driver with
      interfaces modes supported by the MAC.
      Signed-off-by: NRussell King <rmk+kernel@armlinux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fdedb695
    • D
      Merge tag 'mlx5-updates-2021-10-26' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux · c230dc86
      David S. Miller 提交于
      Saeed Mahameed says:
      
      ====================
      mlx5-updates-2021-10-26
      
      HW-GRO support in mlx5
      
      Beside the HW GRO this series includes two trivial non-mlx5 patches:
       - net: Prevent HW-GRO and LRO features operate together
       - lib: bitmap: Introduce node-aware alloc API
      
      Khalid Manaa Says:
      ==================
      This series implements the HW-GRO offload using the HW feature SHAMPO.
      
      HW-GRO: Hardware offload for the Generic Receive Offload feature.
      
      SHAMPO: Split Headers And Merge Payload Offload.
      
      This feature performs headers data split for each received packed and
      merge the payloads of the packets of the same session.
      
      There are new HW components for this feature:
      
      The headers buffer:
      – cyclic buffer where the packets headers will be located
      
      Reservation buffer:
      – capability to divide RQ WQEs to reservations, a definite size in
        granularity of 4KB, the reservation is used to define the largest segment
        that we can create by packets stitching.
      
      Each reservation will have a session and the new received packet can be merged
      to the session, terminate it, or open a new one according to the match criteria.
      
      When a new packet is received the headers will be written to the headers buffer
      and the data will be written to the reservation, in case the packet matches
      the session the data will be written continuously otherwise it will be written
      after performing an alignment.
      
      SHAMPO RQ, WQ and CQE changes:
      -----------------------------
      RQ (receive queue) new params:
      
       -shampo_no_match_alignment_granularity: the HW alignment granularity in case
        the received packet doesn't match the current session.
      
       -shampo_match_criteria_type: the type of match criteria.
      
       -reservation_timeout: the maximum time that the HW will hold the reservation.
      
       -Each RQ has SKB that represents the current opened flow.
      
      WQ (work queue) new params:
      
       -headers_mkey: mkey that represents the headers buffer, where the packets
        headers will be written by the HW.
      
       -shampo_enable: flag to verify if the WQ supports SHAMPO feature.
      
       -log_reservation_size: the log of the reservation size where the data of
        the packet will be written by the HW.
      
       -log_max_num_of_packets_per_reservation: log of the maximum number of packets
        that can be written to the same reservation.
      
       -log_headers_entry_size: log of the header entry size of the headers buffer.
      
       -log_headers_buffer_entry_num: log of the entries number of the headers buffer.
      
      CQEs (Completion queue entry) SHAMPO fields:
      
       -match: in case it is set, then the current packet matches the opened session.
      
       -flush: in case it is set, the opened session must be flushed.
      
       -header_size: the size of the packet’s headers.
      
       -header_entry_index: the entry index in the headers buffer of the received
        packet headers.
      
       -data_offset: the offset of the received packet data in the WQE.
      
      HW-GRO works as follow:
      ----------------------
      The feature can be enabled on the interface using the ethtool command by
      setting on rx-gro-hw. When the feature is on the mlx5 driver will reopen
      the RQ to support the SHAMPO feature:
      
      Will allocate the headers buffer and fill the parameters regarding the
      reservation and the match criteria.
      
      Receive packet flow:
      
      each RQ will hold SKB that represents the current GRO opened session.
      
      The driver has a new CQE handler mlx5e_handle_rx_cqe_mpwrq_shampo which will
      use the CQE SHAMPO params to extract the location of the packet’s headers
      in the headers buffer and the location of the packets data in the RQ.
      
      Also, the CQE has two flags flush and match that indicate if the current
      packet matches the current session or not and if we need to close the session.
      
      In case there is an opened session, and we receive a matched packet then the
      handler will merge the packet's payload to the current SKB, in case we receive
      no match then the handler will flush the SKB and create a new one for the new packet.
      
      In case the flash flag is set then the driver will close the session, the SKB
      will be passed to the network stack.
      
      In case the driver merges packets in the SKB, before passing the SKB to the network
      stack the driver will update the checksum of the packet’s headers.
      
      SKB build:
      ---------
      The driver will build a new SKB in the following situations:
      in case there is no current opened session.
      In case the current packet doesn’t match the current session.
      In case there is no place to add the packets data to the SKB that represents the
      current session.
      
      Otherwise, the driver will add the packet’s data to the SKB.
      
      When the driver builds a new SKB, the linear area will contain only the packet headers
      and the data will be added to the SKB fragments.
      
      In case the entry size of the headers buffer is sufficient to build the SKB
      it will be used, otherwise the driver will allocate new memory to build the SKB.
      
      ==================
      
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c230dc86
    • M
      net/mlx5: Lag, Make mlx5_lag_is_multipath() be static inline · 8ca9caee
      Maor Dickman 提交于
      Fix "no previous prototype" W=1 warnings when CONFIG_MLX5_CORE_EN is not set:
      
        drivers/net/ethernet/mellanox/mlx5/core/lag_mp.h:34:6: error: no previous prototype for ‘mlx5_lag_is_multipath’ [-Werror=missing-prototypes]
           34 | bool mlx5_lag_is_multipath(struct mlx5_core_dev *dev) { return false; }
              |      ^~~~~~~~~~~~~~~~~~~~~
      
      Fixes: 14fe2471 ("net/mlx5: Lag, change multipath and bonding to be mutually exclusive")
      Signed-off-by: NMaor Dickman <maord@nvidia.com>
      8ca9caee
    • K
      net/mlx5e: Prevent HW-GRO and CQE-COMPRESS features operate together · ae345299
      Khalid Manaa 提交于
      HW-GRO and CQE-COMPRESS are mutually exclusive, this commit adds this
      restriction.
      Signed-off-by: NKhalid Manaa <khalidm@nvidia.com>
      Reviewed-by: NTariq Toukan <tariqt@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      ae345299
    • K
      net/mlx5e: Add HW-GRO offload · 83439f3c
      Khalid Manaa 提交于
      This commit introduces HW-GRO offload by using the SHAMPO feature
      - Add set feature handler for HW-GRO.
      Signed-off-by: NBen Ben-Ishay <benishay@nvidia.com>
      Signed-off-by: NKhalid Manaa <khalidm@nvidia.com>
      Reviewed-by: NTariq Toukan <tariqt@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      83439f3c
    • K
      net/mlx5e: Add HW_GRO statistics · def09e7b
      Khalid Manaa 提交于
      This patch adds HW_GRO counters to RX packets statistics:
       - gro_match_packets: counter of received packets with set match flag.
      
       - gro_packets: counter of received packets over the HW_GRO feature,
                      this counter is increased by one for every received
                      HW_GRO cqe.
      
       - gro_bytes: counter of received bytes over the HW_GRO feature,
                    this counter is increased by the received bytes for every
                    received HW_GRO cqe.
      
       - gro_skbs: counter of built HW_GRO skbs,
                   increased by one when we flush HW_GRO skb
                   (when we call a napi_gro_receive with hw_gro skb).
      
       - gro_large_hds: counter of received packets with large headers size,
                        in case the packet needs new SKB, the driver will allocate
                        new one and will not use the headers entry to build it.
      Signed-off-by: NKhalid Manaa <khalidm@nvidia.com>
      Reviewed-by: NTariq Toukan <tariqt@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      def09e7b