1. 27 Jul, 2020 26 commits
    • David S. Miller's avatar
      Merge branch 'Add-PRP-driver' · 65ccbbda
      David S. Miller authored
      Murali Karicheri says:
      
      ====================
      Add PRP driver
      
      This series is dependent on the following patches sent out to
      netdev list. All (1-3) are already merged to net/master as of
      sending this, but not on the net-next master branch. So need
      to apply them to net-next before applying this series. v3 of
      the iproute2 patches can be merged to work with this series
      as there are no updates since then.
      
      [1] https://marc.info/?l=linux-netdev&m=159526378131542&w=2
      [2] https://marc.info/?l=linux-netdev&m=159499772225350&w=2
      [3] https://marc.info/?l=linux-netdev&m=159499772425352&w=2
      
      This series adds support for Parallel Redundancy Protocol (PRP)
      in the Linux HSR driver as defined in IEC-62439-3. PRP Uses a
      Redundancy Control Trailer (RCT) the format of which is
      similar to HSR Tag. This is used for implementing redundancy.
      RCT consists of 6 bytes similar to HSR tag and contain following
      fields:-
      
      - 16-bit sequence number (SeqNr);
      - 4-bit LAN identifier (LanId);
      - 12 bit frame size (LSDUsize);
      - 16-bit suffix (PRPsuffix).
      
      The PRPsuffix identifies PRP frames and distinguishes PRP frames
      from other protocols that also append a trailer to their useful
      data. The LSDUsize field allows the receiver to distinguish PRP
      frames from random, nonredundant frames as an additional check.
      LSDUsize is the size of the Ethernet payload inclusive of the
      RCT. Sequence number along with LanId is used for duplicate
      detection and discard.
      
      PRP node is also known as Dual Attached Node (DAN-P) since it
      is typically attached to two different LAN for redundancy.
      DAN-P duplicates each of L2 frames and send it over the two
      Ethernet links. Each outgoing frame is appended with RCT.
      Unlike HSR, these are added to the end of L2 frame and will be
      treated as pad by bridges and therefore would be work with
      traditional bridges or switches, where as HSR wouldn't as Tag
      is prefixed to the Ethenet frame. At the remote end, these are
      received and the duplicate frame is discarded before the stripped
      frame is send up the networking stack. Like HSR, PRP also sends
      periodic Supervision frames to the network. These frames are
      received and MAC address from the SV frames are populated in a
      database called Node Table. The above functions are grouped into
      a block called Link Redundancy Entity (LRE) in the IEC spec.
      
      As there are many similarities between HSR and PRP protocols,
      this patch re-uses the code from HSR driver to implement PRP
      driver. As per feedback from the RFC series, the implementation
      uses the existing HSR Netlink socket interface to create the
      PRP interface by adding a new proto parameter to the ip link
      command to identify the PRP protocol. iproute2 is enhanced to
      implement this new parameter. The hsr_netlink.c is enhanced
      to handle the new proto parameter. As suggested during the RFC
      review, the driver introduced a proto_ops structure to hold
      protocol specfic functions to handle HSR and PRP specific
      function pointers and use them in the code based on the
      protocol to handle protocol specific part differently in the
      driver.
      
      Please review this and provide me feedback so that I can work to
      incorporate them and spin the next version if needed.
      
      The patch was tested using two TI AM57x IDK boards for PRP which
      are connected back to back over two CPSW Ethernet ports.
      
      PRP Test setup
      ---------------
      
      --------eth0             eth0 --------
      |AM572x|----------------------|AM572x|
      |      |----------------------|      |
      --------eth1             eth1 --------
      
      To build, enable CONFIG_HSR=y or m
      make omap2plus_defconfig
      make zImage; make modules; make dtbs
      Copy the zImage and dtb files to the file system on SD card
      and power on the AM572x boards.
      This can be tested on any platforms with 2 Ethernet interfaces.
      So will appreciate if you can give it a try and provide your
      Tested-by.
      
      Command to create PRP interface
      -------------------------------
      ifconfig eth0 0.0.0.0 down
      ifconfig eth1 0.0.0.0 down
      ifconfig eth0 hw ether 70:FF:76:1C:0E:8C
      ifconfig eth1 hw ether 70:FF:76:1C:0E:8C
      ifconfig eth0 up
      ifconfig eth1 up
      ip link add name prp0 type hsr slave1 eth0 slave2 eth1 supervision 45 proto 1
      ifconfig prp0 192.168.2.10
      
      ifconfig eth0 0.0.0.0 down
      ifconfig eth1 0.0.0.0 down
      ifconfig eth0 hw ether 70:FF:76:1C:0E:8D
      ifconfig eth1 hw ether 70:FF:76:1C:0E:8D
      ifconfig eth0 up
      ifconfig eth1 up
      ip link add name prp0 type hsr slave1 eth0 slave2 eth1 supervision 45 proto 1
      ifconfig prp0 192.168.2.20
      
      command to show node table
      ----------------------------
      Ping the peer board after the prp0 interface is up.
      
      The remote node (DAN-P) will be shown in the node table as below.
      
      root@am57xx-evm:~# cat /sys/kernel/debug/hsr/prp0/node_table
      Node Table entries for (PRP) device
      MAC-Address-A,    MAC-Address-B,    time_in[A], time_in[B], Address-B port, SAN-A, SAN-B, DAN-P
      70:ff:76:1c:0e:8c 00:00:00:00:00:00   ffffe83f,   ffffe83f,              0,     0,     0,     1
      
      Try to capture the raw PRP frames at the eth0 interface as
      tcpdump -i eth0 -xxx
      
      Sample Supervision frames and ARP frames shown below.
      
      ==================================================================================
      Successive Supervision frames captured with tcpdump (with RCT at the end):
      
      03:43:29.500999 70:ff:76:1c:0e:8d (oui Unknown) > 01:15:4e:00:01:2d (oui Unknown), ethertype Unknown (0x88f
              0x0000:  0115 4e00 012d 70ff 761c 0e8d 88fb 0001
              0x0010:  7e0a 1406 70ff 761c 0e8d 0000 0000 0000
              0x0020:  0000 0000 0000 0000 0000 0000 0000 0000
              0x0030:  0000 0000 0000 0000 0000 0000 fc2b a034
              0x0040:  88fb
      
      03:43:31.581025 70:ff:76:1c:0e:8d (oui Unknown) > 01:15:4e:00:01:2d (oui Unknown), ethertype Unknown (0x88f
              0x0000:  0115 4e00 012d 70ff 761c 0e8d 88fb 0001
              0x0010:  7e0b 1406 70ff 761c 0e8d 0000 0000 0000
              0x0020:  0000 0000 0000 0000 0000 0000 0000 0000
              0x0030:  0000 0000 0000 0000 0000 0000 fc2c a034
              0x0040:  88fb
      
      ICMP Echo request frame with RCT
      03:43:33.805354 IP 192.168.2.20 > 192.168.2.10: ICMP echo request, id 63748, seq 1, length 64
              0x0000:  70ff 761c 0e8c 70ff 761c 0e8d 0800 4500
              0x0010:  0054 26a4 4000 4001 8e96 c0a8 0214 c0a8
              0x0020:  020a 0800 c28e f904 0001 202e 1c3d 0000
              0x0030:  0000 0000 0000 0000 0000 0000 0000 0000
              0x0040:  0000 0000 0000 0000 0000 0000 0000 0000
              0x0050:  0000 0000 0000 0000 0000 0000 0000 0000
              0x0060:  0000 fc31 a05a 88fb
      ==================================================================================
      The iperf3 traffic test logs can be accessed at the links below.
      DUT-1: https://pastebin.ubuntu.com/p/8SkQzWJMn8/
      DUT-2: https://pastebin.ubuntu.com/p/j2BZvvs7p4/
      
      Other tests done.
       - Connect a SAN (eth0 and eth1 without prp interface) and
         do ping test from eth0 (192.168.2.40) to prp0 (192.168.2.10)
         verify the SAN node shows at the correct link A and B as shown
         in the node table dump
       - Regress HSR interface using 3 nodes connected in a ring topology.
         create hsr link version 0. Do iperf3 test between all nodes
         create hsr link version 1. Do iperf3 test between all nodes.
      
               --------eth0             eth1 --------eth0      eth1-------|
               |AM572x|----------------------|AM572x|--------------|AM572x|
               |      |                      |      |        ------|      |
               --------eth1---|               -------        | eth0 -------
                              |-------------------------------
      
         command used for HSR interface
      
         HSR V0
      
         ifconfig eth0 0.0.0.0 down
         ifconfig eth1 0.0.0.0 down
         ifconfig eth0 hw ether 70:FF:76:1C:0E:8C
         ifconfig eth1 hw ether 70:FF:76:1C:0E:8C
         ifconfig eth0 up
         ifconfig eth1 up
         ip link add name hsr0 type hsr slave1 eth0 slave2 eth1 supervision 45 version 0
         ifconfig hsr0 192.168.2.10
      
         HSR V1
      
         ifconfig eth0 0.0.0.0 down
         ifconfig eth1 0.0.0.0 down
         ifconfig eth0 hw ether 70:FF:76:1C:0E:8C
         ifconfig eth1 hw ether 70:FF:76:1C:0E:8C
         ifconfig eth0 up
         ifconfig eth1 up
         ip link add name hsr0 type hsr slave1 eth0 slave2 eth1 supervision 45 version 1
         ifconfig hsr0 192.168.2.10
      
         Logs at
         DUT-1 : https://pastebin.ubuntu.com/p/6PSJbZwQ6y/
         DUT-2 : https://pastebin.ubuntu.com/p/T8TqJsPRHc/
         DUT-3 : https://pastebin.ubuntu.com/p/VNzpv6HzKj/
       - Build tests :-
         Build with CONFIG_HSR=m
         allmodconfig build
         build with CONFIG_HSR=y and rebuild with sparse checker
         make C=1 zImage; make modules
      
      Version history:
        v5 : Fixed comments about Kconfig changes on Patch 1/7 against v4
             Rebased to netnext/master branch.
      
        v4 : fixed following vs v3
             reverse xmas tree for local variables
             check for return type in call to skb_put_padto()
      
        v3 : Separated bug fixes from this series and send them for immediate merge
             But for that this is same as v2.
      
        v2 : updated comments on RFC. Following are the main changes:-
             - Removed the hsr_prp prefix
             - Added PRP information in header files to indicate
               the support for PRP explicitely
             - Re-use netlink socket interface with an added
               parameter proto for identifying PRP.
             - Use function pointers using a proto_ops struct
               to do things differently for PRP vs HSR.
      
         RFC: initial version posted and discussed at
             https://www.spinics.net/lists/netdev/msg656229.html
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      65ccbbda
    • Murali Karicheri's avatar
      net: prp: enhance debugfs to display PRP info · 795ec4f5
      Murali Karicheri authored
      Print PRP specific information from node table as part of debugfs
      node table display. Also display the node as DAN-H or DAN-P depending
      on the info from node table.
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      795ec4f5
    • Murali Karicheri's avatar
      net: prp: add packet handling support · 451d8123
      Murali Karicheri authored
      DAN-P (Dual Attached Nodes PRP) nodes are expected to receive
      traditional IP packets as well as PRP (Parallel Redundancy
      Protocol) tagged (trailer) packets. PRP trailer is 6 bytes
      of PRP protocol unit called RCT, Redundancy Control Trailer
      (RCT) similar to HSR tag. PRP network can have traditional
      devices such as bridges/switches or PC attached to it and
      should be able to communicate. Regular Ethernet devices treat
      the RCT as pads.  This patch adds logic to format L2 frames
      from network stack to add a trailer (RCT) and send it as
      duplicates over the slave interfaces when the protocol is
      PRP as per IEC 62439-3. At the ingress, it strips the trailer,
      do duplicate detection and rejection and forward a stripped
      frame up the network stack. PRP device should accept frames
      from Singly Attached Nodes (SAN) and thus the driver mark
      the link where the frame came from in the node table.
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      451d8123
    • Murali Karicheri's avatar
      net: hsr: define and use proto_ops ptrs to handle hsr specific frames · fa4dc895
      Murali Karicheri authored
      As a preparatory patch to introduce PRP, refactor the code specific to
      handling HSR frames into separate functions and call them through
      proto_ops function pointers.
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fa4dc895
    • Murali Karicheri's avatar
      net: prp: add supervision frame generation utility function · c643ff03
      Murali Karicheri authored
      Add support for generation of PRP supervision frames. For PRP,
      supervision frame format is similar to HSR version 0, but have
      a PRP Redundancy Control Trailer (RCT) added and uses a different
      message type, PRP_TLV_LIFE_CHECK_DD. Also update
      is_supervision_frame() to include the new message type used for
      PRP supervision frame.
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c643ff03
    • Murali Karicheri's avatar
      net: hsr: introduce protocol specific function pointers · 28e458e0
      Murali Karicheri authored
      As a preparatory patch to introduce support for PRP protocol, add a
      protocol ops ptr in the private hsr structure to hold function
      pointers as some of the functions at protocol level packet
      handling is different for HSR vs PRP. It is expected that PRP will
      add its of set of functions for protocol handling. Modify existing
      hsr_announce() function to call proto_ops->send_sv_frame() to send
      supervision frame for HSR. This is expected to be different for PRP.
      So introduce a ops function ptr, send_sv_frame() for the same and
      initialize it to send_hsr_supervsion_frame(). Modify hsr_announce()
      to call proto_ops->send_sv_frame().
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      28e458e0
    • Murali Karicheri's avatar
      net: hsr: introduce common code for skb initialization · 121c33b0
      Murali Karicheri authored
      As a preparatory patch to introduce PRP protocol support in the
      driver, refactor the skb init code to a separate function.
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      121c33b0
    • Murali Karicheri's avatar
      hsr: enhance netlink socket interface to support PRP · 8f4c0e01
      Murali Karicheri authored
      Parallel Redundancy Protocol (PRP) is another redundancy protocol
      introduced by IEC 63439 standard. It is similar to HSR in many
      aspects:-
      
       - Use a pair of Ethernet interfaces to created the PRP device
       - Use a 6 byte redundancy protocol part (RCT, Redundancy Check
         Trailer) similar to HSR Tag.
       - Has Link Redundancy Entity (LRE) that works with RCT to implement
         redundancy.
      
      Key difference is that the protocol unit is a trailer instead of a
      prefix as in HSR. That makes it inter-operable with tradition network
      components such as bridges/switches which treat it as pad bytes,
      whereas HSR nodes requires some kind of translators (Called redbox) to
      talk to regular network devices. This features allows regular linux box
      to be converted to a DAN-P box. DAN-P stands for Dual Attached Node - PRP
      similar to DAN-H (Dual Attached Node - HSR).
      
      Add a comment at the header/source code to explicitly state that the
      driver files also handles PRP protocol as well.
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8f4c0e01
    • Alexander Lobakin's avatar
      qed: fix the allocation of the chains with an external PBL · 1775da47
      Alexander Lobakin authored
      Dan reports static checker warning:
      
      "The patch 9b6ee3cf: "qed: sanitize PBL chains allocation" from Jul
      23, 2020, leads to the following static checker warning:
      
      	drivers/net/ethernet/qlogic/qed/qed_chain.c:299 qed_chain_alloc_pbl()
      	error: uninitialized symbol 'pbl_virt'.
      
      drivers/net/ethernet/qlogic/qed/qed_chain.c
         249  static int qed_chain_alloc_pbl(struct qed_dev *cdev, struct qed_chain *chain)
         250  {
         251          struct device *dev = &cdev->pdev->dev;
         252          struct addr_tbl_entry *addr_tbl;
         253          dma_addr_t phys, pbl_phys;
         254          __le64 *pbl_virt;
                      ^^^^^^^^^^^^^^^^
      [...]
         271          if (chain->b_external_pbl)
         272                  goto alloc_pages;
                              ^^^^^^^^^^^^^^^^ uninitialized
      [...]
         298                  /* Fill the PBL table with the physical address of the page */
         299                  pbl_virt[i] = cpu_to_le64(phys);
                              ^^^^^^^^^^^
      [...]
      "
      
      This issue was introduced with commit c3a321b0 ("qed: simplify
      initialization of the chains with an external PBL"), when
      chain->pbl_sp.table_virt initialization was moved up to
      qed_chain_init_params().
      Fix it by initializing pbl_virt with an already filled chain struct field.
      
      Fixes: c3a321b0 ("qed: simplify initialization of the chains with an external PBL")
      Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarAlexander Lobakin <alobakin@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1775da47
    • David S. Miller's avatar
      Merge branch 'bnxt_en-update' · 43e7a0e5
      David S. Miller authored
      Michael Chan says:
      
      ====================
      bnxt_en update.
      
      This patchset removes the PCIe histogram and other debug register
      data from ethtool -S. The removed data are not counters and they have
      very large and constantly fluctuating values that are not suitable for
      the ethtool -S decimal counter display.
      
      The rest of the patches implement counter rollover for all hardware
      counters that are not 64-bit counters.  Different generations of
      hardware have different counter widths.  The driver will now query
      the counter widths of all counters from firmware and implement
      rollover support on all non-64-bit counters.
      
      The last patch adds the PCIe histogram and other PCIe register data back
      using the ethtool -d interface.
      
      v2: Fix bnxt_re RDMA driver compile issue.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      43e7a0e5
    • Vasundhara Volam's avatar
      bnxt_en: Add support for 'ethtool -d' · b5d600b0
      Vasundhara Volam authored
      Add support to dump PXP registers and PCIe statistics.
      Signed-off-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b5d600b0
    • Michael Chan's avatar
      bnxt_en: Switch over to use the 64-bit software accumulated counters. · a0c30621
      Michael Chan authored
      Now we can report all the full 64-bit CPU endian software accumulated
      counters instead of the hw counters, some of which may be less than
      64-bit wide.  Define the necessary macros to access the software
      counters.
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a0c30621
    • Michael Chan's avatar
      bnxt_en: Accumulate all counters. · fea6b333
      Michael Chan authored
      Now that we have the infrastructure in place, add the new function
      bnxt_accumulate_all_stats() to periodically accumulate and check for
      counter rollover of all ring stats and port stats.
      
      A chip bug was also discovered that could cause some ring counters to
      become 0 during DMA.  Workaround by ignoring zeros on the affected
      chips.
      
      Some older frimware will reset port counters during ifdown.  We need
      to check for that and free the accumulated port counters during ifdown
      to prevent bogus counter overflow detection during ifup.
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fea6b333
    • Michael Chan's avatar
      bnxt_en: Retrieve hardware masks for port counters. · 531d1d26
      Michael Chan authored
      If supported by newer firmware, make the firmware call to query all
      the port counter masks.  If not supported, assume 40-bit port
      counter masks.
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      531d1d26
    • Michael Chan's avatar
      bnxt_en: Retrieve hardware counter masks from firmware if available. · d752d053
      Michael Chan authored
      Newer firmware has a new call HWRM_FUNC_QSTATS_EXT to retrieve the
      masks of all ring counters.  Make this call when supported to
      initialize the hardware masks of all ring counters.  If the call
      is not available, assume 48-bit ring counter masks on P5 chips.
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d752d053
    • Michael Chan's avatar
      bnxt_en: Allocate additional memory for all statistics blocks. · a37120b2
      Michael Chan authored
      Some of these DMAed hardware counters are not full 64-bit counters and
      so we need to accumulate them as they overflow.  Allocate copies of these
      DMA statistics memory blocks with the same size for accumulation.  The
      hardware counter widths are also counter specific so we allocate
      memory for masks that correspond to each counter.
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a37120b2
    • Michael Chan's avatar
      bnxt_en: Refactor statistics code and structures. · 177a6cde
      Michael Chan authored
      The driver manages multiple statistics structures of different sizes.
      They are all allocated, freed, and handled practically the same.  Define
      a new bnxt_stats_mem structure and common allocation and free functions
      for all staistics memory blocks.
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      177a6cde
    • Michael Chan's avatar
      bnxt_en: Use macros to define port statistics size and offset. · 24c93443
      Michael Chan authored
      The port statistics structures have hard coded padding and offset.
      Define macros to make this look cleaner.
      Reviewed-by: default avatarPavan Chebbi <pavan.chebbi@broadcom.com>
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      24c93443
    • Michael Chan's avatar
      bnxt_en: Update firmware interface to 1.10.1.54. · bfc6e5fb
      Michael Chan authored
      Main changes are 200G support and fixing the definitions of discard and
      error counters to match the hardware definitions.
      
      Because the HWRM_PORT_PHY_QCFG message size has now exceeded the max.
      encapsulated response message size of 96 bytes from the PF to the VF,
      we now need to cap this message to 96 bytes for forwarding.  The forwarded
      response only needs to contain the basic link status and speed information
      and can be capped without adding the new information.
      
      v2: Fix bnxt_re compile error.
      
      Cc: Selvin Xavier <selvin.xavier@broadcom.com>
      Reviewed-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Reviewed-by: default avatarEdwin Peer <edwin.peer@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bfc6e5fb
    • Vasundhara Volam's avatar
      bnxt_en: Remove PCIe non-counters from ethtool statistics · dfe64de9
      Vasundhara Volam authored
      Remove PCIe non-counters display from ethtool statistics, as
      they are not simple counters but register dump.  The next few
      patches will add logic to detect counter roll-over and it won't
      work with these PCIe non-counters.
      
      There will be a follow up patch to get PCIe information via
      ethtool register dump.
      Signed-off-by: default avatarVasundhara Volam <vasundhara-v.volam@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dfe64de9
    • Martin Varghese's avatar
      net: Removed the device type check to add mpls support for devices · 350e7ab9
      Martin Varghese authored
      MPLS has no dependency with the device type of underlying devices.
      Hence the device type check to add mpls support for devices can be
      avoided.
      Signed-off-by: default avatarMartin Varghese <martin.varghese@nokia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      350e7ab9
    • Ido Schimmel's avatar
      ipmr: Copy option to correct variable · 73cb1193
      Ido Schimmel authored
      Cited commit mistakenly copied provided option to 'val' instead of to
      'mfc':
      
      ```
      -               if (copy_from_user(&mfc, optval, sizeof(mfc))) {
      +               if (copy_from_sockptr(&val, optval, sizeof(val))) {
      ```
      
      Fix this by copying the option to 'mfc'.
      
      selftest router_multicast.sh before:
      
      $ ./router_multicast.sh
      smcroutectl: Unknown or malformed IPC message 'a' from client.
      smcroutectl: failed removing multicast route, does not exist.
      TEST: mcast IPv4                                                    [FAIL]
              Multicast not received on first host
      TEST: mcast IPv6                                                    [ OK ]
      smcroutectl: Unknown or malformed IPC message 'a' from client.
      smcroutectl: failed removing multicast route, does not exist.
      TEST: RPF IPv4                                                      [FAIL]
              Multicast not received on first host
      TEST: RPF IPv6                                                      [ OK ]
      
      selftest router_multicast.sh after:
      
      $ ./router_multicast.sh
      TEST: mcast IPv4                                                    [ OK ]
      TEST: mcast IPv6                                                    [ OK ]
      TEST: RPF IPv4                                                      [ OK ]
      TEST: RPF IPv6                                                      [ OK ]
      
      Fixes: 01ccb5b4 ("net/ipv4: switch ip_mroute_setsockopt to sockptr_t")
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      73cb1193
    • David S. Miller's avatar
      Merge branch 'net-smc-show-unique-rsn-code-for-exceeded-max-dmb-count' · a4e3ee7d
      David S. Miller authored
      Karsten Graul says:
      
      ====================
      net/smc: show unique rsn code for exceeded max dmb count
      
      Resolve some confusion at the user side when the reason code shows
      out-of-memory but actually there is enough memory left.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a4e3ee7d
    • Karsten Graul's avatar
      net/smc: unique reason code for exceeded max dmb count · 72b7f6c4
      Karsten Graul authored
      When the maximum dmb buffer limit for an ism device is reached no more
      dmb buffers can be registered. When this happens the reason code is set
      to SMC_CLC_DECL_MEM indicating out-of-memory. This is the same reason
      code that is used when no memory could be allocated for the new dmb
      buffer.
      This is confusing for users when they see this error but there is more
      memory available. To solve this set a separate new reason code when the
      maximum dmb limit exceeded.
      Reviewed-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      72b7f6c4
    • Karsten Graul's avatar
      s390/ism: indicate correct error reason in ism_alloc_dmb() · 211e5b7a
      Karsten Graul authored
      When the ism driver allocates a new dmb in ism_alloc_dmb() it must
      first check for and reserve a slot in the sba bitmap. When
      find_next_zero_bit() finds no free slot then the return code is -ENOMEM.
      This code conflicts with the error when the alloc() fails later in the
      code. As a result of that the caller can not differentiate
      between out-of-memory conditions and sba-bitmap-full conditions.
      Fix that by using the return code -ENOSPC when the sba slot
      reservation failed.
      Reviewed-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
      Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      211e5b7a
    • Julia Lawall's avatar
      sfc: drop unnecessary list_empty · d21a06d5
      Julia Lawall authored
      list_for_each_safe is able to handle an empty list.
      The only effect of avoiding the loop is not initializing the
      index variable.
      Drop list_empty tests in cases where these variables are not
      used.
      
      The semantic patch that makes this change is as follows:
      (http://coccinelle.lip6.fr/)
      
      <smpl>
      @@
      expression x,e;
      iterator name list_for_each_safe;
      statement S;
      identifier i,j;
      @@
      
      -if (!(list_empty(x))) {
         list_for_each_safe(i,j,x) S
      - }
       ... when != i
           when != j
      (
        i = e;
      |
      ? j = e;
      )
      </smpl>
      Signed-off-by: default avatarJulia Lawall <Julia.Lawall@inria.fr>
      Acked-by: default avatarEdward Cree <ecree@solarflare.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d21a06d5
  2. 26 Jul, 2020 1 commit
    • David S. Miller's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net · a57066b1
      David S. Miller authored
      The UDP reuseport conflict was a little bit tricky.
      
      The net-next code, via bpf-next, extracted the reuseport handling
      into a helper so that the BPF sk lookup code could invoke it.
      
      At the same time, the logic for reuseport handling of unconnected
      sockets changed via commit efc6b6f6
      which changed the logic to carry on the reuseport result into the
      rest of the lookup loop if we do not return immediately.
      
      This requires moving the reuseport_has_conns() logic into the callers.
      
      While we are here, get rid of inline directives as they do not belong
      in foo.c files.
      
      The other changes were cases of more straightforward overlapping
      modifications.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a57066b1
  3. 25 Jul, 2020 13 commits
    • Linus Torvalds's avatar
      Merge tag 'riscv-for-linus-5.8-rc7' of... · 04300d66
      Linus Torvalds authored
      Merge tag 'riscv-for-linus-5.8-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux into master
      
      Pull RISC-V fixes from Palmer Dabbelt:
       "A few more fixes this week:
      
         - A fix to avoid using SBI calls during kasan initialization, as the
           SBI calls themselves have not been probed yet.
      
         - Three fixes related to systems with multiple memory regions"
      
      * tag 'riscv-for-linus-5.8-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
        riscv: Parse all memory blocks to remove unusable memory
        RISC-V: Do not rely on initrd_start/end computed during early dt parsing
        RISC-V: Set maximum number of mapped pages correctly
        riscv: kasan: use local_tlb_flush_all() to avoid uninitialized __sbi_rfence
      04300d66
    • Linus Torvalds's avatar
      Merge tag 'x86-urgent-2020-07-25' of... · fbe0d451
      Linus Torvalds authored
      Merge tag 'x86-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into master
      
      Pull x86 fixes from Ingo Molnar:
       "Misc fixes:
      
         - Fix a section end page alignment assumption that was causing
           crashes
      
         - Fix ORC unwinding on freshly forked tasks which haven't executed
           yet and which have empty user task stacks
      
         - Fix the debug.exception-trace=1 sysctl dumping of user stacks,
           which was broken by recent maccess changes"
      
      * tag 'x86-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/dumpstack: Dump user space code correctly again
        x86/stacktrace: Fix reliable check for empty user task stacks
        x86/unwind/orc: Fix ORC for newly forked tasks
        x86, vmlinux.lds: Page-align end of ..page_aligned sections
      fbe0d451
    • Linus Torvalds's avatar
      Merge tag 'perf-urgent-2020-07-25' of... · 78b1afe2
      Linus Torvalds authored
      Merge tag 'perf-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into master
      
      Pull uprobe fix from Ingo Molnar:
       "Fix an interaction/regression between uprobes based shared library
        tracing & GDB"
      
      * tag 'perf-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        uprobes: Change handle_swbp() to send SIGTRAP with si_code=SI_KERNEL, to fix GDB regression
      78b1afe2
    • Linus Torvalds's avatar
      Merge tag 'timers-urgent-2020-07-25' of... · a7b36c2b
      Linus Torvalds authored
      Merge tag 'timers-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into master
      
      Pull timer fix from Ingo Molnar:
       "Fix a suspend/resume regression (crash) on TI AM3/AM4 SoC's"
      
      * tag 'timers-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        clocksource/drivers/timer-ti-dm: Fix suspend and resume for am3 and am4
      a7b36c2b
    • Linus Torvalds's avatar
      Merge tag 'sched-urgent-2020-07-25' of... · 3077805e
      Linus Torvalds authored
      Merge tag 'sched-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into master
      
      Pull scheduler fixes from Ingo Molnar:
       "Fix a race introduced by the recent loadavg race fix, plus add a debug
        check for a hard to debug case of bogus wakeup function flags"
      
      * tag 'sched-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched: Warn if garbage is passed to default_wake_function()
        sched: Fix race against ptrace_freeze_trace()
      3077805e
    • Linus Torvalds's avatar
      Merge tag 'efi-urgent-2020-07-25' of... · 17baa442
      Linus Torvalds authored
      Merge tag 'efi-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into master
      
      Pull EFI fixes from Ingo Molnar:
       "Various EFI fixes:
      
         - Fix the layering violation in the use of the EFI runtime services
           availability mask in users of the 'efivars' abstraction
      
         - Revert build fix for GCC v4.8 which is no longer supported
      
         - Clean up some x86 EFI stub details, some of which are borderline
           bugs that copy around garbage into padding fields - let's fix these
           out of caution.
      
         - Fix build issues while working on RISC-V support
      
         - Avoid --whole-archive when linking the stub on arm64"
      
      * tag 'efi-urgent-2020-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        efi: Revert "efi/x86: Fix build with gcc 4"
        efi/efivars: Expose RT service availability via efivars abstraction
        efi/libstub: Move the function prototypes to header file
        efi/libstub: Fix gcc error around __umoddi3 for 32 bit builds
        efi/libstub/arm64: link stub lib.a conditionally
        efi/x86: Only copy upto the end of setup_header
        efi/x86: Remove unused variables
      17baa442
    • Linus Torvalds's avatar
      Merge tag '5.8-rc6-cifs-fix' of git://git.samba.org/sfrench/cifs-2.6 into master · 7cb3a5c5
      Linus Torvalds authored
      Pull cifs fix from Steve French:
       "A fix for a recently discovered regression in rename to older servers
        caused by a recent patch"
      
      * tag '5.8-rc6-cifs-fix' of git://git.samba.org/sfrench/cifs-2.6:
        Revert "cifs: Fix the target file was deleted when rename failed."
      7cb3a5c5
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net into master · 1b64b2e2
      Linus Torvalds authored
      Pull networking fixes from David Miller:
      
       1) Fix RCU locaking in iwlwifi, from Johannes Berg.
      
       2) mt76 can access uninitialized NAPI struct, from Felix Fietkau.
      
       3) Fix race in updating pause settings in bnxt_en, from Vasundhara
          Volam.
      
       4) Propagate error return properly during unbind failures in ax88172a,
          from George Kennedy.
      
       5) Fix memleak in adf7242_probe, from Liu Jian.
      
       6) smc_drv_probe() can leak, from Wang Hai.
      
       7) Don't muck with the carrier state if register_netdevice() fails in
          the bonding driver, from Taehee Yoo.
      
       8) Fix memleak in dpaa_eth_probe, from Liu Jian.
      
       9) Need to check skb_put_padto() return value in hsr_fill_tag(), from
          Murali Karicheri.
      
      10) Don't lose ionic RSS hash settings across FW update, from Shannon
          Nelson.
      
      11) Fix clobbered SKB control block in act_ct, from Wen Xu.
      
      12) Missing newlink in "tx_timeout" sysfs output, from Xiongfeng Wang.
      
      13) IS_UDPLITE cleanup a long time ago, incorrectly handled
          transformations involving UDPLITE_RECV_CC. From Miaohe Lin.
      
      14) Unbalanced locking in netdevsim, from Taehee Yoo.
      
      15) Suppress false-positive error messages in qed driver, from Alexander
          Lobakin.
      
      16) Out of bounds read in ax25_connect and ax25_sendmsg, from Peilin Ye.
      
      17) Missing SKB release in cxgb4's uld_send(), from Navid Emamdoost.
      
      18) Uninitialized value in geneve_changelink(), from Cong Wang.
      
      19) Fix deadlock in xen-netfront, from Andera Righi.
      
      19) flush_backlog() frees skbs with IRQs disabled, so should use
          dev_kfree_skb_irq() instead of kfree_skb(). From Subash Abhinov
          Kasiviswanathan.
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (111 commits)
        drivers/net/wan: lapb: Corrected the usage of skb_cow
        dev: Defer free of skbs in flush_backlog
        qrtr: orphan socket in qrtr_release()
        xen-netfront: fix potential deadlock in xennet_remove()
        flow_offload: Move rhashtable inclusion to the source file
        geneve: fix an uninitialized value in geneve_changelink()
        bonding: check return value of register_netdevice() in bond_newlink()
        tcp: allow at most one TLP probe per flight
        AX.25: Prevent integer overflows in connect and sendmsg
        cxgb4: add missing release on skb in uld_send()
        net: atlantic: fix PTP on AQC10X
        AX.25: Prevent out-of-bounds read in ax25_sendmsg()
        sctp: shrink stream outq when fails to do addstream reconf
        sctp: shrink stream outq only when new outcnt < old outcnt
        AX.25: Fix out-of-bounds read in ax25_connect()
        enetc: Remove the mdio bus on PF probe bailout
        net: ethernet: ti: add NETIF_F_HW_TC hw feature flag for taprio offload
        net: ethernet: ave: Fix error returns in ave_init
        drivers/net/wan/x25_asy: Fix to make it work
        ipvs: fix the connection sync failed in some cases
        ...
      1b64b2e2
    • Atish Patra's avatar
      riscv: Parse all memory blocks to remove unusable memory · fa5a1983
      Atish Patra authored
      Currently, maximum physical memory allowed is equal to -PAGE_OFFSET.
      That's why we remove any memory blocks spanning beyond that size. However,
      it is done only for memblock containing linux kernel which will not work
      if there are multiple memblocks.
      
      Process all memory blocks to figure out how much memory needs to be removed
      and remove at the end instead of updating the memblock list in place.
      Signed-off-by: default avatarAtish Patra <atish.patra@wdc.com>
      Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
      fa5a1983
    • Atish Patra's avatar
      RISC-V: Do not rely on initrd_start/end computed during early dt parsing · 4400231c
      Atish Patra authored
      Currently, initrd_start/end are computed during early_init_dt_scan
      but used during arch_setup. We will get the following panic if initrd is used
      and CONFIG_DEBUG_VIRTUAL is turned on.
      
      [    0.000000] ------------[ cut here ]------------
      [    0.000000] kernel BUG at arch/riscv/mm/physaddr.c:33!
      [    0.000000] Kernel BUG [#1]
      [    0.000000] Modules linked in:
      [    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 5.8.0-rc4-00015-ged0b226fed02 #886
      [    0.000000] epc: ffffffe0002058d2 ra : ffffffe0000053f0 sp : ffffffe001001f40
      [    0.000000]  gp : ffffffe00106e250 tp : ffffffe001009d40 t0 : ffffffe00107ee28
      [    0.000000]  t1 : 0000000000000000 t2 : ffffffe000a2e880 s0 : ffffffe001001f50
      [    0.000000]  s1 : ffffffe0001383e8 a0 : ffffffe00c087e00 a1 : 0000000080200000
      [    0.000000]  a2 : 00000000010bf000 a3 : ffffffe00106f3c8 a4 : ffffffe0010bf000
      [    0.000000]  a5 : ffffffe000000000 a6 : 0000000000000006 a7 : 0000000000000001
      [    0.000000]  s2 : ffffffe00106f068 s3 : ffffffe00106f070 s4 : 0000000080200000
      [    0.000000]  s5 : 0000000082200000 s6 : 0000000000000000 s7 : 0000000000000000
      [    0.000000]  s8 : 0000000080011010 s9 : 0000000080012700 s10: 0000000000000000
      [    0.000000]  s11: 0000000000000000 t3 : 000000000001fe30 t4 : 000000000001fe30
      [    0.000000]  t5 : 0000000000000000 t6 : ffffffe00107c471
      [    0.000000] status: 0000000000000100 badaddr: 0000000000000000 cause: 0000000000000003
      [    0.000000] random: get_random_bytes called from print_oops_end_marker+0x22/0x46 with crng_init=0
      
      To avoid the error, initrd_start/end can be computed from phys_initrd_start/size
      in setup itself. It also improves the initrd placement by aligning the start
      and size with the page size.
      
      Fixes: 76d2a049 ("RISC-V: Init and Halt Code")
      Signed-off-by: default avatarAtish Patra <atish.patra@wdc.com>
      Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
      4400231c
    • Xie He's avatar
      drivers/net/wan: lapb: Corrected the usage of skb_cow · 8754e137
      Xie He authored
      This patch fixed 2 issues with the usage of skb_cow in LAPB drivers
      "lapbether" and "hdlc_x25":
      
      1) After skb_cow fails, kfree_skb should be called to drop a reference
      to the skb. But in both drivers, kfree_skb is not called.
      
      2) skb_cow should be called before skb_push so that is can ensure the
      safety of skb_push. But in "lapbether", it is incorrectly called after
      skb_push.
      
      More details about these 2 issues:
      
      1) The behavior of calling kfree_skb on failure is also the behavior of
      netif_rx, which is called by this function with "return netif_rx(skb);".
      So this function should follow this behavior, too.
      
      2) In "lapbether", skb_cow is called after skb_push. This results in 2
      logical issues:
         a) skb_push is not protected by skb_cow;
         b) An extra headroom of 1 byte is ensured after skb_push. This extra
            headroom has no use in this function. It also has no use in the
            upper-layer function that this function passes the skb to
            (x25_lapb_receive_frame in net/x25/x25_dev.c).
      So logically skb_cow should instead be called before skb_push.
      
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: Martin Schiller <ms@dev.tdt.de>
      Signed-off-by: default avatarXie He <xie.he.0141@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8754e137
    • David S. Miller's avatar
      Merge branch 'net-dsa-mv88e6xxx-port-mtu-support' · dfecd3e0
      David S. Miller authored
      Chris Packham says:
      
      ====================
      net: dsa: mv88e6xxx: port mtu support
      
      This series connects up the mv88e6xxx switches to the dsa infrastructure for
      configuring the port MTU. The first patch is also a bug fix which might be a
      candiatate for stable.
      
      I've rebased this series on top of net-next/master to pick up Andrew's change
      for the gigabit switches. Patch 1 and 2 are unchanged (aside from adding
      Andrew's Reviewed-by). Patch 3 is reworked to make use of the existing mtu
      support.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dfecd3e0
    • Chris Packham's avatar
      net: dsa: mv88e6xxx: Use chip-wide max frame size for MTU · 1baf0fac
      Chris Packham authored
      Some of the chips in the mv88e6xxx family don't support jumbo
      configuration per port. But they do have a chip-wide max frame size that
      can be used. Use this to approximate the behaviour of configuring a port
      based MTU.
      Signed-off-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1baf0fac