1. 10 6月, 2021 40 次提交
    • V
      net/mlx5: Bridge, add tracepoints · 9724fd5d
      Vlad Buslov 提交于
      Move private bridge structures to dedicated headers that is accessible to
      bridge tracepoint header. Implemented following tracepoints:
      
      - Initialize FDB entry.
      - Refresh FDB entry.
      - Cleanup FDB entry.
      - Create VLAN.
      - Cleanup VLAN.
      - Attach port to bridge.
      - Detach port from bridge.
      
      Usage example:
      
      ># cd /sys/kernel/debug/tracing
      ># echo mlx5:mlx5_esw_bridge_fdb_entry_init >> set_event
      ># cat trace
      ...
         kworker/u20:1-96      [001] ....   231.892503: mlx5_esw_bridge_fdb_entry_init: net_device=enp8s0f0_0 addr=e4:fd:05:08:00:02 vid=3 flags=0 lastuse=4294895695
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      9724fd5d
    • V
      net/mlx5: Bridge, filter tagged packets that didn't match tagged fg · cc2987c4
      Vlad Buslov 提交于
      With support for pvid vlans in mlx5 bridge it is possible to have rules in
      untagged flow group when vlan filtering is enabled. However, such rules can
      also match tagged packets that didn't match anything in tagged flow group.
      Filter such packets by introducing additional flow group between tagged and
      untagged groups. When filtering is enabled on the bridge create additional
      flow in vlan filtering flow group and matches tagged packets with specified
      source MAC address and redirects them to new "skip" table. The skip table
      is new lowest-level empty table that is used to skip all further processing
      on packet in bridge priority.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      cc2987c4
    • V
      net/mlx5: Bridge, support pvid and untagged vlan configurations · 36e55079
      Vlad Buslov 提交于
      Implement support for pushing vlan header into untagged packet on ingress
      of port that has pvid configured and support for popping vlan on egress of
      port that has the matching vlan configured as untagged. To support such
      configurations packet reformat contexts of {INSERT|REMOVE}_HEADER types are
      created per such vlan and saved to struct mlx5_esw_bridge_vlan which allows
      all FDB entries on particular vlan to share single packet reformat
      instance. When initializing FDB entries with pvid or untagged vlan type set
      its mlx5_flow_act->pkt_reformat action accordingly.
      
      Flush all flows when removing vlan from port. This is necessary because
      even though software bridge removes all FDB entries before removing their
      vlan, mlx5 bridge implementation deletes their corresponding flow entries
      from hardware in asynchronous workqueue task, which will cause firmware
      error if vlan packet reformat context is deleted before all flows that
      point to it.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      36e55079
    • V
      net/mlx5: Bridge, match FDB entry vlan tag · ffc89ee5
      Vlad Buslov 提交于
      Add support for FDB vlan-tagged entries. Extend ingress and egress flow
      tables with flow groups to match packet vlan tag. Modify the flow creation
      code to include vlan tag, if vlan is configured on port and vlan
      configuration is supported for offload.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      ffc89ee5
    • V
      net/mlx5: Bridge, implement infrastructure for vlans · d75b9e80
      Vlad Buslov 提交于
      Establish all the necessary infrastructure for implementing vlan matching
      and vlan push/pop in following patches:
      
      - Add new per-vport struct mlx5_esw_bridge_port that is used to store
      metadata for all port vlans. Initialize and cleanup the instance of the
      structure when port representor is linked/unliked to bridge. Use xarray to
      allow quick vport metadata lookup by vport number.
      
      - Add new per-port-vlan struct mlx5_esw_bridge_vlan that is used to store
      vlan-specific data (vid, flags). Handle SWITCHDEV_PORT_OBJ_{ADD|DEL}
      switchdev blocking event for SWITCHDEV_OBJ_ID_PORT_VLAN object by
      creating/deleting the vlan structure and saving it in per-vport xarray for
      quick lookup.
      
      - Implement support for SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING object
      attribute that is used to toggle vlan filtering. Remove all FDB entries
      from hardware when vlan filtering state is changed.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      d75b9e80
    • V
      net/mlx5: Bridge, dynamic entry ageing · c636a0f0
      Vlad Buslov 提交于
      Dynamic FDB entries require capability to age out unused entries. Such
      entries are either aged out by kernel software bridge implementation or by
      hardware switch that offloaded them (and notified the kernel to mark them
      as SWITCHDEV_FDB_ADD_TO_BRIDGE). Leaving ageing to kernel bridge would
      result it deleting offloaded dynamic FDB entries every ageing_time period
      due to packets being processed by hardware and, consecutively, 'used'
      timestamp for FDB entry not being updated. However, since hardware doesn't
      support ageing, software solution inside the driver is required.
      
      In order to emulate hardware ageing in driver, extend bridge FDB ingress
      flows with counter and create delayed br_offloads->update_work task on
      bridge offloads workqueue. Run the task every second, update 'used'
      timestamp in software bridge dynamic entry by sending
      SWITCHDEV_FDB_ADD_TO_BRIDGE for the entry, if it flow hardware counter
      lastuse field was changed since last update. If lastuse wasn't changed for
      ageing_time period, then delete the FDB entry and notify kernel bridge by
      sending SWITCHDEV_FDB_DEL_TO_BRIDGE notification.
      
      Register blocking switchdev notifier callback and handle attribute set
      SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME event to allow user to dynamically
      configure bridge FDB entry ageing timeout. Save the value per-bridge in
      struct mlx5_esw_bridge. Silently ignore
      SWITCHDEV_ATTR_ID_PORT_{PRE_}BRIDGE_FLAGS switchdev event since mlx5 bridge
      implementation relies on software bridge for implementing necessary
      behavior for all of these flags.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      c636a0f0
    • V
      net/mlx5: Bridge, handle FDB events · 7cd6a54a
      Vlad Buslov 提交于
      Hardware supported by mlx5 driver doesn't provide learning and requires the
      driver to emulate all switch-like behavior in software. As such, all
      packets by default go through miss path, appear on representor and get to
      software bridge, if it is the upper device of the representor. This causes
      bridge to process packet in software, learn the MAC address to FDB and send
      SWITCHDEV_FDB_ADD_TO_DEVICE event to all subscribers.
      
      In order to offload FDB entries in mlx5, register switchdev notifier
      callback and implement support for both 'added_by_user' and dynamic FDB
      entry SWITCHDEV_FDB_ADD_TO_DEVICE events asynchronously using new
      mlx5_esw_bridge_offloads->wq ordered workqueue. In workqueue callback
      offload the ingress rule (matching FDB entry MAC as packet source MAC) and
      egress table rule (matching FDB entry MAC as destination MAC). For ingress
      table rule also match source vport to ensure that only traffic coming from
      expected bridge port is matched by offloaded rule. Save all the relevant
      FDB entry data in struct mlx5_esw_bridge_fdb_entry instance and insert the
      instance in new mlx5_esw_bridge->fdb_list list (for traversing all entries
      by software ageing implementation in following patch) and in new
      mlx5_esw_bridge->fdb_ht hash table for fast retrieval. Notify the bridge
      that FDB entry has been offloaded by sending SWITCHDEV_FDB_OFFLOADED
      notification.
      
      Delete FDB entry on reception of SWITCHDEV_FDB_DEL_TO_DEVICE event.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      7cd6a54a
    • V
      net/mlx5: Bridge, add offload infrastructure · 19e9bfa0
      Vlad Buslov 提交于
      Create new files bridge.{c|h} in en/rep directory that implement bridge
      interaction with representor netdevices and handle required
      events/notifications, bridge.{c|h} in esw directory that implement all
      necessary eswitch offloading infrastructure and works on vport/eswitch
      level. Provide new kconfig MLX5_BRIDGE which is automatically selected when
      both kernel bridge and mlx5 eswitch configs are enabled.
      
      Provide basic infrastructure for bridge offloads:
      
      - struct mlx5_esw_bridge_offloads - per-eswitch bridge offload structure
      that encapsulates generic bridge-offloads data (notifier blocks, ingress
      flow table/group, etc.) that is created/deleted on enable/disable eswitch
      offloads.
      
      - struct mlx5_esw_bridge - per-bridge structure that encapsulates
      per-bridge data (reference counter, FDB, egress flow table/group, etc.)
      that is created when first eswitch represetor is attached to new bridge and
      deleted when last representor is removed from the bridge as a result of
      NETDEV_CHANGEUPPER event.
      
      The bridge tables are created with new priority FDB_BR_OFFLOAD in FDB
      namespace. The new priority is between tc-miss and slow path priorities.
      Priority consist of two levels: the ingress table that is global per
      eswitch and matches incoming packets by src_mac/vid and redirects them to
      next level (egress table) that is chosen according to ingress port bridge
      membership and matches on dst_mac/vid in order to redirect packet to vport
      according to the following diagram:
      
                      +
                      |
            +---------v----------+
            |                    |
            |   FDB_TC_OFFLOAD   |
            |                    |
            +---------+----------+
                      |
                      |
            +---------v----------+
            |                    |
            |   FDB_FT_OFFLOAD   |
            |                    |
            +---------+----------+
                      |
                      |
            +---------v----------+
            |                    |
            |    FDB_TC_MISS     |
            |                    |
            +---------+----------+
                      |
      +--------------------------------------+
      |               |                      |
      |        +------+                      |
      |        |                             |
      | +------v--------+   FDB_BR_OFFLOAD   |
      | | INGRESS_TABLE |                    |
      | +------+---+----+                    |
      |        |   |      match              |
      |        |   +---------+               |
      |        |             |               |    +-------+
      |        |     +-------v-------+ match |    |       |
      |        |     | EGRESS_TABLE  +------------> vport |
      |        |     +-------+-------+       |    |       |
      |        |             |               |    +-------+
      |        |    miss     |               |
      |        +------+------+               |
      |               |                      |
      +--------------------------------------+
                      |
                      |
            +---------v----------+
            |                    |
            |   FDB_SLOW_PATH    |
            |                    |
            +---------+----------+
                      |
                      v
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      19e9bfa0
    • V
      net/mlx5e: Refactor mlx5e_eswitch_{*}rep() helpers · 07810152
      Vlad Buslov 提交于
      Change the helper to functions to accept constant pointer to struct
      net_device. This is necessary for following patches in series that pass
      mlx5e_eswitch_rep() as a callback to kernel bridge infrastructure code.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      07810152
    • V
      net/mlx5: Create TC-miss priority and table · ec3be887
      Vlad Buslov 提交于
      In order to adhere to kernel software datapath model bridge offloads must
      come after TC and NF FDBs. Following patches in this series add new FDB
      priority for bridge after FDB_FT_OFFLOAD. However, since netfilter offload
      is implemented with unmanaged tables, its miss path is not automatically
      connected to next priority and requires the code to manually connect with
      slow table. To keep bridge offloads encapsulated and not mix it with
      eswitch offloads, create a new FDB_TC_MISS priority between FDB_FT_OFFLOAD
      and FDB_SLOW_PATH:
      
                +
                |
      +---------v----------+
      |                    |
      |   FDB_TC_OFFLOAD   |
      |                    |
      +---------+----------+
                |
                |
                |
      +---------v----------+
      |                    |
      |   FDB_FT_OFFLOAD   |
      |                    |
      +---------+----------+
                |
                |
                |
      +---------v----------+
      |                    |
      |    FDB_TC_MISS     |
      |                    |
      +---------+----------+
                |
                |
                |
      +---------v----------+
      |                    |
      |   FDB_SLOW_PATH    |
      |                    |
      +---------+----------+
                |
                v
      
      Initialize the new priority with single default empty managed table and use
      the table as TC/NF miss patch instead of slow table. This approach allows
      bridge offloads to be created as new FDB namespace priority between
      FDB_TC_MISS and FDB_SLOW_PATH without exposing its internal tables to any
      other modules since miss path of managed TC-miss table is automatically
      wired to next priority.
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      ec3be887
    • Y
      net/mlx5: DR, Support EMD tag in modify header for STEv1 · ded6a877
      Yevgeny Kliteynik 提交于
      Add support for EMD tag in modify header set/copy actions
      on device that supports STEv1.
      Signed-off-by: NYevgeny Kliteynik <kliteyn@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      ded6a877
    • Y
      net/mlx5: DR, Added support for INSERT_HEADER reformat type · 7ea9b398
      Yevgeny Kliteynik 提交于
      Add support for INSERT_HEADER packet reformat context type
      Signed-off-by: NYevgeny Kliteynik <kliteyn@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      7ea9b398
    • Y
      net/mlx5: Added new parameters to reformat context · 3f3f05ab
      Yevgeny Kliteynik 提交于
      Adding new reformat context type (INSERT_HEADER) requires adding two new
      parameters to reformat context - reformat_param_0 and reformat_param_1.
      As defined by HW spec, these parameters have different meaning for
      different reformat context type.
      
      The first parameter (reformat_param_0) is not new to HW spec, but it
      wasn't used by any of the supported reformats. The second parameter
      (reformat_param_1) is new to the HW spec - it was added to allow
      supporting INSERT_HEADER.
      
      For NSERT_HEADER, reformat_param_0 indicates the header used to
      reference the location of the inserted header, and reformat_param_1
      indicates the offset of the inserted header from the reference point
      defined by reformat_param_0.
      Signed-off-by: NYevgeny Kliteynik <kliteyn@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      3f3f05ab
    • Y
      net/mlx5: DR, Allow encap action for RX for supporting devices · d7418b4e
      Yevgeny Kliteynik 提交于
      Encap actions on RX flow were not supported on older devices.
      However, this is no longer the case in devices that support STEv1.
      This patch adds support for encap l3/l2 on RX flow for supported
      devices: update actions state machine by adding the newely supported
      transitions and add the required support in STEv0/1 files.
      The new transitions that are supported are:
       - from decap/modify-header/pop-vlan to encap
       - from encap to termination table
      Signed-off-by: NErez Shitrit <erezsh@nvidia.com>
      Signed-off-by: NYevgeny Kliteynik <kliteyn@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      d7418b4e
    • Y
      net/mlx5: DR, Split reformat state to Encap and Decap · 28de41a4
      Yevgeny Kliteynik 提交于
      Split single reformat state into two separate states for encap and decap.
      This will allow adding actions to the specific domain, such as encap on RX.
      Signed-off-by: NErez Shitrit <erezsh@nvidia.com>
      Signed-off-by: NYevgeny Kliteynik <kliteyn@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      28de41a4
    • Y
      net/mlx5: mlx5_ifc support for header insert/remove · 67133eaa
      Yevgeny Kliteynik 提交于
      Add support for HCA caps 2 that contains capabilities for the new
      insert/remove header actions.
      
      Added the required definitions for supporting the new reformat type:
      added packet reformat parameters, reformat anchors and definitions
      to allow copy/set into the inserted EMD (Embedded MetaData) tag.
      Signed-off-by: NYevgeny Kliteynik <kliteyn@nvidia.com>
      Signed-off-by: NVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: NJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: NSaeed Mahameed <saeedm@nvidia.com>
      67133eaa
    • D
      Merge branch 'ipa-mem-1' · 0d155170
      David S. Miller 提交于
      Alex Elder says:
      
      ====================
      net: ipa: memory region rework, part 1
      
      This is the first portion of a very long series of patches that has
      been split in two.  Once these patches are accepted, I'll post the
      remaining patches.
      
      The combined series reworks the way memory regions are defined in
      the configuration data, and in the process solidifies code that
      ensures configurations are valid.
      
      In this portion (part 1), most of the focus is on improving
      validation of code.  This validation is now done unconditionally
      (something I promised Leon Romanovsky I would work on).  Validation
      will occur earlier than before, catching configuration problems as
      early as possible and permitting the rest of the driver to avoid
      needing to do some error checking.  There will now be checks to
      ensure all defined regions are supported by the hardware, that
      required regions are all defined, and that there are no duplicate
      regions.
      
      The second portion (part 2) is mainly a set of small but pervasive
      changes whose result is to have the memory region array not be
      indexed by region ID.  I'll provide further explanation when I post
      that series.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0d155170
    • A
      net: ipa: use bitmap to check for missing regions · 6857b023
      Alex Elder 提交于
      In ipa_mem_valid(), wait until regions have been marked in the memory
      region bitmap, and check all that are not found there to ensure they
      are not required.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6857b023
    • A
      net: ipa: flag duplicate memory regions · eadf7f93
      Alex Elder 提交于
      Add a test in ipa_mem_valid() to ensure no memory region is defined
      more than once, using a bitmap to record each defined memory region.
      Skip over undefined regions when checking (we can have any number of
      those).
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      eadf7f93
    • A
      net: ipa: validate memory regions based on version · 75bcfde6
      Alex Elder 提交于
      Introduce ipa_mem_id_valid(), and use it to check defined memory
      regions to ensure they are valid for a given version of IPA.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      75bcfde6
    • A
      net: ipa: introduce ipa_mem_id_optional() · d39ffb97
      Alex Elder 提交于
      Introduce a new function that indicates whether a given memory
      region is required for a given version of IPA hardware.  Use it to
      verify that all required regions are present during initialization.
      
      Reorder the definitions of the memory region IDs to be based on
      the version in which they're first defined.  Use "+" rather than
      "and above" where defining the IPA versions in which memory IDs are
      used, and indicate which regions are optional (many are not).
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d39ffb97
    • A
      net: ipa: pass memory configuration data to ipa_mem_valid() · 1eec7677
      Alex Elder 提交于
      Pass the memory configuration data array to ipa_mem_valid() for
      validation, and use that rather than assuming it's already been
      recorded in the IPA structure.  Move the memory data array size
      check into ipa_mem_valid().
      
      Call ipa_mem_valid() early in ipa_mem_init(), and only proceed with
      assigning the memory array pointer and size if it is found to be
      valid.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1eec7677
    • A
      net: ipa: validate memory regions at init time · 2f9be1e9
      Alex Elder 提交于
      Move the memory region validation check so it happens earlier when
      initializing the driver, at init time rather than config time (i.e.,
      before access to hardware is required).
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2f9be1e9
    • A
      net: ipa: separate region range check from other validation · 5e57c6c5
      Alex Elder 提交于
      The only thing done by ipa_mem_valid_one() that requires hardware
      access is the check for whether all regions fit within the size of
      IPA local memory specified by an IPA register.
      
      Introduce ipa_mem_size_valid() to implement this verification and
      stop doing so in ipa_mem_valid_one().  Call the new function from
      ipa_mem_config() (which is also the caller of ipa_mem_valid()).
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5e57c6c5
    • A
      net: ipa: separate memory validation from initialization · 98334d2a
      Alex Elder 提交于
      Currently, memory regions are validated in the loop that initializes
      them.  Instead, validate them separately.
      
      Rename ipa_mem_valid() to be ipa_mem_valid_one().  Define a *new*
      function named ipa_mem_valid() that performs validation of the array
      of memory regions provided.  This function calls ipa_mem_valid_one()
      for each region in turn.
      
      Skip validation for any "empty" region descriptors, which have zero
      size and are not preceded by any canary values.  Issue a warning for
      such descriptors if the offset is non-zero.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      98334d2a
    • A
      net: ipa: validate memory regions unconditionally · 0300df2d
      Alex Elder 提交于
      Do memory region descriptor validation unconditionally, rather than
      having it depend on IPA_VALIDATION being defined.
      
      Pass the address of a memory region descriptor rather than a memory
      ID to ipa_mem_valid().
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0300df2d
    • A
      net: ipa: store memory region id in descriptor · 14ab6a20
      Alex Elder 提交于
      Store the memory region ID in the memory descriptor structure.  This
      is a move toward *not* indexing the array by the ID, but for now we
      must still specify those index values.  Define an explicitly
      undefined region ID, value 0, so uninitialized entries in the array
      won't use an otherwise valid ID.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      14ab6a20
    • A
      net: ipa: define IPA_MEM_END_MARKER · f636a836
      Alex Elder 提交于
      Define a new pseudo memory region identifer that specifies the
      offset at the end of IPA resident memory.  Use it instead of
      IPA_MEM_UC_EVENT_RING in places where the size of that region was
      defined to be 0.
      
      The size of the IPA_MEM_END_MARKER pseudo region must be zero.
      Signed-off-by: NAlex Elder <elder@linaro.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f636a836
    • C
      net: dsa: sja1105: Fix assigned yet unused return code rc · ab324d8d
      Colin Ian King 提交于
      The return code variable rc is being set to return error values in two
      places in sja1105_mdiobus_base_tx_register and yet it is not being
      returned, the function always returns 0 instead. Fix this by replacing
      the return 0 with the return code rc.
      
      Addresses-Coverity: ("Unused value")
      Fixes: 5a8f0974 ("net: dsa: sja1105: register the MDIO buses for 100base-T1 and 100base-TX")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Reviewed-by: NVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ab324d8d
    • M
      stmmac: prefetch right address · 4744bf07
      Matteo Croce 提交于
      To support XDP, a headroom is prepended to the packet data.
      Consider this offset when doing a prefetch.
      
      Fixes: da5ec7f2 ("net: stmmac: refactor stmmac_init_rx_buffers for stmmac_reinit_rx_buffers")
      Signed-off-by: NMatteo Croce <mcroce@microsoft.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4744bf07
    • C
      mlxsw: thermal: Fix null dereference of NULL temperature parameter · f3b5a890
      Colin Ian King 提交于
      The call to mlxsw_thermal_module_temp_and_thresholds_get passes a NULL
      pointer for the temperature and this can be dereferenced in this function
      if the mlxsw_reg_query call fails.  The simplist fix is to pass the
      address of dummy temperature variable instead of a NULL pointer.
      
      Addresses-Coverity: ("Explicit null dereferenced")
      Fixes: 72a64c2f ("mlxsw: thermal: Read module temperature thresholds using MTMP register")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Reviewed-by: NIdo Schimmel <idosch@nvidia.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f3b5a890
    • K
      net: ethernet: rmnet: Always subtract MAP header · 8b8701d0
      Kristian Evensen 提交于
      Commit e1d9a90a ("net: ethernet: rmnet: Support for ingress MAPv5
      checksum offload") broke ingress handling for devices where
      RMNET_FLAGS_INGRESS_MAP_CKSUMV5 or RMNET_FLAGS_INGRESS_MAP_CKSUMV4 are
      not set. Unless either of these flags are set, the MAP header is not
      removed. This commit restores the original logic by ensuring that the
      MAP header is removed for all MAP packets.
      
      Fixes: e1d9a90a ("net: ethernet: rmnet: Support for ingress MAPv5 checksum offload")
      Signed-off-by: NKristian Evensen <kristian.evensen@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8b8701d0
    • W
      net: ena: make symbol 'ena_alloc_map_page' static · 6fb566c9
      Wei Yongjun 提交于
      The sparse tool complains as follows:
      
      drivers/net/ethernet/amazon/ena/ena_netdev.c:978:13: warning:
       symbol 'ena_alloc_map_page' was not declared. Should it be static?
      
      This symbol is not used outside of ena_netdev.c, so marks it static.
      
      Fixes: 947c54c3 ("net: ena: Use dev_alloc() in RX buffer allocation")
      Reported-by: NHulk Robot <hulkci@huawei.com>
      Signed-off-by: NWei Yongjun <weiyongjun1@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6fb566c9
    • C
      net: phy: realtek: net: Fix less than zero comparison of a u16 · f25247d8
      Colin Ian King 提交于
      The comparisons of the u16 values priv->phycr1 and priv->phycr2 to less
      than zero always false because they are unsigned. Fix this by using an
      int for the assignment and less than zero check.
      
      Addresses-Coverity: ("Unsigned compared against 0")
      Fixes: 0a4355c2 ("net: phy: realtek: add dt property to disable CLKOUT clock")
      Fixes: d90db36a ("net: phy: realtek: add dt property to enable ALDPS mode")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f25247d8
    • C
      net: stmmac: Fix missing { } around two statements in an if statement · 345502af
      Colin Ian King 提交于
      There are missing { } around a block of code on an if statement. Fix this
      by adding them in.
      
      Addresses-Coverity: ("Nesting level does not match indentation")
      Fixes: 46682cb8 ("net: stmmac: enable Intel mGbE 2.5Gbps link speed")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      345502af
    • Y
      net: ethernet: ti: cpsw-phy-sel: Use devm_platform_ioremap_resource_byname() · ba539319
      Yang Yingliang 提交于
      Use the devm_platform_ioremap_resource_byname() helper instead of
      calling platform_get_resource_byname() and devm_ioremap_resource()
      separately.
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ba539319
    • D
      Merge branch 'mvpp2-prefetch' · 0f00658d
      David S. Miller 提交于
      Matteo Croce says:
      
      ====================
      mvpp2: prefetch data early
      
      These two patches prefetch some data from RAM so to reduce stall
      and speedup the packet processing.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0f00658d
    • M
      mvpp2: prefetch page · 2f128eb3
      Matteo Croce 提交于
      Most of the time during the RX is caused by the compound_head() call
      done at the end of the RX loop:
      
             │     build_skb():
             [...]
             │     static inline struct page *compound_head(struct page *page)
             │     {
             │     unsigned long head = READ_ONCE(page->compound_head);
       65.23 │       ldr  x2, [x1, #8]
      
      Prefetch the page struct as soon as possible, to speedup the RX path
      noticeabily by a ~3-4% packet rate in a drop test.
      
             │     build_skb():
             [...]
             │     static inline struct page *compound_head(struct page *page)
             │     {
             │     unsigned long head = READ_ONCE(page->compound_head);
       17.92 │       ldr  x2, [x1, #8]
      Signed-off-by: NMatteo Croce <mcroce@microsoft.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2f128eb3
    • M
      mvpp2: prefetch right address · d8ea89fe
      Matteo Croce 提交于
      In the RX buffer, the received data starts after a headroom used to
      align the IP header and to allow prepending headers efficiently.
      The prefetch() should take this into account, and prefetch from
      the very start of the received data.
      
      We can see that ether_addr_equal_64bits(), which is the first function
      to access the data, drops from the top of the perf top output.
      
      prefetch(data):
      
      Overhead  Shared Object     Symbol
        11.64%  [kernel]          [k] eth_type_trans
      
      prefetch(data + MVPP2_MH_SIZE + MVPP2_SKB_HEADROOM):
      
      Overhead  Shared Object     Symbol
        13.42%  [kernel]          [k] build_skb
        10.35%  [mvpp2]           [k] mvpp2_rx
         9.35%  [kernel]          [k] __netif_receive_skb_core
         8.24%  [kernel]          [k] kmem_cache_free
         7.97%  [kernel]          [k] dev_gro_receive
         7.68%  [kernel]          [k] page_pool_put_page
         7.32%  [kernel]          [k] kmem_cache_alloc
         7.09%  [mvpp2]           [k] mvpp2_bm_pool_put
         3.36%  [kernel]          [k] eth_type_trans
      
      Also, move the eth_type_trans() call a bit down, to give the RAM more
      time to prefetch the data.
      Signed-off-by: NMatteo Croce <mcroce@microsoft.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d8ea89fe
    • Y
      net: ethernet: ti: am65-cpts: Use devm_platform_ioremap_resource_byname() · e77e2cf4
      Yang Yingliang 提交于
      Use the devm_platform_ioremap_resource_byname() helper instead of
      calling platform_get_resource_byname() and devm_ioremap_resource()
      separately.
      Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e77e2cf4