Skip to content
  1. Mar 23, 2021
    • David S. Miller's avatar
      Merge branch 'hns3-flow-director' · 3e0144ad
      David S. Miller authored
      
      
      Huazhong Tan says:
      
      ====================
      net: hns3: refactor and new features for flow director
      
      This patchset refactor some functions and add some new features for
      flow director.
      
      patch 1~3: refactor large functions
      patch 4, 7: add traffic class and user-def field support for ethtool
      patch 5: refactor flow director configuration
      patch 6: clean up for hns3_del_all_fd_entries()
      
      change log:
      V1->V2: modifies patch 5 as Jakub suggested, keep configuring
      	ethtool/tc flower rules synchronously while aRFS
      	asynchronously.
      	changes the usecnt of user-def rule checking in patch 7.
      	removes previous patches 8 and 9 from this series, since
      	there are issues that need further discussion.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3e0144ad
    • Jian Shen's avatar
      net: hns3: add support for user-def data of flow director · 67b0e142
      Jian Shen authored
      
      
      For DEVICE_VERSION_V3, the hardware supports to match specified
      data in the specified offset of packet payload. Each layer can
      have one offset, and can't be masked when configure flow director
      rule by ethtool command. The layer is selected based on the
      flow-type, ether for L2, ip4/ipv6 for L3, and tcp4/tcp6/udp4/udp6
      for L4. For example, tcp4/tcp6/udp4/udp6 rules share the same
      user-def offset, but each rule can have its own user-def value.
      
      For the user-def field of ethtool -N/U command is 64 bits long.
      The bit 0~15 is used for user-def value, and bit 32~47 for user-def
      offset in HNS3 driver.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      67b0e142
    • Jian Shen's avatar
      net: hns3: refine for hns3_del_all_fd_entries() · f07203b0
      Jian Shen authored
      
      
      For only PF driver can configure flow director rule, it's
      better to call hclge_del_all_fd_entries() directly in hclge
      layer, rather than call hns3_del_all_fd_entries() in hns3
      layer. Then the ae_algo->ops.del_all_fd_entries can be removed.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f07203b0
    • Jian Shen's avatar
      net: hns3: refactor flow director configuration · fc4243b8
      Jian Shen authored
      
      
      Currently, the flow director rule of aRFS is configured in
      the IO path. It's time-consuming. So move out the configuration,
      and configure it asynchronously. And keep ethtool and tc flower
      rule using synchronous way, otherwise the application maybe
      unable to know the rule is installed or pending.
      
      Add a state member for each flow director rule to indicate the
      rule state. There are 4 states:
      TO_ADD: the rule is waiting to add to hardware
      TO_DEL: the rule is waiting to remove from hardware
      DELETED: the rule has been removed from hardware. It's a middle
              state, used to remove the rule node in the fd_rule_list.
      ACTIVE: the rule is already added in hardware
      
      For asynchronous way, when receive a new request to add or delete
      flow director rule by aRFS, update the rule list, then request to
      schedule the service task to finish the configuration.
      
      For synchronous way, when receive a new request to add or delete
      flow director rule by ethtool or tc flower, configure hardware
      directly, then update the rule list if success.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fc4243b8
    • Jian Shen's avatar
      net: hns3: add support for traffic class tuple support for flow director by ethtool · ae481191
      Jian Shen authored
      
      
      The hardware supports to parse and match the traffic class field
      of IPv6 packet for flow director, uses the same tuple as ip tos.
      So removes the limitation of configure 'tclass' by driver.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ae481191
    • Jian Shen's avatar
      net: hns3: refactor for function hclge_fd_convert_tuple · fb72699d
      Jian Shen authored
      
      
      Currently, there are too many branches for hclge_fd_convert_tuple().
      And it may be more when add new tuples. Refactor it by sorting the
      tuples according to their length. So it only needs several KEY_OPT
      now, and being flexible to add new tuples.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fb72699d
    • Jian Shen's avatar
      net: hns3: refactor out hclge_fd_get_tuple() · 74b755d1
      Jian Shen authored
      
      
      The process of function hclge_fd_get_tuple() is complex and
      prolix. To make it more readable, extract the process of each
      flow-type tuple to a single function.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      74b755d1
    • Jian Shen's avatar
      net: hns3: refactor out hclge_add_fd_entry() · 5f2b1238
      Jian Shen authored
      
      
      The process of function hclge_add_fd_entry() is complex and
      prolix. To make it more readable, extract the process of
      fs->ring_cookie to a single function.
      
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5f2b1238
    • Bhaskar Chowdhury's avatar
      linux/qed: Mundane spelling fixes throughout the file · 405a129f
      Bhaskar Chowdhury authored
      
      
      s/unrequired/"not required"/
      s/consme/consume/ .....two different places
      s/accros/across/
      
      Signed-off-by: default avatarBhaskar Chowdhury <unixbhaskar@gmail.com>
      Acked-by: default avatarIgor Russkikh <irusskikh@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      405a129f
    • Bhaskar Chowdhury's avatar
      openvswitch: Fix a typo · f4477305
      Bhaskar Chowdhury authored
      
      
      s/subsytem/subsystem/
      
      Signed-off-by: default avatarBhaskar Chowdhury <unixbhaskar@gmail.com>
      Acked-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f4477305
    • Bhaskar Chowdhury's avatar
      NFC: Fix a typo · 0853f5ab
      Bhaskar Chowdhury authored
      
      
      s/packaet/packet/
      
      Signed-off-by: default avatarBhaskar Chowdhury <unixbhaskar@gmail.com>
      Acked-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0853f5ab
    • David S. Miller's avatar
      Merge branch 'actions-semi-ethernet-mac' · 5e830282
      David S. Miller authored
      Cristian Ciocaltea says:
      
      ====================
      Add support for Actions Semi Owl Ethernet MAC
      
      This patch series adds support for the Ethernet MAC found on the Actions
      Semi Owl family of SoCs.
      
      For the moment I have only tested the driver on RoseapplePi SBC, which is
      based on the S500 SoC variant. It might work on S900 as well, but I cannot
      tell for sure since the S900 datasheet I currently have doesn't provide
      any information regarding the MAC registers - so I couldn't check the
      compatibility with S500.
      
      Similar story for S700: the datasheet I own is incomplete, but it seems
      the MAC is advertised with Gigabit capabilities. For that reason most
      probably we need to extend the current implementation in order to support
      this SoC variant as well.
      
      Please note that for testing the driver it is also necessary to update the
      S500 clock subsystem:
      
      https://lore.kernel.org/lkml/cover.1615221459.git.cristian.ciocaltea@gmail.com/
      
      
      
      The DTS changes for the S500 SBCs will be provided separately.
      
      Thanks,
      Cristi
      
      Changes in v3:
       - Dropped the 'debug' module parameter and passed the default NETIF_MSG flags
      to netif_msg_init(), according to David's review
      
       - Removed the owl_emac_generate_mac_addr() function and the related
      OWL_EMAC_GEN_ADDR_SYS_SN config option until a portable solution to get
      the system serial number is found - when building on arm64 the following
      error is thrown (as reported by Rob's kernel bot):
       '[...]/owl-emac.c:9:10: fatal error: asm/system_info.h: No such file or directory'
      
       - Rebased patchset on v5.12-rc4
      
      Changes in v2:
      * According to Philipp's review
       - Requested exclusive control over serial line via
         devm_reset_control_get_exclusive()
       - Optimized error handling by using dev_err_probe()
      
      * According to Andrew's review
       - Dropped the inline keywords
       - Applied Reverse Christmas Tree format to local variable declarations
       - Renamed owl_emac_phy_config() to owl_emac_update_link_state()
       - Documented the purpose of the special descriptor used in the context of
         owl_emac_setup_frame_xmit()
       - Updated comment inside owl_emac_mdio_clock_enable() regarding the MDC
         clock divider setup
       - Indicated MAC support for symmetric pause via phy_set_sym_pause()
         in owl_emac_phy_init()
       - Changed the MAC addr generation algorithm in owl_emac_generate_mac_addr()
         by setting the locally administered bit in byte 0 and replacing bytes 1 & 2
         with additional entries from enc_sn
       - Moved devm_add_action_or_reset() before clk_set_rate() in owl_emac_probe()
      
      * Other
       - Added SMII interface support: updated owl_emac_core_sw_reset(), added
         owl_emac_clk_set_rate(), updated description in the YAML binding
       - Changed OWL_EMAC_TX_TIMEOUT from 0.05*HZ to 2*HZ
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5e830282
    • Cristian Ciocaltea's avatar
      MAINTAINERS: Add entries for Actions Semi Owl Ethernet MAC · b31f5183
      Cristian Ciocaltea authored
      
      
      Add entries for Actions Semi Owl Ethernet MAC binding and driver.
      
      Signed-off-by: default avatarCristian Ciocaltea <cristian.ciocaltea@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b31f5183
    • Cristian Ciocaltea's avatar
      net: ethernet: actions: Add Actions Semi Owl Ethernet MAC driver · de6e0b19
      Cristian Ciocaltea authored
      
      
      Add new driver for the Ethernet MAC used on the Actions Semi Owl
      family of SoCs.
      
      Currently this has been tested only on the Actions Semi S500 SoC
      variant.
      
      Signed-off-by: default avatarCristian Ciocaltea <cristian.ciocaltea@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      de6e0b19
    • Cristian Ciocaltea's avatar
      dt-bindings: net: Add Actions Semi Owl Ethernet MAC binding · fd42327f
      Cristian Ciocaltea authored
      
      
      Add devicetree binding for the Ethernet MAC present on the Actions
      Semi Owl family of SoCs.
      
      For the moment advertise only the support for the Actions Semi S500 SoC
      variant.
      
      Signed-off-by: default avatarCristian Ciocaltea <cristian.ciocaltea@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fd42327f
    • Vladimir Oltean's avatar
      net/sched: cls_flower: use nla_get_be32 for TCA_FLOWER_KEY_FLAGS · abee13f5
      Vladimir Oltean authored
      
      
      The existing code is functionally correct: iproute2 parses the ip_flags
      argument for tc-flower and really packs it as big endian into the
      TCA_FLOWER_KEY_FLAGS netlink attribute. But there is a problem in the
      fact that W=1 builds complain:
      
      net/sched/cls_flower.c:1047:15: warning: cast to restricted __be32
      
      This is because we should use the dedicated helper for obtaining a
      __be32 pointer to the netlink attribute, not a u32 one. This ensures
      type correctness for be32_to_cpu.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      abee13f5
    • Vladimir Oltean's avatar
      net/sched: cls_flower: use ntohs for struct flow_dissector_key_ports · 6215afcb
      Vladimir Oltean authored
      
      
      A make W=1 build complains that:
      
      net/sched/cls_flower.c:214:20: warning: cast from restricted __be16
      net/sched/cls_flower.c:214:20: warning: incorrect type in argument 1 (different base types)
      net/sched/cls_flower.c:214:20:    expected unsigned short [usertype] val
      net/sched/cls_flower.c:214:20:    got restricted __be16 [usertype] dst
      
      This is because we use htons on struct flow_dissector_key_ports members
      src and dst, which are defined as __be16, so they are already in network
      byte order, not host. The byte swap function for the other direction
      should have been used.
      
      Because htons and ntohs do the same thing (either both swap, or none
      does), this change has no functional effect except to silence the
      warnings.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6215afcb
    • Vincent Mailhol's avatar
      netdev: add netdev_queue_set_dql_min_limit() · f57bac3c
      Vincent Mailhol authored
      
      
      Add a function to set the dynamic queue limit minimum value.
      
      Some specific drivers might have legitimate reasons to configure
      dql.min_limit to a given value. Typically, this is the case when the
      PDU of the protocol is smaller than the packet size to used to
      carry those frames to the device.
      
      Concrete example: a CAN (Control Area Network) device with an USB 2.0
      interface.  The PDU of classical CAN protocol are roughly 16 bytes but
      the USB packet size (which is used to carry the CAN frames to the
      device) might be up to 512 bytes.  Wen small traffic burst occurs, BQL
      algorithm is not able to immediately adjust and this would result in
      having to send many small USB packets (i.e packet of 16 bytes for each
      CAN frame). Filling up the USB packet with CAN frames is relatively
      fast (small latency issue) but the gain of not having to send several
      small USB packets is huge (big throughput increase). In this case,
      forcing dql.min_limit to a given value that would allow to stuff the
      USB packet is always a win.
      
      This function is to be used by network drivers which are able to prove
      through a rationale and through empirical tests on several environment
      (with other applications, heavy context switching, virtualization...),
      that they constantly reach better performances with a specific
      predefined dql.min_limit value with no noticeable latency impact.
      
      Signed-off-by: default avatarVincent Mailhol <mailhol.vincent@wanadoo.fr>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f57bac3c
    • Alexander Lobakin's avatar
      dsa: simplify Kconfig symbols and dependencies · 227d7206
      Alexander Lobakin authored
      1. Remove CONFIG_HAVE_NET_DSA.
      
      CONFIG_HAVE_NET_DSA is a legacy leftover from the times when drivers
      should have selected CONFIG_NET_DSA manually.
      Currently, all drivers has explicit 'depends on NET_DSA', so this is
      no more needed.
      
      2. CONFIG_HAVE_NET_DSA dependencies became CONFIG_NET_DSA's ones.
      
       - dropped !S390 dependency which was introduced to be sure NET_DSA
         can select CONFIG_PHYLIB. DSA migrated to Phylink almost 3 years
         ago and the PHY library itself doesn't depend on !S390 since
         commit 870a2b5e
      
       ("phylib: remove !S390 dependeny from Kconfig");
       - INET dependency is kept to be sure we can select NET_SWITCHDEV;
       - NETDEVICES dependency is kept to be sure we can select PHYLINK.
      
      3. DSA drivers menu now depends on NET_DSA.
      
      Instead on 'depends on NET_DSA' on every single driver, the entire
      menu now depends on it. This eliminates a lot of duplicated lines
      from Kconfig with no loss (when CONFIG_NET_DSA=m, drivers also can
      be only m or n).
      This also has a nice side effect that there's no more empty menu on
      configurations without DSA.
      
      4. Kbuild will now descend into 'drivers/net/dsa' only when
         CONFIG_NET_DSA is y or m.
      
      This is safe since no objects inside this folder can be built without
      DSA core, as well as when CONFIG_NET_DSA=m, no objects can be
      built-in.
      
      Signed-off-by: default avatarAlexander Lobakin <alobakin@pm.me>
      Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      227d7206
  2. Mar 21, 2021
    • Vladimir Oltean's avatar
      Revert "net: dsa: sja1105: Clear VLAN filtering offload netdev feature" · a1e6f641
      Vladimir Oltean authored
      This reverts commit e9bf9694.
      
      The topic of the reverted patch is the support for switches with global
      VLAN filtering, added by commit 061f6a50 ("net: dsa: Add
      ndo_vlan_rx_{add, kill}_vid implementation"). Be there a switch with 4
      ports swp0 -> swp3, and the following setup:
      
      ip link add br0 type bridge vlan_filtering 1
      ip link set swp0 master br0
      ip link set swp1 master br0
      
      What would happen with VLAN-tagged traffic received on standalone ports
      swp2 and swp3? Well, it would get dropped, were it not for the
      .ndo_vlan_rx_add_vid and .ndo_vlan_rx_kill_vid implementations (called
      from vlan_vid_add and vlan_vid_del respectively). Basically, for DSA
      switches where VLAN filtering is a global attribute, we enforce the
      standalone ports to have 'rx-vlan-filter: off [fixed]' in their ethtool
      features, which lets the user know that all VLAN-tagged packets that are
      not explicitly added in the RX filtering list are dropped.
      
      As for the sja1105 driver, at the time of the reverted patch, it was
      operating in a pretty handicapped mode when it had ports under a bridge
      with vlan_filtering=1. Specifically, it was unable to terminate traffic
      through the CPU port (for further explanation see "Traffic support" in
      Documentation/networking/dsa/sja1105.rst).
      
      However, since then, the sja1105 driver has made considerable progress,
      and that limitation is no longer as severe now. Specifically, since
      commit 2cafa72e ("net: dsa: sja1105: add a new
      best_effort_vlan_filtering devlink parameter"), the driver is able to
      perform CPU termination even when some ports are under bridges with
      vlan_filtering=1. Then, since commit 8841f6e6
      
       ("net: dsa: sja1105:
      make devlink property best_effort_vlan_filtering true by default"), this
      even became the default operating mode.
      
      So we can now take advantage of the logic in the DSA core.
      
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a1e6f641
    • Heiner Kallweit's avatar
      r8169: add support for ethtool get_ringparam · dc4aa50b
      Heiner Kallweit authored
      
      
      Add support for the ethtool get_ringparam operation.
      
      Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dc4aa50b
    • David S. Miller's avatar
      Merge branch 'ipa-cfg-data-updates' · e0e7af0d
      David S. Miller authored
      
      
      Alex Elder says:
      
      ====================
      net: ipa: more configuration data updates
      
      This series starts with two patches that should have been included
      in an earlier series.  With these in place, QSB settings are
      programmed from information found in the data files rather than
      being embedded in code.  Support is then added for reprenting
      another QSB property (supported for IPA v4.0+).
      
      The third patch updates the definition of the sequencer type used
      for an endpoint.  Previously a set of 2-byte symbols with fairly
      long names defined the sequencer type, but now those are broken into
      1-byte halves whose names are a little more informative.
      
      The fourth patch moves the sequencer type definition so it only
      applies to TX endpoints (they aren't valid for RX endpoints).  And
      the last makes some minor documentation updates.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e0e7af0d
    • Alex Elder's avatar
      net: ipa: update some comments in "ipa_data.h" · b259cc2a
      Alex Elder authored
      
      
      Fix/expand some comments in "ipa_data.h".
      
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b259cc2a
    • Alex Elder's avatar
      net: ipa: sequencer type is for TX endpoints only · 1690d8a7
      Alex Elder authored
      
      
      We only program the sequencer type for TX endpoints.  So move the
      definition of the sequencer type fields into the TX-specific portion
      of the endpoint configuration data.  There's no need to maintain
      this in the IPA structure; we can extract it from the configuration
      data it points to in the one spot it's needed.
      
      We previously specified the sequencer type for RX endpoints with
      INVALID values.  These are no longer needed, so get rid of them.
      
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1690d8a7
    • Alex Elder's avatar
      net: ipa: split sequencer type in two · 8ee5df65
      Alex Elder authored
      
      
      An IPA endpoint has a sequencer that must be configured based on how
      the endpoint is to be used.  Currently the IPA code programs the
      sequencer type by splitting a value into four 4-bit nibbles.  Doing
      that doesn't really add much value, and regardless, a better way of
      splitting the sequencer type is into two halves--the lower byte
      describing how normal packet processing is handled, and the next
      byte describing information about processing replicas.
      
      So split the sequencer type into two sub-parts:  the sequencer type
      and the replication sequencer type.  Define the values supported for
      the "main" sequencer type, and define the values supported for the
      replication part separately.
      
      In addition, the sequencer type names are quite verbose, encoding
      what the type includes, but also what it *excludes*.  Rename the
      sequencer types in a way that mainly describes the number of passes
      that a packet takes through the IPA processing pipeline, and how
      many of those passes end by supplying the processed packet to the
      microprocessor.
      
      The result expands the supported types beyond what is required for
      now, but simplifies the way these are defined.
      
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8ee5df65
    • Alex Elder's avatar
      net: ipa: implement MAX_READS_BEATS QSB data · b9aa0805
      Alex Elder authored
      
      
      Starting with IPA v4.0, a limit is placed on the number of bytes
      outstanding in a transaction, to reduce latency.  The limit is
      imposed only if this value is non-zero.
      
      We don't use a non-zero value for SC7180, but newer versions of IPA
      do.  Prepare for that by allowing a programmed value to be specified
      in the platform configuration data.
      
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b9aa0805
    • Alex Elder's avatar
      net: ipa: use configuration data for QSB settings · 8a81efac
      Alex Elder authored
      
      
      Use the QSB configuration data in ipa_hardware_config_qsb(), rather
      than determining in code what values to use based on IPA version.
      Pass configuration data to ipa_hardware_config() so it can be passed
      to ipa_hardware_config_qsb().
      
      Signed-off-by: default avatarAlex Elder <elder@linaro.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8a81efac
    • Sai Kalyaan Palla's avatar
      net: decnet: Fixed multiple coding style issues · b29648ad
      Sai Kalyaan Palla authored
      
      
      Made changes to coding style as suggested by checkpatch.pl
      changes are of the type:
      	open brace '{' following struct go on the same line
      	do not use assignment in if condition
      
      Signed-off-by: default avatarSai Kalyaan Palla <saikalyaan63@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b29648ad
  3. Mar 20, 2021