1. 13 Aug, 2021 1 commit
    • Emmanuel Grumbach's avatar
      nl80211: vendor-cmd: add Intel vendor commands for iwlmei usage · 3d2a2544
      Emmanuel Grumbach authored
      iwlmei allows to integrate with the CSME firmware. There are
      flows that are prioprietary for this purpose:
      
      * Get the information of the AP the CSME firmware is connected
        to. This is useful when we need to speed up the connection
        process in case the CSME firmware has a TCP connection
        that must be kept alive across the ownership transition.
      * Forbid roaming, which will happen when the CSME firmware
        wants to tell the user space not disrupt the connection.
      * Request ownership, upon driver boot when the CSME firmware
        owns the device. This is a notification sent by the kernel.
      
      All those commands are expected to be used by any software
      managing the connection (mainly NetworkManager). Those commands
      are expected to be used only in case the CSME firmware owns
      the device and doesn't want to release the device unless the
      host made sure that it can keep the connectivity.
      
      Here are the steps of the expected flow:
      
      1) The machine boots while AMT has an active TCP connection
      2) iwlwifi starts and tries to access the device
      3) The device is not available because of the active TCP
         connection. (If there are no active connections, the CSME
         firmware would have allowed iwlwifi to use the device)
      
      Note that all the steps up to here don't involve iwlmei. All
      this happens in iwlwifi (in iwl_pcie_prepare_card_hw).
      
      4) iwlmei establishes a connection to the CSME firmware (through
         SAP)
      
      Here iwlwifi uses iwlmei to access the device's capabilities
      (since it can't touch the device), but this is not relevant
      for the vendor commands.
      
      5) The CSME firmware tells iwlmei that it uses the NIC and
         that there is an acitve TCP connection, and hence, the
         host needs to think twice before asking the CSME firmware
         to release the device
      6) iwlmei tells iwlwifi to report HW RFKILL with a special
         reason
      
      Up to here, there was no user space involved.
      
      7) The user space (NetworkManager) boots and sees that the
         device is in RFKILL because the host doesn't own the
         device
      8) The user space asks the kernel what AP the CSME firmware
         is connected to (with the first vendor command mentionned
         above)
      9) The user space checks if it has a profile that matches the
         reply from the CSME firmware
      10) The user space installs a network to the wpa_supplicant
          with a specific BSSID and a specific frequency
      11) The user space prevents any type of full scan
      12) The user space asks iwlmei to request ownership on the
          device (with the third vendor command)
      13) iwlmei request ownership from the CSME firmware
      14) The CSME firmware grants ownership
      15) iwlmei tells iwlwifi to lift the RFKILL
      16) RFKILL OFF is reported to userspace
      17) The host boots the device, loads the firwmare, and
          connect to a specific BSSID without scanning including IP
          in less than 600ms (this is what I measured, of course
          it depends on many factors)
      18) The host reports to the CSME firmware that there is a
          connection
      19) The TCP connection is preserved and the host has now
          connectivity
      
      20) Later, the TCP connection to the CSME firmware is
          terminated
      21) The CSME firmware tells iwlmei that it is now free to
          do whatever it likes
      22) iwlwifi sends the second vendor command to tell the
          user space that it can remove the special network
          configuration and pick any SSID / BSSID it likes.
      Co-Developed-by: default avatarAyala Beker <ayala.beker@intel.com>
      Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Link: https://lore.kernel.org/r/20210625081717.7680-4-emmanuel.grumbach@intel.comSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      3d2a2544
  2. 12 Aug, 2021 13 commits
    • Alex Elder's avatar
      dt-bindings: net: qcom,ipa: make imem interconnect optional · b769cf44
      Alex Elder authored
      On some newer SoCs, the interconnect between IPA and SoC internal
      memory (imem) is not used.  Update the binding to indicate that
      having just the memory and config interconnects is another allowed
      configuration.
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20210811141802.2635424-1-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      b769cf44
    • Alex Elder's avatar
      net: ipa: always inline ipa_aggr_granularity_val() · 676eec8e
      Alex Elder authored
      It isn't required, but all callers of ipa_aggr_granularity_val()
      pass a constant value (IPA_AGGR_GRANULARITY) as the usec argument.
      Two of those callers are in ipa_validate_build(), with the result
      being passed to BUILD_BUG_ON().
      
      Evidently the "sparc64-linux-gcc" compiler (at least) doesn't always
      inline ipa_aggr_granularity_val(), so the result of the function is
      not constant at compile time, and that leads to build errors.
      
      Define the function with the __always_inline attribute to avoid the
      errors.  We can see by inspection that the value passed is never
      zero, so we can just remove its WARN_ON() call.
      
      Fixes: 5bc55884 ("net: ipa: use WARN_ON() rather than assertions")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Link: https://lore.kernel.org/r/20210811135948.2634264-1-elder@linaro.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      676eec8e
    • David S. Miller's avatar
      Merge tag 'mlx5-updates-2021-08-11' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux · bed5a942
      David S. Miller authored
      Saeed Mahameed says:
      
      ====================
      mlx5 updates 2021-08-11
      
      This series provides misc updates to mlx5.
      For more information please see tag log below.
      
      Please pull and let me know if there is any problem.
      
      mlx5-updates-2021-08-11
      
      Misc. cleanup for mlx5.
      
      1) Typos and use of netdev_warn()
      2) smatch cleanup
      3) Minor fix to inner TTC table creation
      4) Dynamic capability cache allocation
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bed5a942
    • David S. Miller's avatar
      Merge branch 'dsa-cross-chip-notifiers' · dea80774
      David S. Miller authored
      Vladimir Oltean says:
      
      ====================
      Improvements to the DSA tag_8021q cross-chip notifiers
      
      This series improves cross-chip notifier error messages and addresses a
      benign error message seen during reboot on a system with disjoint DSA
      trees.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dea80774
    • Vladimir Oltean's avatar
      net: dsa: tag_8021q: don't broadcast during setup/teardown · 724395f4
      Vladimir Oltean authored
      Currently, on my board with multiple sja1105 switches in disjoint trees
      described in commit f66a6a69 ("net: dsa: permit cross-chip bridging
      between all trees in the system"), rebooting the board triggers the
      following benign warnings:
      
      [   12.345566] sja1105 spi2.0: port 0 failed to notify tag_8021q VLAN 1088 deletion: -ENOENT
      [   12.353804] sja1105 spi2.0: port 0 failed to notify tag_8021q VLAN 2112 deletion: -ENOENT
      [   12.362019] sja1105 spi2.0: port 1 failed to notify tag_8021q VLAN 1089 deletion: -ENOENT
      [   12.370246] sja1105 spi2.0: port 1 failed to notify tag_8021q VLAN 2113 deletion: -ENOENT
      [   12.378466] sja1105 spi2.0: port 2 failed to notify tag_8021q VLAN 1090 deletion: -ENOENT
      [   12.386683] sja1105 spi2.0: port 2 failed to notify tag_8021q VLAN 2114 deletion: -ENOENT
      
      Basically switch 1 calls dsa_tag_8021q_unregister, and switch 1's TX and
      RX VLANs cannot be found on switch 2's CPU port.
      
      But why would switch 2 even attempt to delete switch 1's TX and RX
      tag_8021q VLANs from its CPU port? Well, because we use dsa_broadcast,
      and it is supposed that it had added those VLANs in the first place
      (because in dsa_port_tag_8021q_vlan_match, all CPU ports match
      regardless of their tree index or switch index).
      
      The two trees probe asynchronously, and when switch 1 probed, it called
      dsa_broadcast which did not notify the tree of switch 2, because that
      didn't probe yet. But during unbind, switch 2's tree _is_ probed, so it
      _is_ notified of the deletion.
      
      Before jumping to introduce a synchronization mechanism between the
      probing across disjoint switch trees, let's take a step back and see
      whether we _need_ to do that in the first place.
      
      The RX and TX VLANs of switch 1 would be needed on switch 2's CPU port
      only if switch 1 and 2 were part of a cross-chip bridge. And
      dsa_tag_8021q_bridge_join takes care precisely of that (but if probing
      was synchronous, the bridge_join would just end up bumping the VLANs'
      refcount, because they are already installed by the setup path).
      
      Since by the time the ports are bridged, all DSA trees are already set
      up, and we don't need the tag_8021q VLANs of one switch installed on the
      other switches during probe time, the answer is that we don't need to
      fix the synchronization issue.
      
      So make the setup and teardown code paths call dsa_port_notify, which
      notifies only the local tree, and the bridge code paths call
      dsa_broadcast, which let the other trees know as well.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      724395f4
    • Vladimir Oltean's avatar
      net: dsa: print more information when a cross-chip notifier fails · ab97462b
      Vladimir Oltean authored
      Currently this error message does not say a lot:
      
      [   32.693498] DSA: failed to notify tag_8021q VLAN deletion: -ENOENT
      [   32.699725] DSA: failed to notify tag_8021q VLAN deletion: -ENOENT
      [   32.705931] DSA: failed to notify tag_8021q VLAN deletion: -ENOENT
      [   32.712139] DSA: failed to notify tag_8021q VLAN deletion: -ENOENT
      [   32.718347] DSA: failed to notify tag_8021q VLAN deletion: -ENOENT
      [   32.724554] DSA: failed to notify tag_8021q VLAN deletion: -ENOENT
      
      but in this form, it is immediately obvious (at least to me) what the
      problem is, even without further looking at the code:
      
      [   12.345566] sja1105 spi2.0: port 0 failed to notify tag_8021q VLAN 1088 deletion: -ENOENT
      [   12.353804] sja1105 spi2.0: port 0 failed to notify tag_8021q VLAN 2112 deletion: -ENOENT
      [   12.362019] sja1105 spi2.0: port 1 failed to notify tag_8021q VLAN 1089 deletion: -ENOENT
      [   12.370246] sja1105 spi2.0: port 1 failed to notify tag_8021q VLAN 2113 deletion: -ENOENT
      [   12.378466] sja1105 spi2.0: port 2 failed to notify tag_8021q VLAN 1090 deletion: -ENOENT
      [   12.386683] sja1105 spi2.0: port 2 failed to notify tag_8021q VLAN 2114 deletion: -ENOENT
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ab97462b
    • Andy Shevchenko's avatar
      wwan: core: Unshadow error code returned by ida_alloc_range() · 0de6fd5f
      Andy Shevchenko authored
      ida_alloc_range() may return other than -ENOMEM error code.
      Unshadow it in the wwan_create_port().
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Reviewed-by: default avatarSergey Ryazanov <ryazanov.s.a@gmail.com>
      Reviewed-by: default avatarLoic Poulain <loic.poulain@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0de6fd5f
    • DENG Qingfang's avatar
      net: dsa: mt7530: fix VLAN traffic leaks again · 7428022b
      DENG Qingfang authored
      When a port leaves a VLAN-aware bridge, the current code does not clear
      other ports' matrix field bit. If the bridge is later set to VLAN-unaware
      mode, traffic in the bridge may leak to that port.
      
      Remove the VLAN filtering check in mt7530_port_bridge_leave.
      
      Fixes: 474a2dda ("net: dsa: mt7530: fix VLAN traffic leaks")
      Fixes: 83163f7d ("net: dsa: mediatek: add VLAN support for MT7530")
      Signed-off-by: default avatarDENG Qingfang <dqfext@gmail.com>
      Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7428022b
    • Oleksij Rempel's avatar
      net: phy: nxp-tja11xx: log critical health state · e0ba6050
      Oleksij Rempel authored
      TJA1102 provides interrupt notification for the critical health states
      like overtemperature and undervoltage.
      
      The overtemperature bit is set if package temperature is beyond 155C°.
      This functionality was tested by heating the package up to 200C°
      
      The undervoltage bit is set if supply voltage drops beyond some critical
      threshold. Currently not tested.
      
      In a typical use case, both of this events should be logged and stored
      (or send to some remote system) for further investigations.
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e0ba6050
    • David S. Miller's avatar
      Merge branch 'pktgen-imix' · 445af0d2
      David S. Miller authored
      Nick Richardson says:
      
      ====================
      pktgen: Add IMIX mode
      
      Adds internet mix (IMIX) mode to pktgen. Internet mix is
      included in many user-space network perf testing tools. It allows
      for the user to specify a distribution of discrete packet sizes to be
      generated. This type of test is common among vendors when perf testing
      their devices.
      [RFC link: https://datatracker.ietf.org/doc/html/rfc2544#section-9.1]
      
      This allows users to get a
      more complete picture of how their device will perform in the
      real-world.
      
      This feature adds a command that allows users to specify an imix
      distribution in the following format:
        imix_weights size_1,weight_1 size_2,weight_2 ... size_n,weight_n
      
      The distribution of packets with size_i will be
      (weight_i / total_weights) where
      total_weights = weight_1 + weight_2 + ... + weight_n
      
      For example:
        imix_weights 40,7 576,4 1500,1
      
      The pkt_size "40" will account for 7 / (7 + 4 + 1) = ~58% of the total
      packets sent.
      
      This patch was tested with the following:
      1. imix_weights = 40,7 576,4 1500,1
      2. imix_weights = 0,7 576,4 1500,1
        - Packet size of 0 is resized to the minimum, 42
      3. imix_weights = 40,7 576,4 1500,1 count = 0
        - Zero count.
        - Runs until user stops pktgen.
      Invalid Configurations
      1. clone_skb = 200 imix_weights = 40,7 576,4 1500,1
          - Returns error code -524 (-ENOTSUPP) when setting imix_weights
      2. len(imix_weights) > MAX_IMIX_ENTRIES
          - Returns -7 (-E2BIG)
      
      This patch is split into three parts, each provide different aspects of
      required functionality:
        1. Parse internet mix input.
        2. Add IMIX Distribution representation.
        3. Process and output IMIX results.
      
      Changes in v2:
      * Remove __ prefix outside of uAPI.
      * Use seq_puts instead of seq_printf where necessary.
      * Reorder variable declaration.
      * Return -EINVAL instead of -ENOTSUPP when using IMIX with clone_skb > 0
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      445af0d2
    • Nick Richardson's avatar
      pktgen: Add output for imix results · 769afb3f
      Nick Richardson authored
      The bps for imix mode is calculated by:
      sum(imix_entry.size) / time_elapsed
      
      The actual counts of each imix_entry are displayed under the
      "Current:" section of the interface output in the following format:
      imix_size_counts: size_1,count_1 size_2,count_2 ... size_n,count_n
      
      Example (count = 200000):
      imix_weights: 256,1 859,3 205,2
      imix_size_counts: 256,32082 859,99796 205,68122
      Result: OK: 17992362(c17964678+d27684) usec, 200000 (859byte,0frags)
        11115pps 47Mb/sec (47977140bps) errors: 0
      
      Summary of changes:
      Calculate bps based on imix counters when in IMIX mode.
      Add output for IMIX counters.
      Signed-off-by: default avatarNick Richardson <richardsonnick@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      769afb3f
    • Nick Richardson's avatar
      pktgen: Add imix distribution bins · 90149031
      Nick Richardson authored
      In order to represent the distribution of imix packet sizes, a
      pre-computed data structure is used. It features 100 (IMIX_PRECISION)
      "bins". Contiguous ranges of these bins represent the respective
      packet size of each imix entry. This is done to avoid the overhead of
      selecting the correct imix packet size based on the corresponding weights.
      
      Example:
      imix_weights 40,7 576,4 1500,1
      total_weight = 7 + 4 + 1 = 12
      
      pkt_size 40 occurs 7/total_weight = 58% of the time
      pkt_size 576 occurs 4/total_weight = 33% of the time
      pkt_size 1500 occurs 1/total_weight = 9% of the time
      
      We generate a random number between 0-100 and select the corresponding
      packet size based on the specified weights.
      Eg. random number = 358723895 % 100 = 65
      Selects the packet size corresponding to index:65 in the pre-computed
      imix_distribution array.
      An example of the  pre-computed array is below:
      
      The imix_distribution will look like the following:
      0        ->  0 (index of imix_entry.size == 40)
      1        ->  0 (index of imix_entry.size == 40)
      2        ->  0 (index of imix_entry.size == 40)
      [...]    ->  0 (index of imix_entry.size == 40)
      57       ->  0 (index of imix_entry.size == 40)
      58       ->  1 (index of imix_entry.size == 576)
      [...]    ->  1 (index of imix_entry.size == 576)
      90       ->  1 (index of imix_entry.size == 576)
      91       ->  2 (index of imix_entry.size == 1500)
      [...]    ->  2 (index of imix_entry.size == 1500)
      99       ->  2 (index of imix_entry.size == 1500)
      
      Create and use "bin" representation of the imix distribution.
      Signed-off-by: default avatarNick Richardson <richardsonnick@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      90149031
    • Nick Richardson's avatar
      pktgen: Parse internet mix (imix) input · 52a62f86
      Nick Richardson authored
      Adds "imix_weights" command for specifying internet mix distribution.
      
      The command is in this format:
      "imix_weights size_1,weight_1 size_2,weight_2 ... size_n,weight_n"
      where the probability that packet size_i is picked is:
      weight_i / (weight_1 + weight_2 + .. + weight_n)
      
      The user may provide up to 100 imix entries (size_i,weight_i) in this
      command.
      
      The user specified imix entries will be displayed in the "Params"
      section of the interface output.
      
      Values for clone_skb > 0 is not supported in IMIX mode.
      
      Summary of changes:
      Add flag for enabling internet mix mode.
      Add command (imix_weights) for internet mix input.
      Return -ENOTSUPP when clone_skb > 0 in IMIX mode.
      Display imix_weights in Params.
      Create data structures to store imix entries and distribution.
      Signed-off-by: default avatarNick Richardson <richardsonnick@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      52a62f86
  3. 11 Aug, 2021 26 commits